Bucles: For... To ... Next/Do While... Loop/Do Loop… Until
Las estructuras de bucle también son conocidas por el nombre de estructuras de control. Permitiendo la repetición de determinadas acciones.
Uno de los errores más comunes que se producen en la utilización de bucles de este tipo, es la no inicialización de las variables utilizadas como contadores de iteraciones. Así que habrá que prestar una atención especial en este punto. Una opción para evitar este posible error, sería la definición al principio del programa, como primera línea de código de éste, el ya comentado Option Explicit.
A continuación se presentan las diferentes opciones que permite el Visual Basic para definir bucles, es decir, repetición y/o acumulación de acciones determinadas, entre unos límites definidos. La no definición de estos límites concretos, sería otro error común y más problemático, al producirse la entrada en bucles infinitos, que bloquean el módulo de cálculo de nuestro ordenador.
Do... Loop Until:
Esta estructura de control se puede usar para ejecutar un bloque de instrucciones un número indefinido de veces. Las instrucciones se repiten hasta que una condición llegue a ser True.
Un ejemplo podría ser el siguiente:
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
Do While... Loop
Siguiendo lo explicado en el punto inicial, otro error común sería el no introducir la línea de acumulación del contador (por ejemplo: i = i + 1), con lo que el bucle entraría cada vez en el cálculo, quedándose colgado en este punto.
En este caso, las instrucciones se repiten mientras una condición sea True (al contrario que con el Do… Loop Until).
Este tipo de bucle se utilizaría normalmente en caso de tener que cumplirse una condición marcada por el While. Así, en este tipo de bucles, se puede dar el caso de que no se entre desde el primer momento, debido al no cumplimiento de esta condición.
Ejemplo de utilización de esta función (hay que fijarse en la inicialización previa de la variable contador i):
i = 5
Do While Hoja1.Cells(i, 2) <> ""
b = Hoja1.Cells(i, 5)
c = Hoja1.Cells(i, 6)
d = (b ^ 2) + (c ^ 2)
a = Sqr(d)
Hoja1.Cells(i, 7) = a
i = i + 1
Loop
For... To... Next
Mediante la palabra clave Step, se puede aumentar o disminuir la variable contador en el valor que se desee (For j = 2 To 10 Step 2).
Se pueden anidar bucles For...Next, colocando un bucle For...Next dentro de otro. Para ello, hay que proporcionar a cada bucle un nombre de variable único como su contador. La siguiente construcción es correcta:
For i = 1 To 10
For j = 1 To 10
...
Next j
Next i
Si se omite un contador en una instrucción Next, la ejecución continúa como si se hubiera incluido. Se produce un error si se encuentra una instrucción Next antes de su instrucción For correspondiente.
Al contrario de lo que se comentaba para los bucles Do… While, los bucles For…, se ejecutarán hasta agotar el intervalo de acumulación del contador, es decir, siempre se entraría en el bucle, y no se pararía de ejecutar hasta no terminar el contador.
Un ejemplo concreto podría ser el siguiente:
For i = 1 To 15
x = Hoja1.Cells(i, 1)
If x <> 0 Then
For j = 2 To x + 1
Hoja1.Cells(i, j).Select
With Selection.Interior
.ColorIndex = x + 2
.Pattern = xlSolid
End With
Next j
End If
Next i
Donde se ve como se deben anidar varios bucles consecutivos, y como se introducen funciones condicionales como If, y otras estructuras de control, como el With, que pasamos a comentar a continuación.
Uno de los errores más comunes que se producen en la utilización de bucles de este tipo, es la no inicialización de las variables utilizadas como contadores de iteraciones. Así que habrá que prestar una atención especial en este punto. Una opción para evitar este posible error, sería la definición al principio del programa, como primera línea de código de éste, el ya comentado Option Explicit.
A continuación se presentan las diferentes opciones que permite el Visual Basic para definir bucles, es decir, repetición y/o acumulación de acciones determinadas, entre unos límites definidos. La no definición de estos límites concretos, sería otro error común y más problemático, al producirse la entrada en bucles infinitos, que bloquean el módulo de cálculo de nuestro ordenador.
Do... Loop Until:
Esta estructura de control se puede usar para ejecutar un bloque de instrucciones un número indefinido de veces. Las instrucciones se repiten hasta que una condición llegue a ser True.
Un ejemplo podría ser el siguiente:
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
Do While... Loop
Siguiendo lo explicado en el punto inicial, otro error común sería el no introducir la línea de acumulación del contador (por ejemplo: i = i + 1), con lo que el bucle entraría cada vez en el cálculo, quedándose colgado en este punto.
En este caso, las instrucciones se repiten mientras una condición sea True (al contrario que con el Do… Loop Until).
Este tipo de bucle se utilizaría normalmente en caso de tener que cumplirse una condición marcada por el While. Así, en este tipo de bucles, se puede dar el caso de que no se entre desde el primer momento, debido al no cumplimiento de esta condición.
Ejemplo de utilización de esta función (hay que fijarse en la inicialización previa de la variable contador i):
i = 5
Do While Hoja1.Cells(i, 2) <> ""
b = Hoja1.Cells(i, 5)
c = Hoja1.Cells(i, 6)
d = (b ^ 2) + (c ^ 2)
a = Sqr(d)
Hoja1.Cells(i, 7) = a
i = i + 1
Loop
For... To... Next
Mediante la palabra clave Step, se puede aumentar o disminuir la variable contador en el valor que se desee (For j = 2 To 10 Step 2).
Se pueden anidar bucles For...Next, colocando un bucle For...Next dentro de otro. Para ello, hay que proporcionar a cada bucle un nombre de variable único como su contador. La siguiente construcción es correcta:
For i = 1 To 10
For j = 1 To 10
...
Next j
Next i
Si se omite un contador en una instrucción Next, la ejecución continúa como si se hubiera incluido. Se produce un error si se encuentra una instrucción Next antes de su instrucción For correspondiente.
Al contrario de lo que se comentaba para los bucles Do… While, los bucles For…, se ejecutarán hasta agotar el intervalo de acumulación del contador, es decir, siempre se entraría en el bucle, y no se pararía de ejecutar hasta no terminar el contador.
Un ejemplo concreto podría ser el siguiente:
For i = 1 To 15
x = Hoja1.Cells(i, 1)
If x <> 0 Then
For j = 2 To x + 1
Hoja1.Cells(i, j).Select
With Selection.Interior
.ColorIndex = x + 2
.Pattern = xlSolid
End With
Next j
End If
Next i
Donde se ve como se deben anidar varios bucles consecutivos, y como se introducen funciones condicionales como If, y otras estructuras de control, como el With, que pasamos a comentar a continuación.
0 comentarios: