我试图弄清楚为什么嵌套的ElseIf语句在循环通过列时不会触发。该循环过早退出而不计算嵌套的ElseIf语句,从而导致列不被更新。我知道如果我把嵌套的ElseIf改为普通的If,它就会工作。但我想知道为什么。
以下是我的数据:
下面是我的代码:
Sub test1()
Dim x As Range
For Each x In Range("B2:B11"):
If x.Value = 0 Then
If x.Offset(0, -1).Value = "Ford" Then x.Value = 1001
If x.Offset(0, -1).Value = "Toyota" Then x.Value = 1002
If x.Offset(0, -1).Value = "Honda" Then x.Value = 1003
ElseIf x.Value = 1 Then
If x.Offset(0, 1) = "California" Then x.Value = 2001
ElseIf x.Offset(0, 1) = "New York" Then x.Value = 6001
End If
Next x
End Sub
谢谢你
2条答案
按热度按时间pgky5nke1#
当你在同一行的
Then
后面写一个带有命令的If语句时,你有一个单行的If
语句。这些If语句不需要End If
,它们在行尾“完成”。您可以在同一行上有一个
Else
-分支(这使得它在大多数情况下不可读),但不能在同一行上有一个ElseIf。因此,最后一个
ElseIf
-语句不是加州If
的else分支,它被视为第一个If
-语句的另一个ElseIf
。它仅在x.Value = 0
为False且x.Value = 1
为False时执行(您的数据永远不会出现这种情况)。正确缩进后,您的代码为看到你的问题了吗
New York
-分支永远不会命中,因为x始终为0或1。你可以写(就像你为汽车品牌所做的那样)或者(我猜你已经试过了)
或使用一个选择情况下的内部部分(这是我会这样做)
注意:
For
-语句末尾的冒号是超流利的。冒号表示在同一行上有另一个语句。6ojccjat2#
另一种替代多个
If
和ElseIf
的方法是使用Select Case
,请参阅下面的修改代码: