¿Cómo usar la instrucción On…GoSub, On…GoTo en VBA?

En VBA (Visual Basic for Applications), las instrucciones `On…GoSub` y `On…GoTo` se utilizan para desviar la ejecución del programa a diferentes líneas de código basándose en el valor de una expresión numérica. Sin embargo, es importante mencionar que estas instrucciones son consideradas obsoletas y resabios de versiones más antiguas de Basic. A pesar de ello, aquí te explico cómo funcionan:

On…GoSub

La instrucción `On…GoSub` es similar a `GoSub`, pero te permite elegir entre varios destinos (subrutinas) basándose en el valor de una expresión. Después de ejecutar la subrutina especificada, el control regresa a la línea siguiente a la llamada `On…GoSub` tras el `Return`.

Ejemplo:

Sub EjemploOnGoSub()
    Dim Index As Integer
    Index = 2 ' Supongamos que esta es alguna condición o expresión evaluada
    
    On Index GoSub Line1, Line2, Line3
    
    ' ... código ...
    
    Exit Sub

Line1:
    ' ... código para la etiqueta 1 ...
    Return

Line2:
    ' ... código para la etiqueta 2 ...
    Return

Line3:
    ' ... código para la etiqueta 3 ...
    Return
End Sub

En este código, si `Index` es 2, la ejecución irá a la etiqueta `Line2`.

On…GoTo

La instrucción `On…GoTo` es similar a `GoTo`, pero te permite elegir entre varios destinos basándose en el valor de una expresión. A diferencia de `GoSub`, `GoTo` no regresa automáticamente, y generalmente se usa para saltar a diferentes partes de un procedimiento.

Ejemplo:

Sub EjemploOnGoto()
    Dim Index As Integer
    Index = 1 ' Supongamos que esta es alguna condición o expresión evaluada
    
    On Index GoTo Label1, Label2, Label3
    
    ' ... código que podría no ejecutarse si el GoTo se activa...
    
    Exit Sub

Label1:
    ' ... código para la etiqueta 1 ...
    Exit Sub

Label2:
    ' ... código para la etiqueta 2 ...
    Exit Sub

Label3:
    ' ... código para la etiqueta 3 ...
    Exit Sub
End Sub

En este caso, si `Index` es 1, la ejecución irá a `Label1`.

Nota importante: Es altamente recomendable evitar el uso de `GoTo` y `GoSub` en programación moderna porque puede hacer que el código sea más difícil de leer, mantener y depurar (es mejor optar por estructuras de control más claras como `If…Then…Else` y bucles, y usar llamadas a subrutinas o funciones cuando sea apropiado). En caso de que se esté trabajando con código existente que utilice estas estructuras, entonces es importante entender su funcionamiento tal como se ha descrito.

Consejo práctico

Para los desarrolladores de VBA actuales, se prefiere adoptar la estrategia de modularización del código mediante la definición de procedimientos `Sub` o funciones `Function` y controlar el flujo del programa utilizando estructuras de control condicional (`If…Then…Else`, `Select Case`) y bucles (`Do…Loop`, `For…Next`), y se evita el uso de `GoTo` y `GoSub`.

Por ejemplo, en lugar de utilizar `On…GoTo` o `On…GoSub`, podrías hacer algo así:

Sub EjemploEstructurado()
    Dim Index As Integer
    Index = 2 ' Supongamos que esta es alguna condición o expresión evaluada
    
    Select Case Index
        Case 1
            Call Procedimiento1
        Case 2
            Call Procedimiento2
        Case 3
            Call Procedimiento3
    End Select
End Sub

Sub Procedimiento1()
    ' ... código para el procedimiento 1 ...
End Sub

Sub Procedimiento2()
    ' ... código para el procedimiento 2 ...
End Sub

Sub Procedimiento3()
    ' ... código para el procedimiento 3 ...
End Sub

Esta estructura es mucho más fácil de leer y mantener que las construcciones `On…GoSub` y `On…GoTo`.

Conoce nuestra tienda

Ver más productos

Mejora tu nivel y logra tus objetivo

Excel

Excel cursos

Access

cursos de Access

Power BI

cursos power BI

Ayúdanos a hacer crecer el proyecto

Deja un comentario