VBA Excel - thoát vòng lặp


181

Tôi muốn thoát khỏi forvòng lặp của mình khi một điều kiện bên trong được đáp ứng. Làm thế nào tôi có thể thoát khỏi forvòng lặp của mình khi ifđiều kiện đã được đáp ứng? Tôi nghĩ rằng một số loại lối ra vào cuối iftuyên bố của tôi , nhưng không biết làm thế nào nó sẽ hoạt động.

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 Fortrong vòng lặp của bạn
Dan

Câu trả lời:


333

Để thoát khỏi vòng lặp của bạn sớm, bạn có thể sử dụng Exit For

If [condition] Then Exit For


@nixda Vui lòng xóa nhận xét của bạn, vì siêu liên kết bạn đã chia sẻ trỏ đến tài liệu VB.NET, không phải tài liệu Office VBA. ExitTuyên bố của VBA có ít tùy chọn hơn VB.NET. Trên thực tế, VBA chỉ hỗ trợ: Exit Do Exit For Exit Function Exit PropertyExit Sub. VBA không có Exit While. Liên kết chính xác là: Tham khảo VBA Office -Exit
Excel Hero

@ExcelHero Xong
nixda

27

Một cách khác để thoát khỏi vòng lặp For sớm là bằng cách thay đổi bộ đếm vòng lặp:

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
Chỉ định một bộ đếm vòng lặp ít mạnh mẽ hơn và bằng chứng trong tương lai hơn là thoát khỏi vòng lặp một cách rõ ràng. Cái trước có thể bị phá vỡ bởi sự thay đổi tối đa của bộ đếm vòng lặp vì mã được sửa đổi nếu trình soạn thảo không nhận thấy nó cũng được sử dụng ở nơi khác. Nó cũng không áp dụng cho For Eachcác vòng lặp.
jpmc26

2
Đây chỉ đơn giản là một giải pháp khác cho câu hỏi cụ thể cho Forvòng lặp (không For Each). Pro và con áp dụng cho các giải pháp khác nhau và các tình huống khác nhau - ví dụ: đây là định dạng mạnh mẽ hơn so với Go To labellogic phanh (lập trình không có cấu trúc) hoặc giải pháp thay thế có thể của Continuetừ khóa, bị thiếu trong VBA. Những ưu điểm của Exit Forcũng có thể được đặt ra nếu logic không thực hiện việc dọn dẹp đồ vật đúng cách - việc triển khai xấu không hoàn toàn phù hợp ở đây mặc dù (@ jpmc26)
paul bica 23/2/18

0

Câu trả lời đầu tiên được đưa ra với những điều sau đây thực sự là imo thực hành tốt nhất:

if i = 0 then exit for

Tuy nhiên, đây cũng là một lựa chọn:

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.