Excel VBA-退出循环


181

我想for在满足内部条件时退出循环。满足条件后如何退出for循环if?我认为我的if发言结束时会有某种退出,但不知道那将如何工作。

Dim i As Long
For i = 1 To 50
    Range("B" & i).Select
    If Range("B" & i).Value = "Artikel" Then
        Dim temp As Long
        temp = i
    End If
Next i
Range("A1:Z" & temp - 1).EntireRow.Delete Shift:=xlToLeft

13
If [condition] Then Exit For在循环中

Answers:


333

要及早退出循环,您可以使用 Exit For

If [condition] Then Exit For


@nixda,请删除您的注释,因为共享的超链接指向VB.NET文档,而不是Office VBA文档。VBA的Exit语句比VB.NET的选项少。实际上,VBA仅支持:Exit Do Exit For Exit Function Exit PropertyExit Sub。VBA没有Exit While。正确的链接是:Office VBA参考-退出语句
Excel Hero

@ExcelHero完成
nixda

27

提前退出For循环的另一种方法是更改​​循环计数器:

For i = 1 To 10
    If i = 5 Then i = 10
Next i

Debug.Print i   '11

For i = 1 To 10
    If i = 5 Then Exit For
Next i

Debug.Print i   '5

3
与明确退出循环相比,分配循环计数器的健壮性和前瞻性要差得多。如果编辑器没有注意到它也在其他地方使用,则可以通过修改循环计数器的最大值来破坏前者。它也不适用于For Each循环。
jpmc26

2
这只是针对特定于For循环问题的另一种解决方案(不是For Each)。优点和缺点适用于不同的解决方案和不同的情况-例如,这种格式比Go To label阻止逻辑(非结构化编程)或ContinueVBA中缺少关键字的可能解决方法的格式更健壮。Exit For如果逻辑未正确执行对象清除操作,也可能会受到质疑-尽管错误的实现在这里并不十分相关(@ jpmc26)
paul bica

0

以下给出的第一个答案确实是imo最佳实践:

if i = 0 then exit for

但是,这也是一个选择:

Sub some()

Count = 0
End_ = ThisWorkbook.Sheets(1).Range("B1047854").End(xlUp).Row

While Count < End_ And Not ThisWorkbook.Sheets(1).Range("B" & Count).Value = "Artikel"
    Count = Count + 1
    If ThisWorkbook.Sheets(1).Range("B" & Count).Value = "Artikel" Then
        ThisWorkbook.Sheets(1).Range("A1:Z" & Count - 1).EntireRow.Delete Shift:=xlToLeft
    End If
Wend

End Sub
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.