我有一个非常简单的问题。 我试图在 Excel VBA 中嵌套两个“Do While”循环。 下面的测试代码重现了我遇到的问题。
下面的代码应该产生 12 个消息框。 9 表示嵌套循环,因为它被触发了 3 次,主循环也被触发了 3 次,主循环还有 3 个消息框。
我发现两个循环串联运行,好像它们没有嵌套,所以我总共收到 6 个消息框。
我确定我过去在 VBA 中使用过嵌套循环没有问题(尽管现在我可能需要回去检查一下)。
为什么嵌套循环会在一个系列中运行?它在您的计算机上表现如何?我是否遗漏了一个简单的语法错误?
Sub test()
i = 0
m = 0
Do While i < 3
Do While m < 3
MsgBox ("Nested Loop " & m)
m = m + 1
Loop
MsgBox ("Master Loop " & i)
i = i + 1
Loop
End Sub
答案 0 :(得分:6)
您需要在 m
循环内重置 i
变量,否则它只会在第一次运行 m
循环,因为在您的代码中,一次 m
到达 3
,它将始终为 3
。
Sub test()
i = 0
Do While i < 3
m = 0
Do While m < 3
MsgBox "Nested Loop " & m
m = m + 1
Loop
MsgBox "Master Loop " & i
i = i + 1
Loop
End Sub
此外,不要在 MsgBox
中使用括号,除非您希望它返回一个值。
答案 1 :(得分:2)
在进入循环块之前,两个循环的下界和上界是已知的。
在这种情况下使用的正确循环结构应该是 git checkout my-branch
:
For...Next
当循环开始时迭代次数未知时,使用 Sub test()
Dim i As Long
Dim m As Long
For i = 0 To 2
For m = 0 To 2
Debug.Print "Inner Loop " & m
Next
Debug.Print "Outer Loop " & i
Next
End Sub
块(Do...Loop
、Do...While
、Do While...Loop
等),否则取决于循环体执行过程中满足的条件。
这样你就不需要操作/增加/重置任何循环计数器变量。