Manejadores de error para macros de Excel

Manejadores de error

le permiten especificar lo que ocurre cuando se encuentra un error, mientras que el código de macro Excel ejecuta. Manejadores de error son líneas similares a las siguientes:

On Error GoTo MyError

Sin controladores de errores, cualquier error que se produce en su código le pedirá Excel para activar un mensaje de error de menos-que-útiles que normalmente no va a transmitir claramente lo que sucedió. Sin embargo, con la ayuda de controladores de errores, se puede optar por ignorar el error o salir del código de gracia con su propio mensaje para el usuario.

Hay tres tipos de estados de error a la obra:

  • On Error GoTo SomeLabel: El código salta a la etiqueta especificada.

  • On Error Resume Next: Se ignora el error y el código vuelve a sonar.

  • On Error GoTo 0: VBA restablece al comportamiento de comprobación de errores normal.

On Error GoTo SomeLabel

A veces un error en su código significa que usted necesita para salir con gracia el procedimiento y dar a sus usuarios un mensaje claro. En estas situaciones, se puede utilizar la instrucción On Error GoTo para decirle Excel para saltar a una determinada línea de código.

Por ejemplo, en la siguiente pequeña pieza de código, le dices a Excel para dividir el valor de la celda A1 por el valor de la celda A2, y luego coloca el resultado en la celda A3. Fácil. ¿Qué podría salir mal?

Sub Macro1 () Range ("A3"). Value = Range ("A1"). Value / Range ("A2"). ValueEnd Sub

Como resultado, dos cosas importantes pueden salir mal. Si la celda A2 contiene 0, se obtiene una división por 0 error. Si la celda A2 contiene un valor no numérico, se obtiene un error de coincidencia de tipos.

Para evitar un mensaje de error desagradable, puede decirle a Excel que On Error, desea que la ejecución de código para saltar a la etiqueta llamada MyExit.

En el siguiente código, la etiqueta MyExit es seguido por un mensaje al usuario que da consejo amistoso en lugar de un mensaje de error desagradable. También tenga en cuenta la línea Exit Sub antes la etiqueta MyExit, que asegura que simplemente si se encuentra ningún error de salida el código:

Sub Macro1 () On Error GoTo MyExitRange ("A3") Valor = Range ("A1") Valor / Range ("A2") ValueExit SubMyExit:... MsgBox "Por favor, use válidos números distintos de cero" End Sub

On Error Resume Next

A veces, desea que Excel para ignorar un error y simplemente reanudar la ejecución del código. En estas situaciones, se puede utilizar el On Error Resume Next.

Por ejemplo, el siguiente fragmento de código está destinado a eliminar un archivo llamado GhostFile.exe desde el directorio C: temp. Después se elimina el archivo, una caja de mensaje le indica al usuario que el archivo se ha ido:

Sub Macro1 () Mata "C: Temp GhostFile.exe" MsgBox "El archivo ha sido eliminado." End Sub

El código funciona muy bien si efectivamente existe un archivo que desea eliminar. Pero si por alguna razón el archivo llamado GhostFile.exe no existe en la unidad C: Temp, se emite un error.

En este caso, no le importa si el archivo no está ahí porque te ibas a eliminar todos modos. Así que usted puede simplemente ignorar el error y seguir adelante con el código.

Al utilizar el On Error Resume Next, el código sigue su curso si existe o no el archivo apuntado:

Sub Macro1 () On Error Resume NextKill "C: Temp GhostFile.exe" MsgBox "El archivo ha sido eliminado." End Sub

On Error GoTo 0

Cuando el uso de ciertos estados de error, puede ser necesario para restablecer el comportamiento de comprobación de errores de VBA. Para entender lo que esto significa, echar un vistazo a el siguiente ejemplo.

Aquí, primero desea eliminar un archivo llamado GhostFile.exe desde el directorio C: temp. Para evitar errores que puedan derivarse del hecho de que no existe el archivo apuntado, se utiliza el On Error Resume declaración en Siguiente. Después de eso, usted trata de hacer algunos sospechan matemáticas dividiendo 100 / Mike:

Sub Macro1 () On Error Resume NextKill "C: Temp GhostFile.exe" Range ("A3") Valor = 100 / "Mike" End Sub.

La ejecución de esta pieza de código debe generar un error debido a la borrosa matemáticas, pero no es así. ¿Por qué? Debido a que la última instrucción que le dio al código era On Error Resume Next. Cualquier error encontrado después de que la línea se ignora de manera efectiva.

Para remediar este problema, puede utilizar el On Error GoTo 0 comunicado para reanudar el comportamiento de comprobación de errores normales:

Sub Macro1 () On Error Resume NextKill "C: Temp GhostFile.exe" On Error GoTo 0range ("A3") Valor = 100 / "Mike" End Sub.

Este código no hará caso de errores hasta el On Error GoTo 0 comunicado. Después de esa declaración, el código se remonta a la comprobación de errores normal y provoca el error esperado derivado de la difusa matemáticas.




» » » » Manejadores de error para macros de Excel