¿Cómo ignorar los errores usando VBA On Error Resume Next Statement?

Excel VBA en caso de error Reanudar Siguiente

VBA On Error Resume Next es una declaración de manejo de errores. Si el error ocurre mientras se ejecuta el código en lugar de mostrar el error para reanudar la siguiente línea de código ignorando el mensaje de error, puede usar esta declaración.

Aquellos que escriben códigos regularmente en Excel VBA saben que pueden tener errores incluso después de escribir códigos competentes, pero quieren ignorar ese error y seguir ejecutando las siguientes líneas de código. Un ejemplo típico de recibir un mensaje de error es cuando la función de la hoja de trabajo BUSCARV no encuentra el valor de búsqueda de la matriz de la tabla. No devolverá el error # N / A; más bien, arrojará el error. Como "No se puede obtener la propiedad VLOOKUP de la clase de función de la hoja de trabajo".

Si no sabe por qué recibimos este error, es muy difícil corregirlo. En VBA, tenemos una función llamada " En caso de error, reanudar a continuación ".

¿Qué hace On Error Resume Next en VBA?

Hay ciertas áreas como codificador. Sabremos con certeza que esto dará un mensaje de error, pero debemos ignorar este error para seguir revisando el código, por lo que cómo ignorar ese error es la duda común que todos tenemos.

Al usar la instrucción VBA On Error Resume Next, podemos ignorar el error y reanudar la siguiente línea de código.

Ejemplo 1

Suponga que tiene muchas hojas de trabajo y está ocultando algunas de ellas como parte del proyecto VBA. Por ejemplo, a continuación se muestran las hojas de trabajo que tengo en mi hoja de trabajo.

He escrito códigos para ocultar las hojas de "Ventas y" Beneficios ", y debajo está el código.

Código:

Sub On_Error () Hojas de trabajo ("Ventas"). Visible = xlVeryHidden Worksheets ("Beneficio 2019"). Visible = xlVeryHidden Worksheets ("Beneficio"). Visible = xlVeryHidden End Sub

Ahora comenzaré a ejecutar el código línea por línea usando la tecla F8 .

Si presiono la tecla F8 una vez más, ocultará la hoja llamada " Ventas ".

Ahora presione la tecla F8 una vez más y vea qué sucede.

Tenemos un error de "Subíndice fuera de rango" porque la línea de código actual dice lo siguiente.

Hojas de trabajo ("Beneficio 2019"). Visible = xlVeryHidden

Está tratando de ocultar la hoja de trabajo llamada " Beneficio 2019 " , pero no hay una hoja de trabajo con el nombre de "Beneficio 2019".

En estos casos, si la hoja de trabajo no existe en el libro de trabajo, debemos ignorar el error y continuar ejecutando el código ignorando el error "Subíndice fuera de rango".

La siguiente línea del código dice

Hojas de trabajo ("Beneficio"). Visible = xlVeryHidden

Esta hoja de trabajo existe en este libro de trabajo, por lo que sin ignorar el error, no podemos pasar a esta línea de código.

Para ignorar este error, debemos agregar la instrucción "En caso de error, reanudar siguiente".

Código:

Sub On_Error () En caso de error Reanudar las siguientes hojas de trabajo ("Ventas"). Visible = xlVeryHidden Worksheets ("Profit 2019"). Visible = xlVeryHidden Worksheets ("Profit"). Visible = xlVeryHidden End Sub

Como puede ver arriba, agregué la declaración en la parte superior del código antes de que comience cualquiera de las líneas. Ahora ejecute el código y vea qué sucede.

Ahora estoy en la línea a la que se le dio el error anteriormente, presione la tecla F8 y vea qué sucede.

Pasé a la siguiente línea de código sin mostrar ningún error debido a la declaración que hemos agregado en la parte superior, que es la declaración de VBA "On Error Resume Next".

Ejemplo # 2

Ahora veremos cómo usar esta declaración con un ejemplo más. Mire la estructura de datos a continuación para este ejemplo.

Tenemos dos tablas encima de la primera tabla que tienen Emp Name y sus detalles de salario en la segunda tabla, y solo tenemos Emp Name, por lo que al usar VLOOKUP, necesitamos obtener los detalles de salario de la tabla del lado izquierdo.

A continuación se muestra el código que había escrito para obtener los detalles.

Código:

Sub On_Error1 () Dim k As Long For k = 2 To 8 Cells (k, 6) .Value = WorksheetFunction.VLookup (Cells (k, 5), Range ("A: B"), 2, 0) Next k End Sub

Ahora ejecute el código línea por línea y vea qué sucede.

Al ejecutar el primer código de celda, obtenemos el resultado del primer empleado. Repita lo mismo para el segundo empleado también.

Esta vez tenemos el mensaje de error. Veamos el nombre del segundo empleado en la tabla.

The second employee name is “Gayathri,” but this name doesn’t not exists in the first table, so the VBA VLOOKUP function doesn’t return “#N/A” error when the VLOOKUP doesn’t find the lookup value from the table; rather, it gives the above error message.

Our aim is if the employee name doesn’t find in the table, then we need an empty cell for that employee and ignore the error and give results for the remaining names.

We need to add the “On Error Resume Next” statement inside the loop.

Code:

Sub On_Error1() Dim k As Long For k = 2 To 8 On Error Resume Next Cells(k, 6).Value = WorksheetFunction.VLookup(Cells(k, 5), Range("A:B"), 2, 0) Next k End Sub

Now run the code and see the result.

Dos nombres de empleados, " Gayathri & Karanveer ", no están en la lista, por lo que esos códigos de línea deben haber encontrado un error, ya que agregamos una declaración de manejo de errores de " En caso de error, reanudar a continuación ", se ha ignorado esa línea de código y se reanudó para el próximo empleado.

Cosas para recordar aquí

  • “On Error Resume Next” es la declaración del controlador de errores cuando necesitamos ignorar el error conocido.
  • Si desea ignorar el mensaje de error solo para un conjunto específico de código, cierre la instrucción siguiente en caso de error, agregue la instrucción " En error, vaya a 0 ".

Articulos interesantes...