2012-02-23 37 views
106

Vorrei uscire dal ciclo for quando viene soddisfatta una condizione interna. Come posso uscire dal ciclo for quando è stata soddisfatta la condizione if? Penso che una sorta di uscita alla fine della mia dichiarazione if, ma non so come potrebbe funzionare.Excel VBA - uscita per loop

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

'Se [conditio n] Quindi Esci da dentro il tuo loop – Dan

risposta

224

Per uscire il ciclo anticipo si può utilizzare Exit For

If [condition] Then Exit For

+2

[Panoramica MSDN] (https://msdn.microsoft.com/en-us/library/t2at9t47.aspx) quali sono le dichiarazioni di uscita esistenti in VBA – nixda

+0

molto utile, grazie – Doberon

14

Un altro modo per uscire da un ciclo For precoce è di cambiare il contatore del ciclo:

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

Assegna un ciclo contatore è molto meno robusto e a prova di futuro che uscire esplicitamente dal ciclo. Il primo può essere interrotto da un cambiamento nel massimo del contatore di loop in quanto il codice viene modificato se l'editor non nota che viene utilizzato anche altrove. Inoltre non si applica ai cicli 'For Each'. – jpmc26

+0

Questa è semplicemente un'altra soluzione alla domanda specifica del ciclo 'For' (non' For Each'). Pro e contro si applicano a diverse soluzioni e situazioni diverse - ad esempio questo è un formato più robusto rispetto all'etichetta 'Go To' che frena la logica (programmazione non strutturata) o una possibile soluzione alternativa alla parola chiave' Continue', mancante in VBA . I meriti di "Exit For" possono essere messi in discussione anche se la logica non esegue una corretta pulizia degli oggetti - le cattive implementazioni non sono comunque rilevanti qui (@ jpmc26) –