VBA – On Error Resume Next or Goto 0 – Manejo de Errores

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Dennis Madrid

Last updated on diciembre 16, 2022

Este tutorial le mostrará cómo utilizar los comandos de VBA On Error Resume Next y On Error Goto 0.

Lea nuestro Tutorial de Manejo de Errores para obtener más información sobre el manejo de errores en VBA.

On Error Resume Next

On Error Resume Next le dice a VBA que salte las líneas de código que contienen errores y continúe con la siguiente línea. Funciona de la siguiente manera:

Sub OnErrorResumeNextDemo()

    On Error Resume Next
    MsgBox 5 / 0
    
    MsgBox "Hecho"
End Sub

La línea MsgBox 5 / 0 arrojaría un error (no se puede dividir por cero). Añadiendo On Error Resume Next, VBA se saltará esa línea y ejecutará el resto del procedimiento. Puede probar esto por su cuenta copiando y pegando el código y comentando On Error Resume Next.

On Error GoTo 0

On Error GoTo 0 es la configuración por defecto de VBA. Cuando ocurre un error con On Error GoTo 0, VBA detendrá la ejecución del código y mostrará su cuadro de mensaje de error estándar, por ejemplo:

Error por Defecto en VBA

No hay necesidad de declarar On Error GoTo 0 a menos que haya declarado algún otro manejo de errores anteriormente en su procedimiento. Si ha agregado una trampa de error como On Error Resume Next en su código, puede insertar On Error Goto 0 para restaurar el manejo de errores predeterminado de VBA.

Sub OnErrorResumeNextDemo()
    
    On Error Resume Next
    
    MsgBox 5 / 0
    On Error GoTo 0
    
    MsgBox "Hecho"
End Sub

Esto es importante On Error Resume Next debe usarse con precaución y sólo cuando sea absolutamente necesario.

Ejemplo – On Error Resume Next

Veamos un ejemplo para mostrar cómo puede utilizar On Error Resume Next en la práctica. Este código ocultará cada hoja de trabajo del libro:

Sub OcultarTodasLasHojas()
    Dim ws As Worksheet
    For Each ws In ActiveWorkbook.Sheets
        ws.Visible = False
    Next ws
End Sub

Si ejecutamos este código, obtendremos un error ya que no podemos ocultar todas las hojas de un libro de trabajo – al menos un libro de trabajo debe permanecer visible.

Error 1004

Sin embargo, si añadimos On Error Resume Next al procedimiento como se muestra a continuación, el código continuará más allá del error y dejará visible la última hoja del libro de trabajo.

Sub OcultarTodasLasHojas()
    On Error Resume Next
    Dim ws As Worksheet
    For Each ws In ActiveWorkbook.Sheets
        ws.Visible = False
    Next ws
End Sub

Resultado Ocultar Todas las Hojas

Ahora digamos que queremos agregar algo más de código a nuestro procedimiento. A continuación agreguemos On Error GoTo 0 para restaurar el manejo de errores por defecto de VBA.

Sub ErrorGoTo0()
    On Error Resume Next
     Dim ws As Worksheet
     For Each ws In ActiveWorkbook.Sheets
        ws.Visible = False
     Next ws
    On Error GoTo 0
    'Ejecute más código aquí, por ejemplo:
      ActiveSheet.Name = "Hoja1"
End Sub

Ahora si ocurre un error después de On Error Goto 0 line aparecerá el mensaje de error por defecto de Excel. En este ejemplo, ya tenemos una hoja llamada Hoja1 en el ActiveWorkbook ya que el código anterior al On Error Goto 0 oculta la hoja, pero no la elimina. Aparecería entonces el mensaje de error por defecto de Excel indicando que el nombre de la hoja ya ha sido tomado.

Error 1004

On Error Goto To Line

También podemos forzar a nuestro código a moverse a una línea de código diferente utilizando On Error Goto Line (Más información) que indica a VBA que vaya a una línea de código específica si se produce un error.

Sub ErrorGoToLine()
    On Error Resume Next
    Dim ws As Worksheet, resp As Variant
    For Each ws In ActiveWorkbook.Sheets
     ws.Visible = False
    Next ws
    On Error GoTo errhandler
    ActiveSheet.Name = "Hoja1"
    Exit Sub
errhandler:
    resp = MsgBox("Ya existe una hoja llamada hoja1!", vbCritical)
End Sub

En el ejemplo anterior, cuando el código encuentra la hoja «Hoja1», se desplaza a la línea de código situada debajo de la etiqueta del controlador de errores (errhandler:) – en este caso llama a un cuadro de mensaje personalizado que informa a los usuarios de que la hoja ya ha salido. La etiqueta del manejador de errores tiene que tener dos puntos después de ella para mostrar a VBA que es una etiqueta.

errhandler:

El código saltará a la línea inferior a la etiqueta y devolverá el cuadro de mensaje personalizado.

Resultado On Error Go To Line

Esto es útil cuando no desea que su usuario pueda hacer clic en Depurar para entrar en su código, ya que el mensaje estándar de Excel siempre da una opción para Depurar el código.

Error 1004 Ej3

También necesitamos un Exit Sub en el procedimiento. Si NO hay una hoja llamada Hoja1, entonces esa línea de código se ejecutaría y renombraría la hoja activa a Hoja1. Entonces queremos que el código termine – no queremos que continúe con el manejador de errores y muestre el cuadro de mensaje. La línea Exit Sub sale del procedimiento y detiene el código.

Código Error Go To Line

vba-free-addin

Complemento de Ejemplos de Código de VBA

Acceda fácilmente a todos los ejemplos de código que se encuentran en nuestro sitio.

Simplemente navegue al menú, haga clic y el código se insertará directamente en su módulo. Complemento .xlam.

(¡No se requiere instalación!)

Descarga gratuita

Return to VBA Code Examples