我正在尝试运行此代码,该代码首先根据“数据”选项卡中的单元格声明wsD
,然后声明WsS
。我不断收到
否则没有if错误。
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
答案 0 :(得分:9)
If
语句具有两种合法语法。
内联:
If {bool-expression} Then {statement}
然后阻止:
If {bool-expression} Then
{statements}
End If
因此,如果在Then
关键字后的同一行中有一条语句,则VBA会将If
语句解析为内联语法。
因此,由于该语句是完整的,所以下一个以ElseIf
开头的语句对编译器没有意义:存在“ else if”。
答案 1 :(得分:7)
在vba中有一个鲜为人知的事实(或者我怎么称呼它,微软的一点小玩笑..),其中 If..Then..End If
< / strong>条件实际上有两种既定形式:
根据MSDN,您基本上将多行和单行语法混合为一个 mush :
检查
Then
关键字之后的内容以确定是否 语句是单行If
。 如果没有评论 在同一行的Then
之后出现,该语句被视为 单行If语句。如果缺少Then
,则必须以a开头 多行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
语句之后<expression>
被评估为 If..Then
,而不是评估达到您想要的条件。
这条未成文的规则是始终以多行语法编写。
您不仅可以避免不必要的错误(例如 ),但它无疑更易于阅读,并且 编码人员中的标准。
答案 2 :(得分:6)
您需要在新行中执行以下操作:
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