XL98: Cómo usar "On Error" para controlar los errores en una macro

Seleccione idioma Seleccione idioma
Id. de artículo: 192909 - Ver los productos a los que se aplica este artículo
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Expandir todo | Contraer todo

En esta página

Resumen

En Microsoft Excel 98 Macintosh Edition, puede utilizar la instrucción On Error en Microsoft Visual Basic para aplicaciones (macro) (Sub) para interceptar errores y flujo del procedimiento directo las instrucciones de control de errores en un procedimiento. Utilizando el control de errores, puede realizar las macros y la aplicación más fácil de usar por interceptar errores en tiempo de ejecución antes de que el usuario ve las.

Este artículo describe cómo utilizar el control de errores en una macro y proporciona varios ejemplos de reventado de código de macro de error.

Más información

Microsoft proporciona ejemplos de programación con fines ilustrativos únicamente, sin ninguna garantía tanto expresa como implícita. Esto incluye, entre otras, las garantías implícitas de comerciabilidad e idoneidad para un fin determinado. 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 utiliza el control de errores:
    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 (On Error GoTo ErrorHandler) y una instrucción Resume. El controlador de errores puede contener una instrucción Error o una función de error. Cada uno de estos elementos se trata en mayor detalle en secciones posteriores de este artículo.

Tenga en cuenta que en este ejemplo un Exit Sub instrucción precede a la etiqueta de controlador de error. Colocando Exit Sub o Exit Function antes el error rutina de control, evitar que el código de tratamiento de errores se ejecuta cuando la macro se ejecuta sin error.

Instrucción On Error

La instrucción On Error permite que la aplicación controlar los errores que encuentra la macro. Si no utiliza una instrucción On Error en los procedimientos, cualquier error en tiempo de ejecución es grave: es decir, Microsoft Excel generará una mensaje de error run-time y la macro dejará de ejecutarse.

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

Esta instrucción On Error hace lo siguiente

<line>On Error GoTo <línea>
<line>Habilita la rutina de tratamiento de errores que empieza en <línea>, 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.

On Error Resume Next
Especifica que, cuando se produce un error en tiempo de ejecución, el control se transfiere a la
instrucción que sigue inmediatamente a la instrucción donde el error
se ha producido. En otras palabras, la ejecución continúa.


On Error GoTo 0 deshabilita cualquier controlador de errores habilitado en el procedimiento actual.

Instrucción Resume

La rutina de tratamiento de errores tendrá que determinar dónde debe ir macro control cuando se ha producido un error. Para finalizar la macro cuando se ha producido un error, coloque el error rutina de tratamiento inmediatamente antes de la instrucción End Sub (o End Function) o utilice la instrucción Exit Sub (o Exit Function). Para devolver el control a otra ubicación dentro de la macro, utilice la instrucción Resume.
   This Resume
   statement      Does the following
   --------------------------------------------------------------------
				
Reanudar [0]
Reanuda la ejecución de macro con la línea que causó el error. [0] es
un argumento opcional.

Reanudar siguiente
Reanuda la ejecución de macro con la línea siguiente a la que provocó
el error.

<line>Reanudar <línea>
Reanuda la ejecución de macro en el número de línea o la etiqueta de línea especificado
<line>por <línea>.
Nota: Un error muy común escribir rutinas de tratamiento de error es utilizar una instrucción GoTo en la rutina para especificar dónde de control de la macro. Generalmente, no se recomienda que utilice Ir A un error de rutina de control; debe utilizar la instrucción Resume para reanudar la ejecución de macro fuera del controlador de error.

Error instrucción y función de error

Puede hacer que la rutina de tratamiento de errores más eficaz al determinar qué error. Cuando se produce un error de tiempo de ejecución, puede utilizar la función Err para determinar el número de error; se utiliza la instrucción Error para obtener el texto que describe el error. Por ejemplo, puede utilizar la instrucción siguiente para mostrar la descripción del error que se encontró:
MsgBox Err & ":" & Error(Err)
Si el error rutina de control encontró el error 13 (un error de no coincide tipo), el texto siguiente aparecerían en un cuadro de diálogo:
13: Tipo no coincidente

EJEMPLOS DE MACROS QUE UTILIZAN EL CONTROL DE ERRORES

En estos ejemplos, se puede llamar el controlador de errores si no hay un disco en la unidad de disco denominada "DataDisk", o si no hay ningún archivo de ¡ libro en la carpeta DataDisk:XLFiles.

Ejemplo 1--Error Basic controlar macros

  Sub MyMacro()

      Dim MyWorkbook As Workbook

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

      ChDrive "DataDisk"
      ChDir "DataDisk:"
      ChDir "DataDisk:XLFiles"
      Workbooks.Open "Workbook1"

      ' 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
				
Este ejemplo utiliza la instrucción On Error para mostrar un mensaje y finalizar una macro cuando se produce un error. Si se produce un error en la macro, el controlador de errores muestra el siguiente mensaje de error y se detiene la ejecución de macro:
Un error. Se finalizará la macro.
Si el libro ¡ libro se abre correctamente, se muestra un mensaje, que muestra el libro de destino, y finaliza la macro porque no hay una instrucción Exit Sub antes la etiqueta de controlador de error "ErrHandler."

