Cómo utilizar "On Error" para manejar errores en una Macro

Seleccione idioma Seleccione idioma
Id. de artículo: 141571 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

En Microsoft Excel, puede utilizar la instrucción On Error en un Microsoft Visual Basic para macro (procedimiento Sub) de las aplicaciones para interceptar errores anddirect el flujo del procedimiento a las instrucciones de control de errores en un procedimiento. Error usando control, realiza las macros y su aplicación se debe utilizar más fácil mediante la interceptación de errores en tiempo de ejecución antes de que el usuario los vea.

En este artículo se describe cómo utilizar el control de errores en una macro y providesseveral los ejemplos de código de macro de interceptación de errores.

Más información

Microsoft proporciona ejemplos de programación unicamente con fines ilustrativos, sin ninguna garantía tanto expresa como implícita. Esto incluye las garantías implícitas de comerciabilidad o idoneidad para un fin determinado, pero sin limitarse a ellas. Este artículo se supone que está familiarizado con el lenguaje de programación que se muestra y con las herramientas que se utilizan para crear y depurar procedimientos. Los ingenieros de soporte técnico de Microsoft pueden explicarle la funcionalidad de un determinado procedimiento, pero no modificarán estos ejemplos para ofrecer mayor funcionalidad ni crearán procedimientos que cumplan sus requisitos específicos. El siguiente es un ejemplo de la estructura básica de una macro que control de useserror:
   Sub MyMacro()

        On Error GoTo ErrorHandler
        . . .
        Exit Sub

   ErrorHandler:
        . . .
        Resume <or Exit Sub>
        . . .

   End Sub
				
El ejemplo contiene los siguientes elementos: una instrucción On Error (OnError GoTo ErrorHandler) y una instrucción Resume. La mightcontain del controlador de error una instrucción Error o una función de Error. Cada una de estas elementsis tratados con más detalle en secciones posteriores de este artículo.

Tenga en cuenta que en este ejemplo un Exit Sub instrucción precede a la handlerlabel de error. Al colocar Exit Sub o Exit Function antes de la handlingroutine de error, evita que el código de control de errores se ejecuta cuando el macroruns sin errores.

Instrucción On Error

La instrucción On Error permite a su aplicación controlar los errores que yourmacro se encuentra. Si no se utiliza una instrucción On Error en yourprocedures, cualquier error en tiempo de ejecución es grave: es decir, MicrosoftExcel generará un mensaje de error de tiempo de ejecución y la macro será stoprunning.

La siguiente tabla describe cada tipo de instrucción a la anddescribes de sintaxis de la instrucción On Error.

Esta instrucción On Error hace lo siguiente

  • On Error GoTo<line></line>
    Habilita la rutina de control de errores, que comienza en <line>, que es cualquier etiqueta de línea o número de línea. La línea especificada debe estar en el mismo procedimiento que la instrucción On Error.</line>
  • On Error Resume Next
    Especifica que cuando se produce un error en tiempo de ejecución, el control pasa a la instrucción que sigue inmediatamente a la instrucción donde se produjo el error. En otras palabras, la ejecución continúa.
  • On Error GoTo 0
    Deshabilita a cualquier controlador de errores habilitado en el procedimiento actual.

Resume (instrucción)

La rutina de control de errores deberá determinar dónde controlshould macro cuando se ha producido un error. Para finalizar la macro cuando un errorhas se produjo, colocar el error en la rutina de control o la instrucción End Sub (o End Function) immediatelybefore o utilice la instrucción Exit Sub (función de orExit). Para devolver el control a otra macro durantelos de ubicación, utilice la instrucción Resume.

Esta instrucción Resume hace lo siguiente

  • Resumen [0]
    Reanuda la ejecución de la macro en la línea que causó el error. [0] es un argumento opcional.
  • Resume Next
    Reanuda la ejecución de la macro en la línea siguiente a la línea que produjo el error.
  • Reanudar<line></line>
    Reanuda la ejecución de la macro en el número de línea o una etiqueta de línea especificado por <line>.</line>
Nota: Un error muy común en escribir rutinas de tratamiento de errores es que se debe utilizar una instrucción GoTo en la rutina para especificar dónde macro controlshould. Por lo general, se recomienda no usar GoTo de anerror control de rutina; debe utilizar la instrucción Resume resumemacro la ejecución fuera del controlador de errores.

