Excel 我在这段代码中遗漏了什么;否则没有if错误;?
我正在尝试运行此代码,它首先声明Excel 我在这段代码中遗漏了什么;否则没有if错误;?,excel,vba,if-statement,Excel,Vba,If Statement,我正在尝试运行此代码,它首先声明wsD,然后根据“数据”选项卡中的单元格声明WsS。我不断收到一封信 否则没有if错误 您需要在新行上执行以下操作: 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(
wsD
,然后根据“数据”选项卡中的单元格声明WsS
。我不断收到一封信
否则没有if错误
您需要在新行上执行以下操作:
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 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
If
语句有两个合法语法
内联:
If {bool-expression} Then {statement}
和块:
If {bool-expression} Then
{statements}
End If
因此,如果在Then
关键字后面的同一行上有一条语句,VBA将if
语句解析为内联语法
因此,由于语句已经完成,下一个以
ElseIf
开头的语句对编译器来说毫无意义:有一个“没有if的else”。在,If..Then..End If
条件实际上有两种既定形式:
关键字后面的内容,以确定
语句是单行If
如果有评论以外的内容
出现在同一行的之后,然后
,该语句被视为
单行If语句。如果则不存在,则它必须是
多行If…Then…Else
单行语句的示例:
If <condition> Then <expression>
If-Then
和多行(您尝试执行的操作):
If-Then
ElseIf Then'可选,注意注释不会作为单行表达式计算
如果结束
总而言之,您的代码抛出了一个错误,因为ElseIf
在If..Then
语句之后被计算为
,而不是像您希望的那样计算为条件
不成文的规则是,总是用多行语法书写
不仅你会避免不必要的错误(就像你刚才说的那样)
但它也无可争议地更容易阅读,而且
编码员之间的标准
这是for循环吗?在代码中看不到for。粘贴所有ur代码PLS基于范围值和“_Sim”的串联,您也可以简化选择框
。同意,还有其他修改,例如使用和来删除所有此工作簿
引用,但我不知道其余代码是什么样子,所以我想提供一个假设最少的解决方案。谢谢!我不认为换一条新线路会有什么不同。不客气,如果此解决方案解决了您遇到的问题,请将其标记为正确答案。
If <condition> Then <expression>
If <condition> Then
<expression>
ElseIf <condition> Then 'optional, note comment isn't evaluated as single-line expression
<expression>
End If