Ejemplo 2: error de macro que muestra un mensaje de error específico de control

El siguiente ejemplo es similar a la macro en el ejemplo 1; sin embargo, esta macro implementa la instrucción Error y la función Err para mostrar un mensaje de error más descriptivo 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 "DataDisk"
      ChDir "DataDisk:"
      ChDir "DataDisk:XLFiles"
      Workbooks.Open "Workbook1"

      ' 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 your floppy drive."

         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
				
si se produce un error en la macro se producirá una de las siguientes:

  • Si el error es 68 o 75, finalizará el mensaje "Hay un error de lectura de unidad la unidad de disquetes" se mostrarán y la macro.
  • Si el error es 76, el mensaje "la ruta de acceso especificada no se encuentra" se mostrará, y la macro terminará.
  • Si el error es un error distinto de 68, 75 o 76, el mensaje "error < número de error >: < texto de error >" se mostrará y finalizará la macro.
Si el libro ¡ libro se abre correctamente, se mostrará un mensaje que muestra el libro de destino y la macro terminará porque hay una instrucción Exit Sub antes la etiqueta de controlador de error "ErrHandler."

Ejemplo 3--macros que utiliza la instrucción Resume

Este ejemplo siguiente utiliza la instrucción Resume para reanudar la ejecución de macro basada en elecciones que realice el usuario 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 "DataDisk"
      ChDir "DataDisk:"
      ChDir "DataDisk:XLFiles"
      Workbooks.Open "Workbook1"

   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 your floppy drive." & _
               "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 your floppy drive 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 " & _
                 "DataDisk:XLFiles:Workbook1. 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 correctamente se abre el libro ¡ libro, se mostrará un mensaje que muestra el libro de destino como ¡ HojadeCálculo y finalizará la macro porque no hay una instrucción Exit Sub antes la etiqueta de controlador de error "ErrHandler." Si se produce un error en la macro, el controlador de errores siga uno de los siguientes:

  • Si el error es 68 o 75, aparece el mensaje siguiente:
    Hay un error al leer la unidad de la unidad de floopy. Inserte un disco y presione Aceptar para continuar o Cancelar para finalizar 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 ha producido el error. Si el usuario hace clic en Cancelar, finalizará la macro.
  • Si el error es 76, se mostrará el mensaje siguiente:
    El disco en la unidad disquete no tiene un directorio XLFiles. Por favor, 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 ha producido el error. Si el usuario hace clic en Cancelar, finalizará la macro.
  • Si el error es un error distinto de 68, 75 o 76, se mostrará el mensaje de error siguientes:
    Error DataDisk:XLFiles:Workbook1 de apertura. ¿Utilizar el libro activo como el destino?
    Si el usuario hace clic en Sí en el cuadro de diálogo, la macro se reanudará en la línea etiquetada "NewWorkbook." El libro activo actualmente se muestra como el libro de destino. Si el usuario hace clic en No, finalizará la macro.

Ejemplo 4--centralizar el control de errores

Puede reducir la longitud del código global de la aplicación al centralizar el control de errores. Puede centralizar creando uno o varios procedimientos que controlan los errores comunes de control de errores.

El siguiente es un procedimiento denominado ErrorHandling que mostrará un mensaje correspondiente al número de error (valorDeError) que se ha pasado y, cuando sea posible, permitir al usuario elija un botón para especificar qué acción debe tomarse siguiente el error. Según la opción que el usuario realiza, el procedimiento ErrorHandling devolverá un valor (ReturnValue) para el curso de acción al procedimiento de llamada. Puede ser la propiedad ReturnValue Err_Exit (salir de la macro dónde se produjo el error), Err_Resume (reanudar en la línea de la macro dónde se produjo el error) o Err_Resume_Next (reanudar en la línea siguiente línea de la macro dónde 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
				
esta macro siguiente muestra cómo podría utilizar el procedimiento ErrorHandling 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 "DataDisk"
      ChDir "DataDisk:"
      ChDir "DataDisk:XLFiles"
      Workbooks.Open "Workbook1"

      ' 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

Para obtener más información acerca de cómo utilizar On Error Statement, desde el Editor de Visual Basic, haga clic en el Ayudante, tipo on error haga clic en Buscar y, a continuación, haga clic en para ver "en la"instrucción de error.

Nota: Si el Ayudante está oculto, haga clic en el botón Ayudante de Office en la barra de herramientas estándar. Si el Ayudante no es capaz de responder la consulta, consulte en contacto con el siguiente artículo en Microsoft Knowledge Base:
176476OFF: Ayudante de Office respuesta no preguntas de Visual Basic

Propiedades

Id. de artículo: 192909 - Última revisión: miércoles, 5 de febrero de 2014 - Versión: 2.0
La información de este artículo se refiere a:
  • Microsoft Excel 98 para Macintosh
Palabras clave: 
kbnosurvey kbarchive kbmt kbdtacode kbhowto KB192909 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): 192909

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