级联if语句不起作用



我在代码的以下部分中得到了编译错误"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)

如果您有更多的条件要涵盖,您可能想将其作为Select Case语句进行尝试。

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

 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

最新更新