`exit do`同时转义嵌套循环中的两个while循环

`Exit do` escapes two while loops in nested loops at the same time

我今天早上在测试我的 ms-Access 数据库时遇到了一个有趣的问题。我尝试将一个 recordset (RsOuter) 中的每个值与另一个 recordset (RsInner) 中的每个值进行比较。我这样做的方式是,如果找到匹配的 record,它会使用 Exit do 来逃避 RsInner 循环。这是因为一旦找到匹配的记录,就不需要遍历其余的记录。

Do while not RsOuter.EOF      
       Do While Not RsInner.EOF
            If MatchFound Then
              'do Something
               Exit do ' this escapes both while loops, instead of one
            End If

            RsInner.MoveNext
        Loop
       RsInner.MoveFirst
       RsOuter.MoveNext
Loop

有没有办法让它只退出其中一个循环(在本例中只退出 RsInner)?

你错了 Exit Do 在嵌套的 Do 循环中突破了两个级别。考虑以下因素:

Sub test()
    Dim i As Long, j As Long

    Do While i < 2
        Do While j < 2
            Debug.Print "In inner loop"
            If True Then Exit Do
            j = j + 1
            Debug.Print "This shouldn't be printed"
        Loop
        Debug.Print "In outer loop"
        i = i + 1
    Loop
    Debug.Print "Out of the loops"
End Sub

输出为:

In inner loop
In outer loop
In inner loop
In outer loop
Out of the loops

如果您说的是真的,"In outer loop" 不应打印。您的代码正在发生其他事情。听起来你正在退出外循环条件为 False

的内循环