Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 我在这段代码中遗漏了什么;否则没有if错误;?_Excel_Vba_If Statement - Fatal编程技术网

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
条件实际上有两种既定形式:

  • 单行语法
  • 多行语法
  • 您基本上将多行和单行语法混合到一个mush中,如下所示:

    然后检查
    关键字后面的内容,以确定
    语句是单行
    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