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