Cómo usar la Declaración de un error en Excel 2016 VBA

  1. Software
  2. Oficina de Microsoft
  3. Excel
  4. Cómo usar la Declaración de un error en Excel 2016 VBA

Libro Relacionado

Programación de Excel VBA para Dummies, 4ª Edición

Por John Walkenbach

Cuando necesite tratar errores en Excel VBA, puede utilizar la sentencia OnError. Sin embargo, hay algunas cosas que usted necesita saber primero. Puede utilizar la instrucción On Error de tres maneras.

SyntaxWhat It DoesOn Error GoTo labelDespués de ejecutar esta sentencia, VBA reanuda la ejecución en el directorio
que sigue a la etiqueta especificada. Debe incluir dos puntos
después de la etiqueta para que VBA la reconozca como una etiqueta.
comportamiento de comprobación de errores. Use esta declaración después de usar uno de los botones
otros En las instrucciones de error o cuando desee eliminar el tratamiento de errores
En Error Resume NextDespués de ejecutar esta sentencia, VBA simplemente ignora todos los errores.
y reanuda la ejecución con la siguiente declaración.

Reanudar después de un error

En algunos casos, usted simplemente quiere que la rutina termine con elegancia cuando ocurre un error. Por ejemplo, puede mostrar un mensaje que describa el error y, a continuación, salir del procedimiento. (El ejemplo de EnterSquareRoot5 que se muestra anteriormente utiliza esta técnica.) En otros casos, usted desea recuperarse del error, si es posible.

Para recuperarse de un error, debe utilizar una declaración de reanudación. Esto borra la condición de error y le permite continuar la ejecución en algún lugar. Puede utilizar la expresión Reanudar de tres maneras.

SyntaxWhat It DoesResumeExecution se reanuda con la sentencia que causó el error. Usar
esto si su código de manejo de errores corrige el problema y
Reanudar Próxima Ejecución se reanuda con la declaración inmediatamente después de la
que causó el error. Esto esencialmente ignora la
La ejecución se reanuda en la etiqueta que usted especifique.

El siguiente ejemplo utiliza una declaración de reanudación después de que se produce un error:

Sub EnterSquareRoot6() Dim Num As Variant Dim Msg As String Dim Ans As IntegerTryAgain:' Set up error handling On Error GoTo BadEntry' Prompt for a value Num = InputBox("Enter a value") Si Num = "" Then Exit Sub' Inserte la raíz cuadrada ActiveCell.Value = Sqr(Num) Exit SubBadEntry: Msg = Número de Err. y ": ": " & Error(Número de Err.) Msg = Msg & vbNewLine & vbNewLine Msg = Msg & "Asegúrese de que un rango está seleccionado, " Msg = Msg & "la hoja no está protegida," Msg = Msg & "y usted introduce un valor no negativo. Msg = Msg & vbNewLine & vbNewLine & "Try again?"
 Ans = MsgBox(Msg, vbSíNo + vbCritical) Si Ans = vbSí Entonces reanuda TryAgainEnd Submenú

Este procedimiento tiene otra etiqueta: Inténtalo de nuevo. Si se produce un error, la ejecución continúa en la etiqueta BadEntry y el código muestra el siguiente mensaje. Si el usuario responde haciendo clic en Sí, se inicia la instrucción Reanudar y la ejecución salta de nuevo a la etiqueta TryAgain. Si el usuario hace clic en No, el procedimiento finaliza.

Si se produce un error, el usuario puede decidir si desea volver a intentarlo.

Observe que el mensaje de error también incluye el número de error, junto con la descripción de error “oficial”.

La declaración de reanudación borra la condición de error antes de continuar. Para ver esto, intente sustituir la siguiente expresión por la penúltima del ejemplo anterior:

Si Ans = vbSí, entonces vaya a TryAgain

El código no funciona correctamente si utiliza GoTo en lugar de Resume. Para demostrarlo, introduzca un número negativo. Aparece la indicación de error. Haga clic en Sí para intentarlo de nuevo y, a continuación, introduzca otro número negativo. Este segundo error no está atrapado porque no se ha eliminado la condición de error original.

Manipulación de errores en pocas palabras

Para ayudarle a mantener todo este negocio de manejo de errores en orden, aquí tiene un resumen rápido y sucio. Un bloque de código de tratamiento de errores tiene las siguientes características:

  • Comienza inmediatamente después de la etiqueta especificada en la declaración On Error.
  • Debería ser alcanzado por su macro sólo si ocurre un error. Esto significa que debe utilizar una expresión como Exit Sub o Exit Function inmediatamente antes de la etiqueta.
  • Puede requerir una declaración de Currículum Vitae. Si decide no interrumpir el procedimiento cuando se produce un error, debe ejecutar una declaración de reanudación antes de volver al código principal.
  • Saber cuándo ignorar los errores

    En algunos casos, está perfectamente bien ignorar los errores. Es entonces cuando entra en juego la sentencia On Error Resume Next.

    El siguiente ejemplo hace un bucle a través de cada celda en el rango seleccionado y convierte el valor a su raíz cuadrada. Este procedimiento genera un mensaje de error si alguna celda de la selección contiene un número negativo o texto:

    Sub SelectionSqrt() Dim cell As Range If TypeName(Selection) <> "Range" Then Exit Sub For Each cell In Selection cell.Value = Sqr(cell.Value) Next cellEnd Sub

    En este caso, es posible que desee omitir cualquier celda que contenga un valor que no pueda convertir en una raíz cuadrada. Puede crear todo tipo de capacidades de comprobación de errores utilizando estructuras If-Then, pero puede idear una solución mejor (y más simple) simplemente ignorando los errores que se producen.

    La siguiente rutina logra esto usando la sentencia On Error Resume Next:

    Sub SelectionSqrt() Dim cell As Range If TypeName(Selection) <> "Range" Then Exit Sub On Error Resume Next For Each cell In Selection cell.Value = Sqr(cell.Value) Next cellEnd Sub

    En general, puede utilizar una sentencia On Error Resume Next si considera que los errores son inofensivos o intrascendentes para su tarea.

    No Responses

    Write a response