2012-02-23 12 views
106

Chciałbym wyjść z pętli for, gdy spełniony jest warunek w środku. Jak mogę wyjść z pętli for po spełnieniu warunku if? Myślę, że jakieś wyjście na końcu mojego oświadczenia if, ale nie wiem jak to by działało.Excel VBA - wyjście dla pętli

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 
+11

'Jeśli [conditio n] Następnie Exit For' wewnątrz pętli – Dan

Odpowiedz

224

Aby zakończyć swoją pętlę wcześnie można użyć Exit For

If [condition] Then Exit For

+2

[Przegląd MSDN] (https://msdn.microsoft.com/en-us/library/t2at9t47.aspx) jakie instrukcje wyjściowe istnieją w VBA – nixda

+0

bardzo przydatne, dzięki – Doberon

14

Innym sposobem, aby wyjść z pętli For wcześnie jest zmiana licznika pętli:

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 
+0

Przypisanie pętli licznik jest znacznie mniej odporny i bardziej odporny na przyszłość niż otwarcie wychodzące z pętli. Ten pierwszy może zostać zerwany przez zmianę wartości maksymalnej licznika pętli, gdy kod zostanie zmodyfikowany, jeśli edytor nie zauważy, że jest on również używany gdzie indziej. Nie ma również zastosowania do pętli 'For Each'. – jpmc26

+0

To jest po prostu kolejne rozwiązanie problemu specyficznego dla pętli 'For' (nie' For Each'). Pro i con's mają zastosowanie do różnych rozwiązań i różnych sytuacji - na przykład jest to bardziej odporny format niż etykieta "Go To", która hamuje logikę (programowanie niestrukturalne) lub możliwe obejście słowa kluczowego "Continue", którego brakuje w VBA . Zalety 'Exit For' mogą być również zakwestionowane, jeśli logika nie przeprowadza właściwego czyszczenia obiektów - złe implementacje nie są tu jednak odpowiednie (@ jpmc26) –