我试图运行这段代码,它首先声明wsD,然后根据"Data“选项卡中的单元格声明WsS。我一直得到一个
否则就不会出错。
Set wsD = ThisWorkbook.Sheets("Data")
If wsD.Range("C4") = "AL" Then Set wsS = ThisWorkbook.Sheets("AL_Sim")
ElseIf wsD.Range("C4") = "COLL" Then Set wsS = ThisWorkbook.Sheets("COLL_Sim")
ElseIf wsD.Range("C4") = "COMP" Then Set wsS = ThisWorkbook.Sheets("COMP_Sim")
ElseIf wsD.Range("C4") = "GL" Then Set wsS = ThisWorkbook.Sheets("GL_Sim")
ElseIf wsD.Range("C4") = "EPL" Then Set wsS = ThisWorkbook.Sheets("EPL_Sim")
ElseIf wsD.Range("C4") = "LAW" Then Set wsS = ThisWorkbook.Sheets("LAW_Sim")
ElseIf wsD.Range("C4") = "POL" Then Set wsS = ThisWorkbook.Sheets("POL_Sim")
End If
Next发布于 2018-09-25 21:17:44
您需要在新行上执行操作:
If wsD.Range("C4") = "AL" Then
Set wsS = ThisWorkbook.Sheets("AL_Sim")
ElseIf wsD.Range("C4") = "COLL" Then
Set wsS = ThisWorkbook.Sheets("COLL_Sim")
ElseIf wsD.Range("C4") = "COMP" Then
Set wsS = ThisWorkbook.Sheets("COMP_Sim")
ElseIf wsD.Range("C4") = "GL" Then
Set wsS = ThisWorkbook.Sheets("GL_Sim")
ElseIf wsD.Range("C4") = "EPL" Then
Set wsS = ThisWorkbook.Sheets("EPL_Sim")
ElseIf wsD.Range("C4") = "LAW" Then
Set wsS = ThisWorkbook.Sheets("LAW_Sim")
ElseIf wsD.Range("C4") = "POL" Then
Set wsS = ThisWorkbook.Sheets("POL_Sim")
End If在这里,Select Case会更好:
Select Case wsD.Range("C4")
Case Is = "AL"
Set wsS = ThisWorkbook.Sheets("AL_Sim")
Case Is = "COLL"
Set wsS = ThisWorkbook.Sheets("COLL_Sim")
Case Is = "COMP"
Set wsS = ThisWorkbook.Sheets("COMP_Sim")
Case Is = "GL"
Set wsS = ThisWorkbook.Sheets("GL_Sim")
Case Is = "EPL"
Set wsS = ThisWorkbook.Sheets("EPL_Sim")
Case Is = "LAW"
Set wsS = ThisWorkbook.Sheets("LAW_Sim")
Case Is = "POL"
Set wsS = ThisWorkbook.Sheets("POL_Sim")
End Select发布于 2018-09-25 21:27:58
If语句有两个合法的语法。
内联:
If {bool-expression} Then {statement}和区块:
If {bool-expression} Then
{statements}
End If因此,如果在Then关键字后面的同一行上有一个语句,VBA将If语句解析为内联语法。
因此,由于语句已经完成,下一个以ElseIf开头的语句对编译器没有任何意义:有一个“否则如果”。
发布于 2018-09-25 21:32:59
有一个鲜为人知的事实(或者我喜欢怎么称呼它,微软的一个小小的恶作剧)在If..Then..End If中,vba条件实际上有两个已建立的表单:
您基本上将多行和单行语法混合为一个mush,如MSDN所示。
将检查
Then关键字后面的内容,以确定语句是否为单行If。如果在同一行的Then之后出现了注释以外的任何其他内容,则该语句将被视为单行If语句。如果没有Then,则必须将其作为多行If...Then...Else的开始。
单行语句的示例:
If <condition> Then <expression>和多行(你想要做的)
If <condition> Then
<expression>
ElseIf <condition> Then 'optional, note comment isn't evaluated as single-line expression
<expression>
End If因此,总之,您的代码抛出了一个错误,因为ElseIf在If..Then语句之后被计算为一个<expression>,而不是按照您的意愿对一个条件进行计算。
不成文的规则是,总是用多行语法编写。 不仅你会避免不必要的错误(就像你刚刚遇到的那样),而且它也无疑更容易阅读和编码者之间的标准。
https://stackoverflow.com/questions/52506801
复制相似问题