Instrucción Error y la función Error

Puede hacer que la rutina de tratamiento de errores más eficaz por determiningwhat error se ha producido. Cuando se produce un error en tiempo de ejecución, puede utilizar la función theErr para determinar el número de error; la instrucción Error está acostumbrado a obtener el texto que describe el error. Por ejemplo, puede utilizar instrucción siguientes para mostrar la descripción del error que wasencountered:
   MsgBox Err & ": " & Error(Err)
				
Si la rutina de tratamiento de errores ha encontrado el error 13 (un tipo mismatcherror), aparecerá el siguiente texto en un cuadro de diálogo:
13: no coinciden los tipos

EJEMPLOS DE MACROS QUE UTILIZAN EL CONTROL DE ERRORES

En estos ejemplos, el controlador de errores puede denominarse si no hay que ningún diskin la unidad B, si no encuentra la ruta de acceso B:\XLFiles, o si hay un archivo noBook1.xls en la carpeta B:\XLFiles (directorio).

Ejemplo 1: Macro de control básico de errores

   Sub MyMacro()

      Dim MyWorkbook As Workbook

      ' Run the Error handler "ErrHandler" when an error occurs.
      On Error GoTo Errhandler

      ChDrive "B:"
      ChDir "B:\"
      ChDir "B:\XLFiles"
      Workbooks.Open "Book1.xls"

      ' Disable the error handler.
      On Error GoTo 0

      Set MyWorkbook = ActiveWorkbook
      MsgBox "The destination workbook is " & MyWorkbook.Name

      ' Exit the macro so that the error handler is not executed.
      Exit Sub

   Errhandler:

      ' If an error occurs, display a message and end the macro.
      MsgBox "An error has occurred. The macro will end."

   End Sub
				
En este ejemplo se utiliza la instrucción On Error para mostrar un mensaje y terminan amacro cuando se produce un error. Si se produce un error en la macro, el errorhandler muestra el siguiente mensaje de error y el ishalted de la ejecución de macros:
Ocurrió un error. Finalice la macro.
Si el libro que Book1.xls correctamente es abierto, un mensaje isdisplayed, que muestra el libro de destino, y la macro termina becausethere es una instrucción Exit Sub antes de la etiqueta de controlador de error "ErrHandler".

Ejemplo 2: Macro que muestre un mensaje de Error específico de control de errores

El siguiente ejemplo es similar a la macro en el ejemplo 1; Sin embargo, thismacro implementa la instrucción Error y la función Err para mostrar el mensaje de error descriptivo de amor cuando se produce un error.
   Sub MyMacro()

      Dim MyWorkbook As Workbook

      ' Run the Error handler "ErrHandler" when an error occurs.

      On Error GoTo Errhandler
      ChDrive "B:"
      ChDir "B:\"
      ChDir "B:\XLFiles"
      Workbooks.Open "Book1.xls"

      ' Disable the error handler.
      On Error GoTo 0

      Set MyWorkbook = ActiveWorkbook
      MsgBox "The destination workbook is " & MyWorkbook.Name

      ' Exit the macro so that the error handler is not executed.
      Exit Sub

   Errhandler:

      Select Case Err

         Case 68, 75:    ' Error 68: "Device not available"
                         ' Error 75: "Path/File Access Error"
            MsgBox "There is an error reading drive B."

         Case 76:        ' Error 76: "Path not found"
            MsgBox "The specified path is not found."

         Case Else:      ' An error other than 68, 75 or 76 has occurred.
            ' Display the error number and the error text.
            MsgBox "Error # " & Err & " : " & Error(Err)

      End Select

      ' End the macro.
   End Sub
				
Se producirá si se produce un error en la macro uno de estos procedimientos:

  • Si el error es 68 o 75, se mostrará el mensaje "hay un error al leer la unidad B" y la macro finalizará.
  • Si el error es 76, se mostrará el mensaje "la ruta de acceso especificada no se encuentra" y finalizará la macro.
  • Si el error es un error que no sean de 68, 75 y 76, el mensaje "Error <error number="">: <error text="">" se mostrará y la macro terminará.</error> </error>
Si se abre correctamente el libro Book1.xls, entonces se mostrará un mensaje que muestra el libro de destino y la macro se acaba porque es una instrucción Exit Sub antes de la etiqueta de controlador de error "ErrHandler".

