En caso de error Reanudar Siguiente: Manejo de errores en Excel VBA

  • Compartir Este
Hugh West

En Microsoft Excel VBA, la gestión de errores es una de las tareas críticas. Si usted es un codificador, usted sabe la importancia de la gestión de errores para construir una aplicación perfecta. Cualquier error en una declaración puede obstaculizar su código VBA en un montón de maneras. Por lo tanto, usted debe tener cuidado para manejar esos errores durante la ejecución de un código VBA. Hay una gran cantidad de errores de tiempo de ejecución que puede enfrentar durante el uso del código VBA en Excel. Para resolveruno de ellos, utilizamos el En caso de error Reanudar siguiente declaración.

En este tutorial, aprenderá a utilizar la función En caso de error Reanudar siguiente en Excel VBA. Este tutorial será en el punto con ejemplos adecuados e ilustraciones apropiadas. Así que, quédate con nosotros.

Descargar el cuaderno de prácticas

VBA En Error Reanudar Siguiente.xlsm

Tratamiento de errores en Excel VBA

Mientras trabaja con Microsoft Excel VBA, se enfrentará a muchos errores en su sub-procedimiento. Cuando VBA no puede ejecutar una sentencia, lanza un error de ejecución.

Excel se ocupa automáticamente de estos errores, de modo que cuando surge un error en tiempo de ejecución, muestra un mensaje de error predeterminado como el siguiente:

Ahora, usted puede tratar con estos de varias maneras con algunas sentencias VBA. Voy a discutir en secciones posteriores.

Más información: Cómo solucionar el error #REF! en Excel (6 soluciones)

Sobre las declaraciones de error en VBA

Para manejar los errores en tiempo de ejecución, instruimos a Excel con la sentencia On Error. Ésta decide qué tipo de operaciones queremos hacer a continuación de forma inmediata. Básicamente, desactivamos estos errores mediante este tipo de manejo de errores.

Utilizamos tres tipos de declaraciones On Error (sintaxis) en Excel VBA.

  • En caso de error Ir a línea
  • En caso de error Reanudar siguiente
  • En caso de error Ir a 0

Cuando encuentre un error, utilice el comando On Error. Porque si no utiliza un comando En caso de error esos errores de ejecución serán desastrosos. Mostrará un aviso de error y detendrá la ejecución.

Cuando utilizamos un En caso de error activamos un manejador de errores "activo". El manejador de errores "activo" es un manejador habilitado que inicia la operación de manejo de errores. Si surge un error mientras un manejador de errores está involucrado, el manejador de errores del método actual no puede soportar el error. Después de eso, el control regresa al procedimiento de llamada.

Si el proceso de llamada tiene un gestor de errores habilitado, se activa para gestionar el error. Si el gestor de errores del sistema de llamada está correspondientemente activado, devuelve el control a través de procedimientos de llamada anteriores hasta que encuentra un gestor de errores habilitado pero inactivo. Si no encuentra ningún gestor de errores inactivo habilitado, significa que el error es catastrófico en el punto en el que se produce.

Cada vez que el gestor de errores devuelve la autoridad a un procedimiento de llamada, ese procedimiento evoluciona al procedimiento actual. La ejecución se reinicia en el procedimiento actual en el momento seleccionado por la función Currículum cuando un manejador de errores maneja errores en cualquier procedimiento.

On Error Resume Next' en VBA

Ahora, el En caso de error Reanudar siguiente indica a VBA que ignore cualquier línea de código que contenga errores y pase inmediatamente a la siguiente línea de código. A continuación, los códigos VBA de Excel omitirán la línea o líneas que contengan errores y pasarán a la siguiente secuencia de código.

En En caso de error Reanudar siguiente fuerza a la ejecución a reanudarse con el comando persiguiendo instantáneamente la línea de códigos que indujo el error de ejecución. Esta sentencia permite saltar una ejecución incluso si hay un error de ejecución. Si cree que una línea de código en particular puede producir un error, coloque la rutina de tratamiento de errores allí en lugar de ponerla en otro lugar dentro del procedimiento. La sentencia En caso de error Reanudar siguiente queda inactiva cuando su código llama a otro procedimiento. Así, cuando necesite un tratamiento de errores coincidente en esa rutina, tendrá que ejecutar una sentencia En caso de error Reanudar siguiente en cada patrón con nombre.

