Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado

Uso Goto

| 1 comentario

¿Qué nos permite GoTo?

GoTo nos permite saltarnos líneas del código cada vez que lo invoquemos. Buscará en todo el código la palabra que coloquemos al costado del GoTo y empezará a leer el código a partir de esa línea. Se suele utilizar esta instrucción en los casos de que una condición establecida se cumpla, cuando se halle un dato específico o para salir de un bucle.

Se puede usar las veces que creamos necesario durante todo el código. Sin embargo, hay que tener cuidado en la forma de usarlo, pues puede ocasionarnos un bucle y malograr nuestro trabajo.

¿Cómo declarar esta instrucción ?

La forma de declarar esta instrucción en el código es:

GoTo (etiqueta)

También se debe especificar la etiqueta a donde saltará:

(etiqueta):

(código)

Ejemplo 1:

Definiremos nuestra variable nota como integer, ya que es un número entero. Luego, agregamos un InputBox para que el usuario ingrese la nota correspondiente de cada alumno. 
Por convención, la variable nota debe estar entre 0 y 20, sin embargo, en este caso, trabajaremos con el complemento de este intervalo dentro de la función IF, para que la función GoTo funcione. 

GoTo buscará cada línea del código hasta encontrar la palabra designada a su costado, para luego empezar a leer el código a partir de esa línea. En nuestro caso, nosotros definimos un MsgBox para que le avise al usuario que el dato ingresado, no cumple con el rango establecido de 0 a 20 y colocaremos otro GoTo llamado NuevoIntento, el cual nos transportará a las líneas de código superiores para volver a ingresar la nota de cada alumno. Es importante que NuevoIntento se encuentre líneas antes del InputBox, con el fin de que se abra nuevamente un InputBox y se le brinde al usuario otra oportunidad de ingresar la nota del alumno.

Adicionalmente, colocaremos un ExitSub después del IF para salir del módulo. Este funcionará en caso la función IF no se cumpla, es decir, la nota ingresada pertenezca al intervalo de 0 y 20.
Finalmente, veremos qué pasaría si se ingresa una nota fuera del rango de 0 a 20, lo cual generaría que se active el primer GoTo del código.

Sub RegistroDeNotas()
Dim nota As Integer

NuevoIntento:
nota = InputBox("Ingrese nota del alumno")

If nota < 0 Or nota > 20 Then
GoTo Error
End If
Exit Sub

Error:
MsgBox "Ingrese nuevamente la nota"
GoTo NuevoIntento

End Sub

GoTo en VBA 2 GoTo en VBA 2

Ejemplo 2:

En este ejemplo se usa GoTo en un formulario (para saber si una persona es mayor de edad) para saltar de una línea a otra dependiendo del dato ingresado. Si el dato ingresado es un número se salta hacia la etiqueta comando, y ejecuta todas las líneas después a esa. Si el dato no es numérico se salta hacia la etiqueta error, y ejecuta todas las líneas después de esa etiqueta.

Private Sub CommandButton1_Click()

    If IsNumeric(TextBox2.Text) Then
        GoTo comando
    Else
        GoTo error
    End If   

comando:

    If TextBox2.Text >= 18 Then
        MsgBox TextBox1.Text & " es mayor de edad."
    Else
        MsgBox TextBox1.Text & " no es mayor de edad."
    End If

    GoTo final   

error:
    MsgBox "El valor en el 2do cuadro no es válido."  

final:
End Sub

Observación: en la etiqueta comando, al final se coloca GoTo final, ya que de no hacerlo se ejecutaría la línea después de la etiqueta error y mostraría el mensaje "El valor en el 2do cuadro no es válido.".

GoTo en VBA 1 1 GoTo en VBA 1

Ejemplo 3:

En este ejemplo se usa GoTo en un formulario (para saber que varía de 2 en 2 desde un número inicial a uno final) para salir de un bucle. Si los datos ingresados son números se salta hacia la etiqueta comando, y ejecuta todas las líneas después a esa. Si alguno de los datos no es numérico se salta hacia la etiqueta error, y ejecuta todas las líneas después de esa etiqueta.

El DO y LOOP se usan para realizar bucles (y actualizar los valores de “x” y de “i”), y se utiliza el GoTo en esta situación para salir del bucle creado cuando se cumpla con una condición dada, en este caso, cuando exista menos de 2 de diferencia entre el valor actualizado de “x” para llegar a “y”.

Private Sub CommandButton1_Click()

Dim x As Integer
Dim y As Integer

   i = 0

    If IsNumeric(TextBox2.Text) And IsNumeric(TextBox1.Text) Then
        GoTo comando
    Else
        GoTo error
    End If

comando:

x = TextBox1.Text
y = TextBox2.Text

Do

    If y < x + 2 Then
        GoTo 1
    End If

    x = x + 2
    i = i + 1

Loop

1:
MsgBox "Se realizaron " & i & " saltos desde " & TextBox1.Text & " a " & TextBox2.Text & "."

GoTo final

error:
    MsgBox "Los valores en los cuadros no son válidos."

final:
End Sub

GoTo en VBA 3 GoTo en VBA 3

GoTo Ejemplo 1

GoTo Ejemplo 2

GoTo Ejemplo 3

Un comentario

  1. desearía saber si en basic es posible bifurcar con un go to a un label variable, es decir a una etiqueta que puede tener diversos destinos que se le asignan a lo largo del programa, dependiendo de circunstancias diversas y, si fuera posible , como hay que definir esa variable. Gracias.

Deja una respuesta

Los campos requeridos estan marcados con *.