VBA - Manejo de errores

Hay tres tipos de errores en la programación: (a) errores de sintaxis, (b) errores en tiempo de ejecución y (c) errores lógicos.

Errores de sintaxis

Los errores de sintaxis, también denominados errores de análisis, se producen en el momento de la interpretación de VBScript. Por ejemplo, la siguiente línea provoca un error de sintaxis porque falta un paréntesis de cierre.

Function ErrorHanlding_Demo()
   dim x,y
   x = "Tutorialspoint"
   y = Ucase(x
End Function

Errores en tiempo de ejecución

Los errores de tiempo de ejecución, también llamados excepciones, ocurren durante la ejecución, después de la interpretación.

Por ejemplo, la siguiente línea causa un error en tiempo de ejecución porque aquí la sintaxis es correcta pero en tiempo de ejecución está intentando llamar a fnmultiply, que es una función que no existe.

Function ErrorHanlding_Demo1()
   Dim x,y
   x = 10
   y = 20
   z = fnadd(x,y)
   a = fnmultiply(x,y)
End Function

Function fnadd(x,y)
   fnadd = x + y
End Function

Errores lógicos

Los errores lógicos pueden ser el tipo de error más difícil de rastrear. Estos errores no son el resultado de un error de sintaxis o de tiempo de ejecución. En cambio, ocurren cuando comete un error en la lógica que impulsa su secuencia de comandos y no obtiene el resultado que esperaba.

No puede detectar esos errores, porque depende de los requisitos de su negocio qué tipo de lógica desea poner en su programa.

Por ejemplo, dividir un número por cero o un guión escrito que entra en un bucle infinito.

Err objeto

Supongamos que si tenemos un error de tiempo de ejecución, entonces la ejecución se detiene mostrando el mensaje de error. Como desarrollador, si queremos capturar el error, entoncesError Se utiliza el objeto.

Ejemplo

En el siguiente ejemplo, Err.Number da el número de error y Err.Description da la descripción del error.

Err.Raise 6   ' Raise an overflow error.
MsgBox "Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear   ' Clear the error.

Manejo de errores

VBA habilita una rutina de manejo de errores y también se puede usar para deshabilitar una rutina de manejo de errores. Sin una instrucción On Error, cualquier error en tiempo de ejecución que ocurra es fatal: se muestra un mensaje de error y la ejecución se detiene abruptamente.

On Error { GoTo [ line | 0 | -1 ] | Resume Next }

No Señor. Palabra clave y descripción
1

GoTo line

Habilita la rutina de manejo de errores que comienza en la línea especificada en el argumento de línea requerido. La línea especificada debe estar en el mismo procedimiento que la instrucción On Error, o se producirá un error en tiempo de compilación.

2

GoTo 0

Deshabilita el manejador de errores habilitado en el procedimiento actual y lo restablece a Nada.

3

GoTo -1

Deshabilita la excepción habilitada en el procedimiento actual y la restablece a Nada.

4

Resume Next

Especifica que cuando ocurre un error en tiempo de ejecución, el control va a la instrucción que sigue inmediatamente a la instrucción donde ocurrió el error y la ejecución continúa desde ese punto.

Ejemplo

Public Sub OnErrorDemo()
   On Error GoTo ErrorHandler   ' Enable error-handling routine.
   Dim x, y, z As Integer
   x = 50
   y = 0
   z = x / y   ' Divide by ZERO Error Raises
  
   ErrorHandler:    ' Error-handling routine.
   Select Case Err.Number   ' Evaluate error number.
      Case 10   ' Divide by zero error
         MsgBox ("You attempted to divide by zero!")
      Case Else
         MsgBox "UNKNOWN ERROR  - Error# " & Err.Number & " : " & Err.Description
   End Select
   Resume Next
End Sub