¿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.

VBA

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.

VBA

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

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í:

VBA

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