Manejo de errores de Excel VBA
El manejo de errores es un mecanismo muy útil y significativo para lenguajes de programación como VBA. El control o prevención de errores es un aspecto del manejo de errores, lo que significa tomar medidas efectivas y significativas dentro de un script VBA para evitar la aparición de un mensaje emergente de error
Diferentes tipos de errores en VBA
- Error de sintaxis o error de análisis
- Error de compilación o compilación
- Error de tiempo de ejecución
- Error lógico
Los errores anteriores se pueden rectificar con la ayuda de la depuración mencionada a continuación y las diferentes declaraciones de "error" insertadas entre un código.
En Error Reanudar Siguiente
En error Goto 0
En error ir a
En error Goto -1
Manejo de errores de VBA con la ayuda de diferentes declaraciones 'ON ERROR'
Puede descargar esta plantilla de Excel de manejo de errores de VBA aquí - Plantilla de Excel de manejo de errores de VBAEjemplo # 1 - Errores de compilación de VBA
Cuando hay un error en una declaración o sintaxis del código VBA, cuando escribe mal un código por error, se resaltará en color rojo dependiendo de las opciones de configuración en las herramientas (si ha seleccionado Verificación automática de sintaxis).
Aparecerá un cuadro de mensaje emergente de error de compilación cuando ejecute el código con una sintaxis incorrecta.
Código:
Sub SYNTAX_ERROR () MsgBox este es mi primer programa End Sub
"ERROR DE COMPILACIÓN: VARIABLE NO DEFINIDO" es el error más común que aparece como un mensaje emergente. cuando la variable de referencia no está definida, se produce este error.
Código:
Sub VBA_FORMAT1 () A = 19049.83 A = Formato (A, "ESTÁNDAR") MsgBox A End Sub
En el ejemplo anterior, no he declarado el tipo de variable como Cadena, por lo tanto, se produce este error. Entonces, necesito declarar una variable como Dim A As String.
Código:
Sub VBA_FORMAT1 () Dim A como cadena A = 19049.83 A = Formato (A, "ESTÁNDAR") MsgBox A End Sub
Ejemplo # 2 - Error de tiempo de ejecución de VBA
Cuando hay declaraciones o términos matemáticos imposibles presentes en una declaración, se produce este error de tiempo de ejecución.
Código:
Sub RUNTIME_1 () MsgBox 6/0 End Sub
Ejemplo # 3 - Errores o errores lógicos de VBA
Estos errores son muy difíciles de rastrear, no se resaltará ni aparecerá un mensaje de error emergente. resultará en acciones inesperadas y resultados incorrectos.
Ejemplo: cuando hay dos variables presentes en el código, puede contener una incorrecta. En este caso, se produce un error lógico.
¿Cómo prevenir errores en VBA?
Veamos Cómo prevenir los diferentes tipos de errores anteriores en VBA Excel.
Paso 1: Para abrir una ventana del Editor VB Seleccione o haga clic en Visual Basic en el grupo Código en la pestaña Desarrollador o puede hacer clic directamente en la tecla de acceso directo Alt + F11 .
Paso 2: Para crear un módulo en blanco, debajo de los objetos de Excel de Microsoft, haga clic derecho en la hoja 1 (VB_ERROR HANDLING) e Insert Module para que se cree un nuevo módulo en blanco.
Manejo de errores de VBA con opción de depuración
Es mejor compilar el código antes de ejecutarlo. Para seguir la compilación, se deben seguir los siguientes pasos. En la barra de herramientas del menú VB, bajo la opción Depurar, debemos seleccionar un proyecto de compilación VBA. Cuando hace clic en él, verifica el código paso a paso, una vez que encuentra el error, lo resalta y aparece un mensaje emergente, por lo que debe corregirlo. Una vez que se corrige, necesita compilar para encontrar el siguiente error en el código.
Nota: Con la ayuda de la opción de compilación, solo podemos rectificar el error de compilación y sintaxis.Manejo de errores de VBA con la ayuda de diferentes declaraciones 'ON ERROR'
1. En caso de error Reanudar a continuación
Aquí, el error será ignorado y el código continuará.
En el ejemplo mencionado a continuación, 6 no se puede dividir por cero, si lo ejecuta sin ingresar la instrucción On Error Resume Next, se produce el siguiente error de tiempo de ejecución.
Código:
Sub RUNTIME_1 () MsgBox 6/0 End Sub
Si On Error Resume Next se ingresa en la parte superior del código después de la instrucción Sub, ignora el error de tiempo de ejecución y pasa a la siguiente instrucción, que da como resultado la salida de 6/2, es decir, 3 (cuadro de mensaje emergente con el resultado).
Código:
Sub RUNTIME_2 () En caso de error Reanudar siguiente MsgBox 6/0 MsgBox 6/2 End Sub
2. En Error GoTo 0 y Error GoTo -1
'On Error GoTo 0' detendrá el código en la línea específica que causa el error y muestra un cuadro de mensaje que describe o indica el error.
Código:
Sub onError_Go_to_0 () En error GoTo 0 Mata "C: TempFile.exe" Rango ("A1"). Valor = 100 / "PETER" Fin Sub
Por lo general, muestra el comportamiento predeterminado de comprobación de errores, es importante cuando se usa junto con 'Al reanudar error después'.
Por lo general, puede observar el cuadro de mensaje de error de tiempo de ejecución, que contiene las opciones "Continuar", "Finalizar", "Depurar" y "Ayuda" . Veamos los usos de cada uno de ellos.
- La opción Continuar ignorará la excepción y continuará el código si es posible.
- La opción final termina el programa.
- La opción de depuración resaltará la declaración donde se produjo el error. que te ayuda a depurar o corregir el código.
- La opción de ayuda lo llevará a abrir la página de ayuda de Microsoft MSDN.
On Error GoTo 0 con On Error Reanudar Siguiente
Código:
Sub onError_Go_to_0_with_Resume_next () En caso de error Reanudar siguiente Kill "C: TempFile.exe" En caso de error GoTo 0 Rango ("A1"). Valor = 100 / "PETER" End Sub
En el código anterior, ignorará los errores hasta que llegue a la instrucción On Error GoTo 0. Después de la instrucción On Error GoTo 0, el código vuelve o pasa a la comprobación de error normal y activa el error esperado más adelante. cuando ejecuto el código anterior, mostrará el error de división, es decir, la falta de coincidencia de tipos (el valor numérico no se puede dividir por texto).
On Error GoTo 0 desactiva cualquier captura de errores actualmente presente en el código VBA, es decir, apaga el manejo de errores en el código principal, mientras que On Error GoTo -1 borra el manejo de errores y lo establece en nada que ayude o le permita crear otra trampa de errores.
3. En caso de error, vaya a <ETIQUETA
VBA para transferir el control del programa a la línea seguida de la etiqueta si se encuentran errores de tiempo de ejecución, es decir, el código salta a la etiqueta especificada. Aquí, las declaraciones de código entre la línea de excepción y la etiqueta no se ejecutarán.
Este método es más adecuado y significativo para salir del programa con gracia si se produce un error grave grave durante la ejecución.
En el código VBA mencionado a continuación, tan pronto como se produce el error en la línea 3, el programa transfiere el control a la línea 6, es decir, la etiqueta (el mensaje emergente aparece como "controlador de excepciones" ).
Código:
Sub OnError_Go_to_Label () En el error GoTo Error_handler: MsgBox 9/0 MsgBox "Esta línea no se ejecutará" Exit Sub Error_handler: MsgBox "controlador de excepciones" End Sub
Aquí puede notar que 'Exit Sub' debe usarse justo antes de la etiqueta 'Error_handler:', esto se hace para garantizar que el bloque de código del controlador de errores se detenga o no se ejecute si no hay ningún error. Ahora, puede guardar su libro de trabajo como un "libro de Excel habilitado para macros". Al hacer clic en guardar como en la esquina izquierda de la hoja de trabajo.
Una vez más, si abre un archivo, puede hacer clic en la tecla de acceso directo, es decir, Fn + Alt + f8, aparece el cuadro de diálogo "Macro", donde puede ejecutar un código de macro guardado de su elección o puede hacer clic en Fn + Alt + F11 para Una ventana macro completa.
Cosas para recordar
- Antes de escribir el código, debe asegurarse de que la interrupción de los errores no controlados esté marcada o seleccionada por error. opción de captura bajo general en las opciones de la herramienta de la barra de herramientas de VBA.
- Es una configuración predeterminada que ayuda a detener su código por errores que no se manejan.
- Romper con todos los errores: detendrá su código en todo tipo de errores.
- Módulo de clase de intrusión: en caso de que se use un objeto como el formulario de usuario en el código, resaltará que la línea exacta que causa el error.
Artículos recomendados
Esta es una guía para el manejo de errores de VBA. Aquí discutimos cómo usar VBA Error Handling en Excel junto con algunos ejemplos prácticos y una plantilla de Excel descargable. También puede consultar nuestros otros artículos sugeridos:
- VBA Declarar matriz (ejemplos)
- VBA en caso de error
- Hoja de protección de VBA
- Columnas VBA | Plantillas de Excel
- VBA Environ