La estructura Do...Loop no es fácil de entender, pero es por ello que aquí se va a explicar de forma sencilla cómo emplear la estructura Do...Loop en Visual Basic. Antes de comenzar, saber que esta estructura Do...Loop lo podemos ver de dos formas Do Until...Loop y Do While...Loop
Estructura Do...Loop
Emplearemos la estructura Do ... Loop cuando queramos repetir una serie de acciones indefinidamente en bucle hasta que se cumpla una condición o hasta que deje de cumplirse.
Se escriben esos puntos suspensivos entre las palabras para dar a entender que entre las palabras Do y Loop se va a situar la condición y luego el código a ejecutar si la cumple.
En este ejemplo, necesitamos que Excel nos pregunte si cada miembro del equipo asistió a la reunión. En caso afirmativo debe marcar una X en la columna Asistente, y en caso negativo en la columna Ausente.
Inicio y final del bucle
El bucle, como su nombre indica siempre se inicia con Do y se finaliza con Loop.
Condición
Justo después del Do debemos indicar qué tipo de condición va a seguir. Básicamente lo que estamos escribiendo es la misma condición de diferente forma, pero en ocasiones una puede ser más fácil que la otra.
La estructura Do ... Until (hasta) repetirá el bucle hasta que la condición sea verdadera.
En el ejemplo, vamos a recorrer las celdas de la columna, y le diremos que ejecute el bucle hasta que sea verdadero que la celda está en blanco.
Do Until IsEmpty(ActiveCell)
.
.
Loop
La estructura Do ... While (mientras) repetirá el bucle hasta que la condición sea falsa.
En el ejemplo, vamos a recorrer las celdas de la columna, y le diremos que ejecute el bucle hasta que sea falso que la celda está en blanco.
Do While ActiveCell <> ""
.
.
Loop
Macro completa
Recordando el ejemplo de más arriba, la macro va a recorrer indefinidamente la columna A, cela a celda hasta que la condición que le marcamos deje de cumplirse. En este caso, en el bucle hay una pregunta. Hará tantas preguntas como personas haya en la columna A.
Sub Do_Until()
Range("A2").Select
Do Until IsEmpty(ActiveCell)
tra = Selection
equipo = Selection.Address
asistencia = msgbox("¿Asistió a la reunión " & tra & " ?", vbQuestion + vbYesNo)
If asistencia = 6 Then
Range(equipo).Offset(0, 1) = "x"
ElseIf asistencia = 7 Then
Range(equipo).Offset(0, 2) = "x"
End If
Selection.Offset(1, 0).Select
Loop
End Sub
Range("A2").Select
Do Until IsEmpty(ActiveCell)
tra = Selection
equipo = Selection.Address
asistencia = msgbox("¿Asistió a la reunión " & tra & " ?", vbQuestion + vbYesNo)
If asistencia = 6 Then
Range(equipo).Offset(0, 1) = "x"
ElseIf asistencia = 7 Then
Range(equipo).Offset(0, 2) = "x"
End If
Selection.Offset(1, 0).Select
Loop
End Sub
Sub Do_While()
Range("A2").Select
Do While ActiveCell <> ""
tra = Selection
equipo = Selection.Address
asistencia = msgbox("¿Asistió a la reunión " & tra & " ?", vbQuestion + vbYesNo)
If asistencia = 6 Then
Range(equipo).Offset(0, 1) = "x"
ElseIf asistencia = 7 Then
Range(equipo).Offset(0, 2) = "x"
End If
Selection.Offset(1, 0).Select
Loop
End Sub
Range("A2").Select
Do While ActiveCell <> ""
tra = Selection
equipo = Selection.Address
asistencia = msgbox("¿Asistió a la reunión " & tra & " ?", vbQuestion + vbYesNo)
If asistencia = 6 Then
Range(equipo).Offset(0, 1) = "x"
ElseIf asistencia = 7 Then
Range(equipo).Offset(0, 2) = "x"
End If
Selection.Offset(1, 0).Select
Loop
End Sub
Hay que fijarse en que la última orden antes del Loop es situar la selección en la siguiente celda que va a evaluar.
No hay comentarios:
Publicar un comentario