Es razonable cuando la línea de código que puedes omitir no es necesaria para el buen funcionamiento de la macro. Pero recuerda que puede ser perjudicial si la utilizas de forma incorrecta, ya que puede proporcionar resultados no deseados.

Acuérdate:

La sentencia On Error Resume Next no corrige los errores de ejecución, básicamente ignora los errores en los que la ejecución de VB se reanudará a partir de la sentencia que ha generado el error de ejecución.

Echa un vistazo al siguiente código:

 Sub divide() MsgBox 5 / 0 MsgBox 5 / 2 End Sub 

Intentamos dividir 5 con 0 y 1. Ejecutemos el código. Mostrará la siguiente salida:

Produce un error en tiempo de ejecución. No podemos dividir un número por 0. Cuando depures el código, verás lo siguiente:

Cuando el programa VB encuentra un error, detiene inmediatamente el procedimiento. No ejecuta la línea siguiente.

Ahora, vamos a implementar el En caso de error Reanudar siguiente antes de la sentencia de error:

 Sub divide() On Error Resume Next MsgBox 5 / 0 MsgBox 5 / 2 End Sub 

Después de ejecutar el código, verá lo siguiente:

Como puede ver, VBA ignora la línea que produce el error y pasa inmediatamente a la siguiente línea de código. De este modo, puede utilizar la función En caso de error Reanudar siguiente para manejar el error en Excel VBA.

Ejemplos de 'On Error Resume Next' en VBA

En las siguientes secciones, voy a ofrecerle dos ejemplos de la En caso de error Reanudar siguiente que puede implementar en su hoja de cálculo de Excel utilizando VBA. Le recomiendo que aprenda y aplique todo esto a su libro de trabajo. Aumentará definitivamente sus conocimientos de Excel.

1. Sentencia 'On Error Resume Next' para Ocultar Hojas de Trabajo

Ahora, en este ejemplo, le mostraré un código VBA que ocultará todas las hojas de trabajo de su libro activo.

Eche un vistazo a la siguiente captura de pantalla:

Aquí tenemos cuatro hojas de cálculo. Las ocultaremos todas utilizando el siguiente código VBA:

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

Cuando ejecute el siguiente código, verá el siguiente error de ejecución:

Excel muestra este error porque no se pueden ocultar todas las hojas de un libro. Por lo tanto, hay que ignorar el error. Para ello, hay que implementar la sentencia On Error Resume Next en su línea de código.

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

Después de completar la ejecución del código VBA, verá la siguiente salida:

Al final, no verá ningún error después de la ejecución. Por lo tanto, nuestra sentencia On Error Resume Next funcionó muy bien en el código VBA.

Más información: Errores en Excel y su significado (15 errores diferentes)

2. Función VLOOKUP con 'On Error Resume Next' en VBA

En este ejemplo, mostraré un ejemplo de la función VLOOKUP en VBA Ahora bien, este código VBA también incluye la función En caso de error Reanudar siguiente declaración.

Eche un vistazo a la siguiente captura de pantalla:

Aquí puede ver los nombres de algunas personas y sus edades. En la tabla adyacente, utilizaremos la función VLOOKUP para encontrar el nombre y la edad de la persona.

Para ello, escriba el siguiente código:

 Sub VLOOKUP_Function() Dim i As Long For i = 5 To 9 Cells(i, 6).Value = WorksheetFunction.VLookup(Cells(i, 5), Range("B:C"), 2, 0) Next i End Sub 

Ahora, ejecute la macro. Verá el siguiente error:

Se trata de un error en tiempo de ejecución. ¿Por qué ocurre? Vuelve a echar un vistazo al conjunto de datos:

Como puedes ver, no hay datos para "Aaron" y "Emma". Por eso sólo ejecuta el comando VLOOKUP para la primera entrada. Después de eso, detiene la ejecución. Ahora, si desea ignorar el error y proceder a encontrar el resto de las edades, utilice el comando En caso de error Reanudar siguiente declaración.

 Sub VLOOKUP_Function() Dim i As Long On Error Resume Next For i = 5 To 9 Cells(i, 6).Value = WorksheetFunction.VLookup(Cells(i, 5), Range("B:C"), 2, 0) Next i End Sub 

