Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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,在下面的代码部分中,我得到了编译错误“Else without If”。问题是什么?我该如何解决 If InStr(1, Worksheets("Raw data").Cells(i, 3), "1M") Then Call RowCopyPaste("AS-001", i, counter1M) counter1M = counter1M + 1 ElseIf InStr(1, Worksheets("Raw data").Cells(i, 3), "2M") The

在下面的代码部分中,我得到了编译错误“Else without If”。问题是什么?我该如何解决

    If InStr(1, Worksheets("Raw data").Cells(i, 3), "1M") Then Call RowCopyPaste("AS-001", i, counter1M)
    counter1M = counter1M + 1

    ElseIf InStr(1, Worksheets("Raw data").Cells(i, 3), "2M") Then Call RowCopyPaste("AS-001", i, counter2M)
    counter2M = counter2M + 1

    ElseIf InStr(1, Worksheets("Raw data").Cells(i, 3), "3M") Then Call RowCopyPaste("AS-001", i, counter3M)
    counter3M = counter3M + 1

    End If

If比较可以与单个命令位于同一行上,但不能与您正在执行的命令位于同一行上。每个条件下的两个命令应更类似于以下内容

If InStr(1, Worksheets("Raw data").Cells(i, 3), "1M") Then
    Call RowCopyPaste("AS-001", i, counter1M)
    counter1M = counter1M + 1
ElseIf InStr(1, Worksheets("Raw data").Cells(i, 3), "2M") Then
    Call RowCopyPaste("AS-001", i, counter2M)
    counter2M = counter2M + 1
ElseIf InStr(1, Worksheets("Raw data").Cells(i, 3), "3M") Then
    Call RowCopyPaste("AS-001", i, counter3M)
    counter3M = counter3M + 1
End If
类似于以下内容的内容可以单独使用,但不能与其他
ElseIf
命令一起使用

If InStr(1, Worksheets("Raw data").Cells(i, 3), "1M") Then Call RowCopyPaste("AS-001", i, counter1M)

如果您还有更多的条件要覆盖,您可能希望尝试使用此操作。

或者,您可以将嵌套的if替换为,甚至可以将Instr()替换为运算符:

 Select Case True

    Case Worksheets("RawData").Cells(1, 1) Like "*1M*"
       Call RowCopyPaste("AS-001", i, counter1M)
       counter1M = counter1M + 1

    Case Worksheets("RawData").Cells(1, 1) Like "*2M*"
       Call RowCopyPaste("AS-001", i, counter2M)
       counter2M = counter2M + 1

    Case Worksheets("RawData").Cells(1, 1) Like "*3M*"
       Call RowCopyPaste("AS-001", i, counter3M)
       counter3M = counter3M + 1

    Case Else
       '...

End Select

回答得好。也许当你在做这件事的时候,你可以提到如何省去
调用
,因为这会使代码更加地道。虽然
调用
是不必要的,而且有点倒退,但程序员会用它来帮助使自己的代码更易于阅读。我认为,也许这个评论和你的评论应该让其他人知道,他们可以不使用
调用
,只要他们也删除了围绕参数的括号。VBA调用SUB(不使用
调用
)的方式有点奇怪,需要一些时间才能习惯。你是对的,把它留作评论就足够了。