2012-02-23 14 views
106

quisiera salir de mi bucle for cuando en el interior se cumple una condición. ¿Cómo podría salir de mi bucle for cuando se cumple la condición if? Creo que hay algún tipo de salida al final de mi declaración if, pero no sé cómo funcionaría.Excel VBA - salida de bucle

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

'Si [conditio n] a continuación, salga For' dentro de su bucle – Dan

Respuesta

224

Para salir de su bucle temprana puede utilizar Exit For

If [condition] Then Exit For

+2

[MSDN general] (https://msdn.microsoft.com/en-us/library/t2at9t47.aspx) lo que la salida existen declaraciones en VBA – nixda

+0

muy útil, gracias – Doberon

14

Otra manera de salir de un bucle For temprana es cambiando el contador del bucle:

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

Asignar un bucle el contador es mucho menos robusto y a prueba de futuro que salir explícitamente del bucle. El primero se puede romper con un cambio en el máximo del contador de bucle ya que el código se modifica si el editor no se da cuenta de que también se está utilizando en otro lugar. Tampoco se aplica a los bucles 'For Each'. – jpmc26

+0

Esto es simplemente otra solución a la pregunta específica para el bucle 'For' (no' For Each'). Las ventajas y desventajas se aplican a diferentes soluciones y situaciones diferentes; por ejemplo, este es un formato más robusto que la etiqueta 'Ir a' que frena la lógica (programación no estructurada) o una posible solución de la palabra clave 'Continuar', que falta en VBA . Los méritos de 'Exit For' también pueden cuestionarse si la lógica no realiza una limpieza adecuada de los objetos; las implementaciones malas no son muy relevantes aquí (@ jpmc26) –