Utilizar instrucciones Do...Loop

Microsoft VBA

Utilizar instrucciones Do...Loop

   

Se pueden usar instrucciones Do...Loop para ejecutar un bloque de instrucciones un número indefinido de veces. Las instrucciones se repiten mientras una condición sea True o hasta que llegue a ser True.

Repetir instrucciones mientras una condición es True

Hay dos formas de utilizar la palabra clave While para comprobar el estado de una condición en una instrucción Do...Loop. Se puede comprobar la condición antes de entrar en el bucle, o después de que el bucle se haya ejecutado al menos una vez.

En el siguiente procedimiento ComPrimeroWhile, la condición se comprueba antes de entrar en el bucle. Si miNum vale 9 en vez de 20, las instrucciones contenidas en el bucle no se ejecutarán nunca. En el procedimiento ComFinalWhile, las instrucciones contenidas en el bucle sólo se ejecutarán una vez antes de que la condición llegue a ser False.

Sub ComPrimeroWhile()
    contador = 0
    miNum = 20
    Do While miNum > 10
        miNum = miNum - 1
        contador = contador + 1
    Loop
    MsgBox "El bucle se ha repetido " & contador & " veces."
End Sub

Sub ComFinalWhile()
    contador = 0
    miNum = 9
    Do
        miNum = miNum - 1
        contador = contador + 1
    Loop While miNum > 10
    MsgBox "El bucle se ha repetido " & contador & " veces."
End Sub

Repetir instrucciones hasta que una condición llegue a ser True

Hay dos formas de utilizar la palabra clave Until para comprobar el estado de una condición en una instrucción Do...Loop. Se puede comprobar la condición antes de entrar en el bucle (como muestra el procedimiento ComPrimeroUntil) o se pueden comprobar después de que el bucle se haya ejecutado al menos una vez (como muestra el procedimiento ComFinalUntil). El bucle sigue ejecutándose mientras la condición siga siendo False.

Sub ComPrimeroUntil()
    contador = 0
    miNum = 20
    Do Until miNum = 10
        miNum = miNum - 1
        contador = contador + 1
    Loop
    MsgBox "El bucle se ha repetido " & contador & " veces."
End Sub

Sub ComFinalUntil()
    contador = 0
    miNum = 1
    Do
        miNum = miNum + 1
        contador = contador + 1
    Loop Until miNum = 10
    MsgBox "El bucle se ha repetido " & counter & " veces."
End Sub

Instrucción de salida de Do...Loop desde dentro del bucle

Es posible salir de Do...Loop usando la instrucción Exit Do. Por ejemplo, para salir de un bucle sin fin, se puede usar la instrucción Exit Do en el bloque de instrucciones True de una instrucción If...Then...Else o Select Case. Si la condición es False, el bucle seguirá ejecutándose normalmente.

En el siguiente ejemplo, se asigna a miNum un valor que crea un bucle sin fin. La instrucción If...Then...Else comprueba esa condición y ejecuta entonces la salida, evitando así el bucle sin fin.

Sub EjemploSalida()
    contador = 0
    miNum = 9
    Do Until miNum = 10
        miNum = miNum - 1
        contador = contador + 1
        If miNum < 10 Then Exit Do
    Loop
    MsgBox "El bucle se ha repetido " & contador & " veces."
End Sub

Nota    Para detener la ejecución de un bucle sin fin, presione la tecla ESC o CTRL+PAUSE.