Después de ejecutar el código VBA, verá la siguiente salida:

Como puede ver, aplicando el En caso de error Reanudar siguiente ignoramos el error y encontramos el resto de las edades de las personas. Nuestro código VBA no encontró ningún dato de Aaron y Emma, por lo que ignoró esos valores y devolvió el resto de los valores en la hoja de Excel.

Read More: [Corregido] Excel ha encontrado un problema con una o más referencias de fórmula en esta hoja de cálculo

Desactivar 'En Error Reanudar Siguiente' con Excel VBA

Ahora bien, puede que se encuentre en una situación en la que desee ignorar los errores de un segmento concreto del código VBA. Recuerde que si utiliza la sentencia On Error Resume Next en un código VBA, omitirá todos los errores posteriores. Ahora bien, si desea desactivar eso y activar el tratamiento de errores para otro segmento, utilice En caso de error Ir a 0 Habilitará de nuevo la gestión de errores.

Uso genérico:

Sub tratamiento_errores()

Para ignorar los errores

En caso de error Reanudar siguiente

// líneas de código

Para activar el tratamiento de errores

En caso de error Ir a 0

//líneas de códigos

Fin sub

Eche un vistazo al siguiente código VBA:

 Sub error_handling() Dim i As Long 'para ignorar el error On Error Resume Next For i = 5 To 9 Cells(i, 6).Value = WorksheetFunction.VLookup(Cells(i, 5), Range("B:C"), 2, 0) Next i 'para apagar en caso de error resume next On Error GoTo 0 MsgBox i / 0 End Sub 

Hemos utilizado el código anterior para el VLOOKUP Aquí se ha añadido un trozo de código adicional para demostrarlo. Nuestro código ignorará los errores mientras realiza la función VLOOKUP pero activará el tratamiento de errores después de que el En caso de error Ir a 0 declaración.

Más información: Excel VBA: Desactivar el "En caso de error reanudar siguiente"

VBA 'On Error GoTo

Anteriormente hablé sobre el manejo de los errores utilizando el método On Error. Todo nuestro artículo trataba sobre En caso de error reanudar siguiente. Ahora, también hay dos tipos de manejo de errores que discutiré en las siguientes secciones.

1. VBA On Error GoTo 0

En On Error Goto 0 es la configuración incorporada de Excel si sus códigos no tienen un controlador de errores en ellos. Básicamente implica que cuando VBA encuentra un error con En caso de error Ir a 0 dejará de ejecutar el código y mostrará su tradicional cuadro de mensaje de error.

En caso de error Ir a 0 básicamente desactiva el tratamiento de errores en el procedimiento actual. No define la línea 0 como el comienzo del código de tratamiento de errores, aunque el método incorpore una línea numerada 0.

Echa un vistazo al siguiente código:

 Sub on_error_goto_0() Dim copies As Worksheet On Error Resume Next For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies On Error GoTo 0 ActiveSheet.Name = "Copy-4" End Sub 

Ya le hemos mostrado este código. Este código básicamente oculta todas las hojas de trabajo en su libro de trabajo actual. Ahora, de hecho tengo una pieza extra de código con En caso de error Ir a 0 para mostrar el error. Si ejecuta el código, verá lo siguiente:

Muestra este error porque no podemos tener hojas con el mismo nombre en el libro activo.

2. VBA En caso de error Ir a línea

Ahora, también puede indicar a Excel que ejecute otro segmento de código si encuentra algún error utilizando la función En caso de error, vaya a la línea Le dice a Excel que ejecute algo después de encontrar un error.

El argumento línea es cualquier etiqueta de línea o número de línea. Si nuestro código causa algún error en tiempo de ejecución, se moverá a la línea, haciendo que el manejador de errores se active en la ejecución. Recuerde, la línea definida debe estar en el procedimiento exacto de la sentencia On Error; de lo contrario, causará un error de compilación.