Ejemplo 3: Macro que utilice la instrucción Resume

En el ejemplo siguiente se utiliza la instrucción Resume para reanudar la macro executionbased en las opciones que el usuario hace que cuando se produce un error.
   Sub MyMacro()

   Dim Result as Integer
   Dim ErrMsg as String
   Dim MyWorkbook as Workbook

      ' Run the Error handler "ErrHandler" when an error occurs.
      On Error GoTo Errhandler

      ChDrive "B:"
      ChDir "B:\"
      ChDir "B:\XLfiles"

      Workbooks.Open "Book1.xls"

   NewWorkbook:

      ' Disable the error handler.
      On Error GoTo 0

      Set MyWorkbook = ActiveWorkbook
      MsgBox "The destination workbook is " & MyWorkbook.Name

      ' Exit the macro so that the error handler is not executed.
      Exit Sub

   Errhandler:

      Select Case Err

         Case 68, 75:  ' Error 68: "Device not available"
                       ' Error 75: "Path/File access error
            ErrMsg =  "There is an error reading drive B. Please " & _
               "insert a disk and then press OK to continue or " & _
               "press Cancel to end this operation."

            Result = MsgBox(ErrMsg, vbOKCancel)

            ' Resume at the line where the error occurred if the user
            ' clicks OK; otherwise end the macro.
            If Result = vbOK Then Resume

         Case 76:     ' Error 76: Path not found
            ErrMsg = "The disk in drive B does not have an XLFiles " & _
               "directory. Please insert the correct disk."

            Result = MsgBox(ErrMsg, vbOKCancel)

            ' Resume at the line where the error occurred if the user
            ' clicks OK; otherwise end the macro.
            If Result = vbOK Then Resume

         Case Else:   ' A different error occurred.

            ErrMsg = "An error has occurred opening " & _
                 "B:\XLFiles\Book1.xls. Use the active workbook as " & _
                 "the destination?"

            Result = MsgBox(ErrMsg, vbYesNo)

            ' Resume at the label "NewWorkbook" if the user clicks Yes;
            ' otherwise end the macro.
            If Result = vbYes Then Resume NewWorkbook

      End Select

   ' End the macro.
   End Sub
				
Si se abre el libro Book1.xls por correctamente, un mensaje le puestos mostrando el libro de destino como Book1.xls y el willend de macro porque no hay una instrucción Exit Sub antes de la etiqueta de controlador de error "ErrHandler". Si se produce un error en la macro, el controlador de errores le doone de las acciones siguientes:

  • Si el error es 68 o 75, aparece el siguiente mensaje:
    Hay un error al leer la unidad B. Por favor, inserte un disco y, a continuación, haga clic en Aceptar para continuar o presione Cancelar para terminar esta operación.
    Si el usuario hace clic en Aceptar en este cuadro de diálogo, la macro se reanudará en la línea donde se produjo el error. Si el usuario hace clic en Cancelar, finalizará la macro.
  • Si el error es 76, se mostrará el siguiente mensaje:
    El disco de la unidad B no tiene un directorio XLFiles. Inserte el disco correcto.
    Si el usuario hace clic en Aceptar en este cuadro de diálogo, la macro se reanudará en la línea donde se produjo el error. Si el usuario hace clic en Cancelar, finalizará la macro.
  • Si el error es un error distinto de 68, 75 o 76, aparece el siguiente mensaje de error:
    Ocurrió un error abriendo B:\XLFiles\Book1.xls. ¿Utilice el libro activo como destino?
    Si el usuario hace clic en Sí en el cuadro de diálogo, la macro se reanudará en la línea con la etiqueta "NewWorkbook". El libro activo actualmente se muestra como el libro de destino. Si el usuario hace clic en No, finalizará la macro.

Ejemplo 4: centraliza el control de errores

Puede reducir la longitud del código general en su bycentralizing el control de errores de aplicación. Bycreating de control de errores se pueden centralizar uno o más procedimientos que controlan los errores comunes.

