VBA嵌套“for”和“if”

问题描述 投票:1回答:2

我在循环中做嵌套的if,基本上是:

1:  For i = 1 To n
    If condition1 Then
2:     For j = 1 To m
           If condition2 Then
3:            For k = 1 To p
                  If condition3 Then
                     statement1
                  End If
              Next k
           End If
        Next j
    End If
    Next i

statement1之后,我想Exit循环23并直接去1

但是,如果我使用Exit For,这将只退出3。如果我在1之前添加一行,然后使用GoTo来引用它,它将无法工作,因为程序必须以1开头。

vba for-loop if-statement nested-loops
2个回答
2
投票

您可以使用帮助器Boolean变量来标记何时退出循环2,如下所示

Dim exitLoop2 As Boolean

For i = 1 To n
    If condition1 Then
        exitLoop2 = False ' set it to false at the beginning of any loop 2
        For j = 1 To m
            If condition2 Then
                For k = 1 To p
                    If condition3 Then
                        exitLoop2 = True ' this will make you exit loop 2 once out of loop 3
                        Exit For ' this will exit loop 3
                    'statement1
                    End If
                Next
            End If
            If exitLoop2 Then Exit For ' exit loop 2 if needed
        Next
    End If
Next

1
投票

有更优雅的方式。将您需要的代码包装到虚拟Do ... Loop Until True块中,然后使用Exit Do立即退出。

For i = 1 To n
    Do
        If condition1 Then
           For j = 1 To m
               If condition2 Then
                  For k = 1 To p
                      If condition3 Then
                         statement1
                         Exit Do
                      End If
                  Next k
               End If
            Next j
        End If
    Loop Until True
Next i
© www.soinside.com 2019 - 2024. All rights reserved.