我在此代码中缺少什么:“否则,如果没有错误”?

时间:2018-09-25 21:15:08

标签: excel vba if-statement

我正在尝试运行此代码,该代码首先根据“数据”选项卡中的单元格声明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

3 个答案:

答案 0 :(得分:9)

If语句具有两种合法语法。

内联:

If {bool-expression} Then {statement}

然后阻止:

If {bool-expression} Then
    {statements}
End If

因此,如果在Then关键字后的同一行中有一条语句,则VBA会将If语句解析为内联语法。

因此,由于该语句是完整的,所以下一个以ElseIf开头的语句对编译器没有意义:存在“ else if”。

答案 1 :(得分:7)

中有一个鲜为人知的事实(或者我怎么称呼它,微软的一点小玩笑..),其中 If..Then..End If < / strong>条件实际上有两种既定形式:

  1. 单行语法
  2. 多行语法

根据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