Excel 级联if语句不工作
在下面的代码部分中,我得到了编译错误“Else without 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
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(不使用调用
)的方式有点奇怪,需要一些时间才能习惯。你是对的,把它留作评论就足够了。