act*_*o99 3 excel vba if-statement
我正在尝试运行此代码,该代码首先声明wsD
,然后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
Run Code Online (Sandbox Code Playgroud)
该If
声明有两种法律语法.
排队:
If {bool-expression} Then {statement}
Run Code Online (Sandbox Code Playgroud)
并阻止:
If {bool-expression} Then
{statements}
End If
Run Code Online (Sandbox Code Playgroud)
因此,如果Then
关键字后面的同一行有一条语句,VBA会将该If
语句解析为内联语法.
因此,由于语句完成,下一个语句开头ElseIf
对编译器没有意义:有一个"else if if".
有一个鲜为人知的事实(或者我怎么想提及它,微软的小恶作剧.)在VBA,该If..Then..End If
条件有实际上是两个既定形式:
根据MSDN,您基本上将多行和单行语法混合成一个糊状:
接下来的
Then
关键字进行检查以确定语句是否是单行If
.如果Then
在同一行之后出现除注释之外的任何内容,则该语句将被视为单行If语句.如果Then
不存在,则必须是多行的开头If...Then...Else
.
单行语句示例:
If <condition> Then <expression>
Run Code Online (Sandbox Code Playgroud)
和多行(你试图做什么):
If <condition> Then
<expression>
ElseIf <condition> Then 'optional, note comment isn't evaluated as single-line expression
<expression>
End If
Run Code Online (Sandbox Code Playgroud)
所以总结起来,你的代码抛出一个错误,因为ElseIf
得到了作为评价<expression>
后If..Then
声明,而不是评估一个有条件像你想要它.
不成文的规则是,总是用多行语法编写.
您不仅可以避免不必要的错误(就像您刚刚遇到的那样),而且在编码器中也很容易阅读和标准.
小智 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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
174 次 |
最近记录: |