VBA en caso de error

Excel VBA en declaración de error

La declaración VBA On Error es un tipo de mecanismo de manejo de errores que se utiliza para guiar al código a hacer lo que si encuentra algún tipo de error, generalmente cuando un código encuentra un error, la ejecución se detiene pero con esta declaración en el código la ejecución del El código continúa como tiene un conjunto de instrucciones para hacer cuando encuentra un error.

Anticipar el error en el código lo convierte en un profesional en la codificación VBA. No puede hacer que el código sea 100% eficiente, incluso si está seguro de su código de una forma u otra, puede arrojar un error.

Es casi una tarea imposible identificar y manejar todo tipo de error, pero tenemos diferentes formas de manejar un error en VBA. Mientras escribe el código, es posible que no anticipe el tipo de código de error que puede generar, pero si aparece algún error, pasará más tiempo depurando que escribiendo el código en sí.

¿Qué es un error?

Un error no es más que una línea de código que no se puede ejecutar debido a la funcionalidad o al código incorrecto. Así que intente anticipar el error y manejarlo.

Por ejemplo, si intenta eliminar la hoja que no está allí, obviamente no podemos ejecutar esa línea de código.

Un error es de tres tipos, uno es un error compilado debido a variables no declaradas. El segundo es un error de entrada de datos debido a entradas incorrectas por parte del codificador, y el tercero es un error de tiempo de ejecución debido a que VBA no puede reconocer la línea de código. Para intentar acceder o trabajar en una hoja de trabajo o un libro de trabajo que no está allí.

Pero tenemos una declaración en VBA para manejar todos estos tipos de errores, es decir, la declaración "On Error".

Tipos de declaraciones de error

El punto clave del manejo de errores en VBA es la declaración "On Error". Por ejemplo, en caso de error, "reanudar la siguiente línea", "ir o saltar a otra línea", etc.

La instrucción On Error tiene tres tipos de declaraciones.

  1. Ir a 0  significa que siempre que se produce un error de tiempo de ejecución, Excel o VBA debe mostrar el cuadro de mensaje de error que indica el tipo de error que ha encontrado. Tan pronto como VBA ejecuta el código, deshabilita todos los controladores de errores en ese bloque en particular del código.
  2. Reanudar siguiente significa que cada vez que se produce el error, esta declaración le indica a Excel que ignore ese error y pase a (reanudar a continuación) la siguiente línea de código sin mostrar ningún mensaje de error. No significa que solucionará el error, sino que simplemente ignora el error.
  3. Ir a [etiqueta] significa que cuando VBA encuentre un error, vaya a la etiqueta asignada. Esto hace que el código salte a la línea específica proporcionada por el codificador.

Las 3 formas principales de manejar errores en VBA

Puede descargar esta plantilla de error de VBA aquí - Plantilla de error de VBA

# 1 - En caso de error, reanudar a continuación

Suponga que está dividiendo el valor de 20 por 0 y ha declarado la variable para asignarle el resultado de la división.

Código:

 Sub OnError_Example1 () Dim i As Integer i = 20/0 End Sub 

Si ejecuta este código, arrojará el siguiente error.

Por lo tanto, no puede dividir ningún número por valor cero. El número de error del tiempo de ejecución es 11, es decir, división por cero.

Ahora agregaré una línea más al código.

Código:

 Sub OnError_Example1 () Dim i As Integer, j As Integer i = 20/0 j = 20/2 End Sub 

Ahora agregaré la declaración On error resume a continuación en la parte superior.

Código:

 Sub OnError_Example1 () Dim i As Integer, j As Integer On Error Resume Next i = 20/0 j = 20/2 End Sub 

Ahora, si ejecuto este código, no me dará ningún mensaje de error, sino que ejecutará la siguiente línea de código, es decir, j = 20/2.

# 2 - En caso de error Ir a etiqueta

He declarado tres variables.

Código:

 Sub OnError_Example1 () Dim i como entero, j como entero, k como entero 

Para todas estas tres variables, asignaré cálculo de división.

Código:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer i = 20/0 j = 20/2 k = 10/5

El resultado de estos tres cálculos se mostrará en el cuadro de mensaje.

Código:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer i = 20/0 j = 20/2 k = 10/5 MsgBox "El valor de i es" & i & vbNewLine & "El valor de j es "& j & _ vbNewLine &" El valor de k es "& k & vbNewLine End Sub 

Ahora intentaré ejecutar este código, ya que el cálculo de "I" no es correcto, obtendremos el error 11 en tiempo de ejecución.

Ahora agregaré la declaración "En caso de error, reanudar a continuación".

Código:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer On Error Resume Next i = 20/0 j = 20/2 k = 10/5 MsgBox "El valor de i es" & i & vbNewLine & "The el valor de j es "& j & _ vbNewLine &" El valor de k es "& k & vbNewLine End Sub 

Si ejecuto esto, saltará el cálculo "I" y ejecutará los dos cálculos restantes y el resultado será el siguiente.

Ahora, en lugar de "En caso de error, reanudar a continuación", agregaré "En caso de error, ir a KCalculation"

Código:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer On Error GoTo KCalculation: i = 20/0 j = 20/2 KCalculation: k = 10/5 MsgBox "El valor de i es" & i & vbNewLine & "El valor de j es" & j & _ vbNewLine & "El valor de k es" & k & vbNewLine End Sub 

Nota: Aquí "KCalculation" es el nombre de la etiqueta que le había dado, puede dar su propio nombre de etiqueta sin ningún espacio.

Ahora, si ejecuto esta línea de código, no saltará a la línea siguiente, sino que saltará al nombre de la etiqueta que he introducido, es decir, "KCalcualtion". Aquí ignorará el error dado por “I” y tampoco ejecutará el cálculo “j” sino que saltará enseguida a “KCalcualtion”.

# 3 - Número de error de impresión en VBA

Al final del código, también podemos imprimir el número de error en un cuadro de mensaje separado. La siguiente línea de código hará este trabajo.

Código:

Err.Number

Ahora ejecutaré este código, el primer cuadro de mensaje mostrará los resultados del cálculo.

Haga clic en Aceptar, se mostrará un cuadro de mensaje más para mostrar el número de error.

Vamos a 11 como resultado, es decir, división por cero.

We can also get the error description instead of the number. We just need to change the code, below is the code.

Code:

Err.Description

It will show a description like this.

Things to Remember

  • After entering “On Error Resume Next” at the end of code don’t forget to add the statement “On Error GoTo 0”
  • The label name should be the same in both places.
  • Label names need not be defined well in advance.
  • In the end, always see what was the error occurred through the separate message box.