El siguiente es un procedimiento llamado ErrorHandling que mostrará un mensaje correspondiente al número de error (valorDeError) era passedto y, cuando sea posible, permite al usuario seleccionar que un botón de acción de specifywhich debe tomarse tras el error. En función de la elecciónel que del usuario, el procedimiento ErrorHandling devolverá un value(ReturnValue) para el curso de acción al procedimiento de llamada. TheReturnValue puede ser Err_Exit (salida la macro donde se produjo el error), Err_Resume (Reanudar en la línea de la macro donde se produjo el error) o Err_Resume_Next (Reanudar en la línea de la línea siguiente en el macrowhere se produjo el error).
   Public Const Err_Exit = 0
   Public Const Err_Resume = 1
   Public Const Err_Resume_Next = 2

   Sub ErrorHandling(ErrorValue As Integer, ReturnValue As Integer)

      Dim Result as Integer
      Dim ErrMsg as String
      Dim Choices as Integer

      Select Case ErrorValue

         Case 68:     ' Device  not available.

            ErrMsg = "The device you are trying to access is either " & _
               "not online or does not exist. Retry?"
            Choices = vbOKCancel

         Case 75:     ' Path/File access error.

            ErrMsg = "There is an error accessing the path and/or " & _
                 "file specified. Retry?"
            Choices = vbOKCancel

         Case 76:     ' Path not found.

            ErrMsg = "The path and/or file specified was not found. Retry?"
            Choices = vbOKCancel

         Case Else:   'An error other than 68, 75 or 76 has occurred

            ErrMsg = "An unrecognized error has occurred ( " & _
               Error(Err) & " ). The macro will end."
            MsgBox ErrMsg, vbOKOnly
            ReturnValue = Err_Exit
            Exit Sub

      End Select

      ' Display the error message.
      Result = MsgBox(ErrMsg, Choices)

      ' Determine the ReturnValue based on the user's choice from MsgBox.
      If Result = vbOK Then
         ReturnValue = Err_Resume
      Else
         ReturnValue = Err_Exit
      End If

   End Sub
				
La siguiente macro muestra cómo se podría utilizar la ErrorHandlingprocedure cuando se produce un error:
   Sub MyMacro()

      Dim Action As Integer

      ' Run the Error handler "ErrHandler" when an error occurs.
      On Error GoTo Errhandler

      ChDrive "B:"
      ChDir "B:\"
      ChDir "B:\XLFiles"
      Workbooks.Open "Book1.xls"

      ' Exit the macro so that the error handler is not executed.
      Exit Sub

   Errhandler:

      ' Run the ErrorHandling macro to display the error and to
      ' return a value for Action which will determine the appropriate
      ' action to take (Resume the macro or end the macro)

      ErrorHandling Err, Action

      If Action = Err_Exit Then
         Exit Sub
      ElseIf Action = Err_Resume Then
         Resume
      Else
         Resume Next
      End If

   End Sub
				

Referencias

En Microsoft Excel 97, para obtener más información acerca de control de errores en amacro, haga clic en la ficha Índice de la Ayuda de Microsoft Visual Basic forApplications, escriba el texto siguiente:
En caso de Error
y, a continuación, haga doble clic en el texto seleccionado para ir al tema "On Error Statement".

En Microsoft Excel 7.0, para obtener más información acerca de control de errores en amacro, haga clic en la ficha Índice de la Ayuda de Microsoft Excel, escriba la followingtext
Interceptación de errores
y, a continuación, haga doble clic en el texto seleccionado para ir al tema "Intercepción de errores".

En Microsoft Excel 5.0, para obtener más información acerca de la captura de errores, consulte a "Guía del usuario de Visual Basic", "Control de errores y valores de Error"

Para obtener información adicional acerca de cómo obtener ayuda con forApplications de Visual Basic, consulte el siguiente artículo de Microsoft KnowledgeBase:
163435 VBA: Recursos de programación para Visual Basic para Aplicaciones

Propiedades

Id. de artículo: 141571 - Última revisión: lunes, 03 de marzo de 2014 - Versión: 18.0
La información de este artículo se refiere a:
  • Microsoft Excel 97 Standard Edition
  • Microsoft Excel 95 Standard Edition
  • Microsoft Excel 5.0 Standard Edition
Palabras clave: 
kbdtacode kbhowto kbprogramming kbmt KB141571 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 141571
Renuncia a responsabilidad de los contenidos de la KB sobre productos a los que ya no se ofrece asistencia alguna
El presente artículo se escribió para productos para los que Microsoft ya no ofrece soporte técnico. Por tanto, el presente artículo se ofrece "tal cual" y no será actualizado.

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com