31 de mayo de 2026

Bucles

Dominando los bucles

Bucles

Los bucles constituyen la base de la programación iterativa, permitiendo a los desarrolladores procesar conjuntos de registros, validar entradas de formularios o manipular matrices de forma eficiente sin escribir código repetitivo. Existen cuatro estructuras de bucle principales:

  • Do
  • Do (con variaciones While/Until)
  • For Next
  • For Each

Cada una diseñada para escenarios específicos como la repetición condicional o el recorrido de rangos fijos.
La elección del bucle adecuado depende de factores como si se conoce de antemano el número de iteraciones, la necesidad de salidas anticipadas o la estructura de datos involucrada, como los conjuntos de registros.


✅ Bucles Do

Los bucles Do ofrecen la mayor flexibilidad para escenarios donde el número de iteraciones no está predeterminado, lo que los hace ideales para tareas como analizar el resultado de una consulta hasta que se cumpla una condición o solicitar repetidamente a los usuarios que ingresen datos mediante formularios hasta obtener una entrada válida. La estructura verifica una condición antes o después de cada iteración, y admite lógica while (continuar mientras sea verdadera) y until (continuar hasta que sea verdadera).

Do While

✅ Bucles Do While

Evalúa la condición al inicio, omitiendo el bucle por completo si es falsa desde el principio. Ejemplo: Validar la entrada del usuario hasta que se introduzca un número positivo.

Dim numeroIngresado As Integer
Do While numeroIngresado <= 0
    numeroIngresado = Val(InputBox("Introduce un número positivo:"))    
    ' Si el usuario pulsa Cancelar, InputBox devuelve una cadena vacía → Val("") = 0
    ' Para detectar cancelación, comprobamos si devuelve -1 manualmente
    If numeroIngresado = -1 Then Exit Do
Loop

Ventajas: Evita el procesamiento innecesario para condiciones iniciales no válidas, como un conjunto de registros vacío; es muy eficiente para validaciones previas al bucle; admite la instrucción Exit Do limpia.
Desventajas: Existe riesgo de bucles infinitos si la condición no se vuelve falsa; carece de seguimiento de iteraciones integrado.

Do Until

✅ Bucles Do Until

Invierte la lógica, repitiendo el proceso hasta que la condición se cumpla. No se ve mucho esta técnica, pero puede ser muy útil en ocasiones. Ejemplo: Procesar un conjunto de registros hasta llegar al final o encontrar un cliente específico.

Dim registrosClientes As DAO.Recordset
Set registrosClientes = CurrentDb.OpenRecordset("tblCustomers")
Do Until registrosClientes.EOF
    ' Comprobar si el cliente actual es el cliente especial
    If registrosClientes!CustomerName = "SpecialClient" Then
        MsgBox "¡Cliente VIP encontrado!"
        Exit Do
    End If
    ' Mostrar el nombre del cliente en la ventana inmediato
    Debug.Print registrosClientes!CustomerName
    registrosClientes.MoveNext
Loop
registrosClientes.Close
Set registrosClientes = Nothing

Ventajas: Fraseo natural para "seguir hasta terminar"; Exit Do proporciona terminación inmediata.
Desventajas: Aún propenso a la ejecución infinita sin un diseño preciso de las condiciones; requiere una gestión cuidadosa del estado.

✅ Bucles Do…..While o Do..... Until

Realizan comprobaciones posteriores a la iteración, asegurando al menos un ciclo independientemente del estado inicial. Ejemplo: Solicitar confirmación hasta que el usuario esté de acuerdo.

Dim respuesta As String
Do
    respuesta = InputBox("Escribe SÍ para continuar:")    
    ' Si el usuario escribe CANCELAR, salimos del bucle
    If respuesta = "CANCELAR" Then Exit Do
Loop Until respuesta = "SÍ"

Ventajas: Garantiza la ejecución incluso si la condición lo impidiera; útil para interacciones de usuario con la opción de escape Exit Do.
Desventajas: Puede realizar trabajo adicional si la condición falla inmediatamente después de la primera ejecución, lo que podría causar efectos secundarios.

For Next

✅ Bucles For Next

Los bucles For Next resultan muy útiles al trabajar con un número predecible de iteraciones, como recorrer una matriz de valores de campo o un conjunto fijo de controles de formulario indexados del 1 al 10. Los desarrolladores especifican una variable de contador, valores de inicio y fin, y un incremento de paso opcional, lo que permite un recorrido hacia adelante o hacia atrás con un control preciso.

Ejemplo: Sumar valores de una matriz de datos de ventas con salida anticipada.

Dim ventas(1 To 5) As Double
Dim totalVentas As Double
Dim indice As Integer
' Cargar valores de ejemplo
ventas(1) = 100
ventas(2) = 150
ventas(3) = 200
ventas(4) = 175
ventas(5) = 225
For indice = 1 To 5
    ' Si la venta supera 180, avisar y salir del bucle
    If ventas(indice) > 180 Then
        Debug.Print "Venta alta: " & ventas(indice)
        Exit For
    End If
    ' Acumular ventas
    totalVentas = totalVentas + ventas(indice)
Next indice
Debug.Print "Total de ventas: " & totalVentas

Ventajas: Ofrece un control preciso de la iteración; se ejecuta rápidamente con límites conocidos; la instrucción Exit For permite una terminación anticipada limpia.
Desventajas: Se interrumpe si los límites cambian durante la ejecución; carece de salidas elegantes sin Exit For.

For Each

✅ Bucles For Each

El bucle For Each simplifica la iteración sobre colecciones o matrices sin necesidad de indexación manual. Gestiona automáticamente los tamaños dinámicos, centrándose en la lógica de "cada elemento" en lugar de en las posiciones. Este bucle lee los elementos secuencialmente, pero no admite la modificación ni la reversión de forma nativa. Ejemplo: Borrar todos los cuadros de texto de un formulario con salida anticipada.

Dim controlActual As Control
For Each controlActual In Me.Controls
    ' Solo actuar sobre cuadros de texto
    If controlActual.ControlType = acTextBox Then        
        ' Vaciar el contenido del cuadro de texto
        controlActual.Value = ""        
        ' Si es el campo crítico, avisar y salir del bucle
        If controlActual.Name = "txtCampoCritico" Then
            MsgBox "Campo crítico borrado"
            Exit For
        End If
    End If
Next controlActual

Ventajas: Fácil de leer sin necesidad de mantenimiento de índices; se adapta a diferentes tamaños de colección; la función Exit For funciona correctamente.

Desventajas: Los elementos son de solo lectura; generalmente más lento con conjuntos de datos masivos; no permite iteración inversa ni acceso indexado.

✅ Tabla comparativa de bucles**

Tabla bucles


Dominar estos bucles implica combinarlos con las mejores prácticas específicas. Úselos para una navegación robusta de conjuntos de registros e implemente siempre instrucciones Exitpara la cancelación por parte del usuario.
Los bucles For Next inversos, con un paso -1, son obligatorios al eliminar para evitar omitir índices.
Pruebe exhaustivamente en la ventana para Debug con el fin de verificar el comportamiento, especialmente con las eliminaciones de conjuntos de registros.

Este texto es verde

Comentarios

Sé el primero en comentar.

Deja un comentario

Tu comentario será revisado antes de publicarse.

← Volver al blog

Este sitio usa Google Analytics para medir el tráfico de forma anónima, y registra datos de acceso con fines de seguridad. No se usan cookies de publicidad.