El ciclo Do...Loop

Como vimos en el capítulo anterior, el ciclo For...Next acumula un valor en un acumulador para llevar la cuenta de cuantas vueltas a dado el ciclo, y frenar cuando se ha llegado al final del ciclo.

En el ciclo Do...Loop el límite estará dado por el resultado de una evaluación lógica. El ciclo continuará dando la vuelta hasta que la evaluación lógica devuelva el resultado esperado. Por ejemplo:

Do While return_do = ""

return_do = InputBox("Ingrese un valor para el ciclo Do:","Ciclo Do")

Loop

Para cada vuelta del ciclo, aparecerá un InputBox que le pedirá al usuario que ingrese un dato cualquiera (una letra, un número, etc). Si el usuario no ingresa un valor (hace clic en Cancelar) El InputBox devuelve una cadena de longitud 0 (es decir, nada) y la evaluación en la definición del ciclo no se cumple, entonces el ciclo dá una vuelta mas (¿?).

Veamos más de cerca la definición del ciclo:

Do While return_do = ""

Si traducimos esto del inglés al castellano tenemos algo asi:
"Hacer mientras que return_do contenga un valor nada"

Lógicamente hablando, significa que ni bien return_do contenga otra cosa que no sea nada el ciclo Do...Loop debe terminar. Otra vez: el ciclo dará una vuelta siempre y cuando return_do esté vacía. Si el usuario pone un valor en return_do (es decir, ingresa algo en el InputBox) el ciclo Do...Loop termina.

Pero mejor que decir, es hacer. Asi que te sugiero que lo pruebes. Pone ese código en la definición de código de un botón, corré el programa y hacé clic en el botón. Verás que mientras que no pongas nada en el InputBox el programa volverá a mostrar el InputBox, o sea, no saldrá del ciclo. Pero si ponés algo, no puede continuar por que la condición return_do = "" no se cumple y deberá continuar con lo siguiente que haya en el programa.

Te voy a mostrar ahora, un pequeño programa que usa el ciclo Do...Loop para guardar unos datos secuenciales en un archivo "de registro" para dejar asentada la presencia de los empleados de una oficina:

 
Private Sub Command1_Click

Open "Registro_Diario.Txt" For Append As #1
Do While return_do <> "finish"

   return_do = InputBox("Ingrese su nombre:", "Registro Diario")
   Print #1, return_do & " entro a las:" & Time$

Loop
Close
#1

End Sub
 

Cuando el operador registró al último empleado, ingresa "finish" en el InputBox y el registro se cierra hasta que se vuelva a iniciar el programa (al otro dia).

Recordá que para la evaluación lógica podés poner cualquier condición que fuera válida en un bloque if. Por ejemplo, podés tener control sobre el Do...Loop con las siguientes definiciones:
   Do While return_do = "finish"
   Do While return_do = 0
   Do While return_do < 100
   Do While Text1.Text <> ""

Bien, espero que este tutorial te haya enseñado más que el anterior.

Te invito ahora a pasar al siguiente capítulo donde trataremos el ciclo While...Wend:

Capítulo #3: While...Wend.