Echa un vistazo al siguiente código:

 Sub on_error_goto_line() Dim copies As Worksheet On Error Resume Next For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies On Error GoTo error_handler ActiveSheet.Name = "Copy-4" Exit Sub error_handler: MsgBox "También hay una hoja con el mismo nombre. Pruebe con otra diferente." End Sub 

Ya has visto el código en el ejemplo anterior. Cuando utilizamos En caso de error Ir a 0 Pero aquí lo hemos sustituido por el botón En caso de error, vaya a la línea declaración.

Ahora, ejecute el código y verá lo siguiente:

Como puede ver, no nos muestra el cuadro de diálogo de error estándar, sino el cuadro de mensaje personalizado que creamos en el archivo error_handler Cuando Excel encuentra algún error, salta al segmento error_handler y nos muestra el cuadro de mensaje.

También utilizamos un Salida Sub en el procedimiento. Si no hay ninguna hoja denominada " VLOOKUP ", nuestro código VBA renombrará la hoja activa. Entonces, tenemos que terminar la ejecución aquí porque no necesitamos continuar con el manejador de errores y mostrar el cuadro de mensaje.

VBA 'On Error' no funciona en Excel

A veces, por mucho que lo intentes, el método On Error no funciona. Anteriormente, implementamos el método En caso de error pero, a veces, mostrará errores incluso si utiliza el método En caso de error Reanudar siguiente o En caso de error Ir a 0 Puede haber varias razones en su código que usted tiene que arreglar. No voy a mostrar eso.

La razón básica de VBA ' En caso de error No trabajar en Excel es activar la opción "Romper en todos los errores" en Excel.

Sigue estos pasos para solucionarlo:

📌 Pasos

  • En primer lugar, pulse Alt+F11 en el teclado para abrir el editor VBA.
  • Ahora, haga clic en Herramientas> Opciones.

  • A continuación, haga clic en el botón General en la pestaña Opciones cuadro de diálogo.

  • Aquí, puede ver, " Interrupción en todos los errores " ya está marcada. Básicamente impide que se gestionen los errores.
  • Para cambiarla, seleccione la opción " Interrupción en caso de error " y haga clic en OK .

Espero que va a solucionar su problema de VBA "En Error" no funciona en Excel.

Más información: Razones y correcciones del error de nombre en Excel (10 ejemplos)

💬 Cosas para recordar

✎ En caso de error reanudar siguiente no corrige los errores. Básicamente ignora el error y pasa a la siguiente sentencia.

Excel atrapa y almacena los errores de ejecución en el objeto Err. Cuando utilizamos el objeto En caso de error Reanudar siguiente borra las propiedades del objeto Err.

Puede desactivar el En caso de error Reanudar siguiente en su código VBA en Excel añadiendo la instrucción En caso de error Ir a 0 declaración.

Conclusión

Para concluir, espero que este tutorial te haya proporcionado unos conocimientos útiles para utilizar el En caso de error Reanudar siguiente en Excel VBA. Te recomiendo que aprendas y apliques todas estas instrucciones a tu conjunto de datos. Descarga el libro de práctica y pruébalas tú mismo. Además, siéntete libre de opinar en la sección de comentarios. Tu valiosa opinión nos mantiene motivados para crear tutoriales como éste.

No olvide consultar nuestro sitio web Exceldemy.com para diversos problemas y soluciones relacionados con Excel.

Siga aprendiendo nuevos métodos y siga creciendo.

Hugh West es un capacitador y analista de Excel altamente experimentado con más de 10 años de experiencia en la industria. Tiene una Licenciatura en Contabilidad y Finanzas y una Maestría en Administración de Empresas. Hugh tiene una pasión por la enseñanza y ha desarrollado un enfoque de enseñanza único que es fácil de seguir y comprender. Su conocimiento experto de Excel ha ayudado a miles de estudiantes y profesionales en todo el mundo a mejorar sus habilidades y sobresalir en sus carreras. A través de su blog, Hugh comparte su conocimiento con el mundo, ofreciendo tutoriales gratuitos de Excel y capacitación en línea para ayudar a las personas y empresas a alcanzar su máximo potencial.