VBA en error Goto 0

Excel VBA en error Goto 0

VBA On Error GoTo 0 es una declaración del controlador de errores que se utiliza para deshabilitar el controlador de errores habilitado en el procedimiento. Se lo conoce como "Desactivador del controlador de errores".

El manejo de errores en cualquiera de los lenguajes de programación es una clase magistral que todos los codificadores deben comprender. El lenguaje de programación VBA también, y también tenemos técnicas de manejo de errores en este lenguaje de programación. “On Error Resume Next” habilita el manejador de errores y “On Error GoTo 0” deshabilitará el manejador de errores habilitado.

Tanto "En caso de error, reanudar a continuación" y "En caso de error, ir a 0" son pares que deben usarse en conjunto para la eficiencia del código. Para manejar el error, debemos comenzar con la instrucción "En caso de error, reanudar a continuación" y para finalizar este controlador de errores, debemos usar la instrucción "En caso de error, ir a 0".

Cualquier código de línea escrito entre estas declaraciones ignorará cualquier tipo de error que haya ocurrido en el proceso.

¿Cómo utilizar la instrucción On Error GoTo 0?

Puede descargar esta plantilla de Excel de VBA en error Goto 0 aquí - Plantilla de Excel de VBA en error Goto 0

Para ver un ejemplo, mire el siguiente código.

Código:

 Sub On_ErrorExample1 () Hojas de trabajo ("Hoja1"). Seleccionar rango ("A1"). Valor = 100 hojas de trabajo ("Hoja2"). Seleccionar rango ("A1"). Valor = 100 Fin Sub 

Lo que hace el código anterior es que primero seleccionará la hoja de trabajo llamada "Hoja1" y en la celda A1 insertará el valor 100.

Código:

Hojas de trabajo ("Hoja1"). Seleccione Rango ("A1"). Valor = 100

Luego seleccionará la hoja de trabajo llamada "Hoja2" e insertará el mismo valor.

Código:

Hojas de trabajo ("Hoja2"). Seleccione Rango ("A1"). Valor = 100

Ahora tengo las siguientes hojas en mi libro de trabajo.

No hay hojas llamadas "Hoja1" y "Hoja2", cuando ejecutamos el código, encontrará un error como el siguiente.

Dado que no hay ninguna hoja con el nombre "Hoja1", se ha encontrado el error "Subíndice fuera de rango". Para manejar este error, agregaré una declaración de manejo de errores "En caso de error, reanudar a continuación" en la parte superior de la macro.

Código:

 Sub On_ErrorExample1 () En caso de error Reanudar las siguientes hojas de trabajo ("Hoja1"). Seleccionar rango ("A1"). Valor = 100 hojas de trabajo ("Hoja2"). Seleccionar rango ("A1"). Valor = 100 Fin Sub 

Ahora ejecute el código y vea qué sucede.

No dará ningún mensaje de error porque la declaración del controlador de errores On Error Resume Next está habilitada.

Imagine el escenario en el que debemos ignorar el error en caso de que no esté disponible la hoja de trabajo "Hoja1", pero debemos notificar si no hay una hoja de trabajo llamada "Hoja2".

Dado que hemos agregado On Error Resume Next en la parte superior, ha comenzado a manejar el error, pero al mismo tiempo, necesitamos especificar cuántas líneas necesitamos para ignorar este error.

En este ejemplo, solo necesitamos ignorar el error de la primera hoja de trabajo, pero para la segunda hoja en adelante necesitamos que ocurra el error si no hay una hoja de trabajo "Hoja2". Entonces, después del primer código de la hoja de trabajo, agrega la línea de deshabilitación de error On Error GoTo 0.

Código:

 Sub On_ErrorExample1 () En caso de error Reanudar las siguientes hojas de trabajo ("Hoja1"). Seleccionar rango ("A1"). Valor = 100 En caso de error Ir a 0 Hojas de trabajo ("Hoja2"). Seleccionar rango ("A1"). Valor = 100 Finalizar 

Ahora ejecute el código línea por línea para ver el impacto presionando la tecla F8.

Ahora, si presiona la tecla F8 una vez, la ejecución del código saltará a la siguiente línea y se ejecutará la tarea de línea activa. Ahora, la línea activa (línea de color amarillo) es el controlador de errores "En caso de error, reanudar siguiente" y el controlador de errores se habilitará.

Ahora que ocurre cualquier error, será ignorado hasta que ejecute el controlador de errores deshabilita el código " On Error GoTo 0 ".

En el intento anterior, hemos encontrado errores, pero presionamos la tecla F8 una vez más y vemos la magia.

Sin dar ningún tipo de error se ha reanudado la ejecución del código aunque no hay hoja de trabajo “Hoja2” para seleccionar. Ahora presione F8 nuevamente.

Como no había Sheet1, no puede insertar el valor en la celda A1 como 500, pero lo que hace es insertar el valor de 500 en la celda A1, cualquiera que sea la hoja de trabajo activa. Mi hoja activa cuando ejecuto el código era "Hoja3", por lo que el valor de 100 se inserta en la celda A1.

Ahora la línea de código activa es " On Error GoTo 0 ", presionando la tecla F8 se ejecutará esta tarea de línea.

Desde que se ejecuta “On Error GoTo 0”, ha detenido el proceso de manejo de errores y nuevamente comienza a mostrar errores si ocurre alguno. Presione la tecla F8 y vea el error.

En el caso anterior sin On Error GoTo 0, también ha ignorado este error, pero desde que agregamos el deshabilitador del controlador de errores, ha comenzado a mostrar el error nuevamente.

Cosas para recordar aquí

  • Tanto On Error Resume Next y On Error GoTo 0 debe utilizarse como “ Error Handler Enabler ” y “ Error Handler Disabler ”.
  • Cualquier línea de códigos entre estas dos declaraciones encuentra un error y será ignorada.
  • Si hay una instrucción On Error GoTo 0, después de salir del subprocedimiento, el controlador de errores se desactivará.