【问题标题】:Excel VBA - exit for loopExcel VBA - 退出循环
【发布时间】:2012-03-13 23:19:10
【问题描述】:

当满足内部条件时,我想退出我的for 循环。满足if 条件时,如何退出for 循环?我认为在我的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

【问题讨论】:

  • If [condition] Then Exit For 在你的循环中

标签: excel vba for-loop


【解决方案1】:

要提前退出循环,您可以使用Exit For

If [condition] Then Exit For

【讨论】:

  • @nixda 请删除您的评论,因为您共享的超链接指向 VB.NET 文档,而不是 Office VBA 文档。 VBA 的Exit 语句的选项比VB.NET 的少。其实VBA只支持:Exit DoExit ForExit FunctionExit PropertyExit Sub。 VBA 没有Exit While。正确的链接是:Office VBA Reference -Exit statement
  • @ExcelHero 完成
【解决方案2】:

另一种提前退出 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

【讨论】:

  • 与显式退出循环相比,分配循环计数器的健壮性和未来证明要差得多。前者可以通过更改循环计数器的最大值来破坏,因为如果编辑器没有注意到它也在其他地方使用,则代码被修改。它也不适用于For Each 循环。
  • 这只是针对For 循环(不是For Each)特定问题的另一种解决方案。优点和缺点适用于不同的解决方案和不同的情况 - 例如,这是一种比 Go To label 更强大的格式,它会阻止逻辑(非结构化编程),或者是 Continue 关键字的可能解决方法,在 VBA 中缺失。如果逻辑没有正确清理对象,Exit For 的优点也可能会受到质疑——不过,糟糕的实现在这里并不完全相关 (@jpmc26)
【解决方案3】:

下面给出的第一个答案确实是 i.m.o.最佳实践:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 2017-05-26
    • 2023-03-29
    相关资源
    最近更新 更多