首页 > 解决方案 > VBA 嵌套 Do While 循环串联运行

问题描述

我有一个非常简单的问题。我试图在 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

标签: excelvbaloopsnested

解决方案


您将需要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此外,除非您期望它返回一个值,否则不要使用括号。


推荐阅读