Interceptación de errores con Visual Basic para aplicaciones en Excel para Mac

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): 193247
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Resumen
Cuando un error en tiempo de ejecución se produce en un Microsoft Visual Basic para aplicaciones macro, un mensaje de error aparece en la pantalla y la macro, se detiene o tiene un comportamiento impredecible.

Para impedir que la aplicación bloquea o se comporta de forma impredecible, puede incluir código de macro que intercepta el error e indica la macro cómo tratarlo. El proceso de interceptar y controlar un error en tiempo de ejecución se denomina "interceptación de errores". El conjunto de instrucciones que indica la aplicación cómo controlar el error se denomina "rutina de tratamiento de errores" o "controlador de errores".
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. Mientras se ejecuta el código de Visual Basic, puede encontrar varios tipos de errores que se pueden interceptar. Pueden sacar partido de interceptación de errores en Microsoft Excel para Mac mediante la siguientes funciones y las instrucciones.

Instrucción On Error

La instrucción On Error , Visual Basic para aplicaciones iniciar o detener la interceptación de errores. La instrucción On Error también especifica un conjunto de instrucciones a ejecutar si se produce un error.

Error de función

La función Err devuelve el número del error encontrado.

Ejemplo de uso de la función Err :
   Msgbox "The most recent error number is " & Err & _      ". Its message text is: " & Error(Err)				
la tabla siguiente contiene una lista de los códigos de error capturable puede encontrar al utilizar la función Err .
   Error code   Error message   ----------   -------------   3            Return without GoSub   5            Invalid procedure call   6            Overflow   7            Out of memory   9            Subscript out of range   10           This array is fixed or temporarily locked   11           Division by zero   13           Type mismatch   14           Out of string space   16           Expression too complex   17           Can't perform requested operation   18           User interrupt occurred   20           Resume without error   28           Out of stack space   35           Sub, function, or property not defined   47           Too many DLL application clients   48           Error in loading DLL   49           Bad DLL calling convention   51           Internal error   52           Bad file name or number   53           File not found   54           Bad file mode   55           File already open   57           Device I/O error   58           File already exists   59           Bad record length   61           Disk full   62           Input past end of line   63           Bad record number   67           Too many files   68           Device unavailable   70           Permission denied   71           Disk not ready   74           Can't rename with different drive   75           Path/File access error   76           Path not found   91           Object variable or With block variable not set   92           For Loop not initialized   93           Invalid pattern string   94           Invalid use of Null   298          System DLL could not be loaded   320          Can't use character device names in specified file names   321          Invalid file format   322          Can't create necessary temporary file   325          Invalid format in resource file   327          Data value named was not found   328          Illegal parameter; can't write arrays   335          Could not access system registry   336          ActiveX component not correctly registered   337          ActiveX component not found   338          ActiveX component did not correctly run   360          Object already loaded   361          Can't load or unload this object   363          Specified ActiveX control not found   364          Object was unloaded   365          Unable to unload within this context   368          The specified file is out of date. This program requires                a newer version   371          The specified object can't be used as an owner form for                Show   380          Invalid property value   381          Invalid property-array index   382          Property Set can't be executed at run time   383          Property Set can't be used with a read-only property   385          Need property-array index   387          Property Set not permitted   393          Property Get can't be executed at run time   394          Property Get can't be executed on write-only property   400          Form already displayed; can't show modally   402          Code must close topmost modal form first   419          Permission to use object denied   422          Property not found   423          Property or method not found   424          Object required   425          Invalid object use   429          ActiveX component can't create object or return                reference to this object   430          Class doesn't support OLE Automation   430          Class doesn't support Automation   432          File name or class name not found during Automation                operation   438          Object doesn't support this property or method   440          OLE Automation error   440          Automation error   442          Connection to type library or object library for remote                process has been lost   443          Automation object doesn't have a default value   445          Object doesn't support this action   446          Object doesn't support named arguments   447          Object doesn't support current locale settings   448          Named argument not found   449          Argument not optional or invalid property assignment   450          Wrong number of arguments or invalid property assignment   451          Object not a collection   452          Invalid ordinal   453          Specified DLL function not found   454          Code resource not found   455          Code resource lock error   457          This key is already associated with an element of this                collection   458          Variable uses a type not supported in Visual Basic   459          This component doesn't support events   460          Invalid Cipboard format   461          Specified format doesn't match format of data   480          Can't create AutoRedraw image   481          Invalid picture   482          Printer error   483          Printer driver does not support specified property   484          Problem getting printer information from the system.                Make sure the printer is set up correctly   485          Invalid picture type   486          Can't print form image to this type of printer   735          Can't save file to Temp directory   744          Search text not found   746          Replacements too long   31001        Out of memory   31004        No object   31018        Class is not set   31027        Unable to activate object   31032        Unable to create embedded object   31036        Error saving to file   31037        Error loading from file				

Función de error

La función error devuelve el mensaje de error que corresponde a un número de error determinado.

Ejemplo de la función error de uso:
   Msgbox "The message text of the error is: " & Error(Err)				

Estado de error

La instrucción error simula la aparición de un error permitiéndole asignar a un número de error personalizado a la función Err . Estos valores de error definida por el usuario son valores que se definen para los procedimientos y que siempre están almacenados en variables del tipo de datos Variant . Un uso común de este tipo de valor de error es en los procedimientos que aceptan varios argumentos y devuelven un valor. Por ejemplo, suponga que el valor devuelto sólo es válido si los argumentos quedan dentro de un determinado intervalo. El procedimiento puede probar los argumentos que el usuario proporciona y, si los argumentos no están en el rango aceptable, puede tener la devolución de procedimiento el valor de error apropiado.

error es un subtipo del tipo de datos Variant y cuando se utiliza el término "valor de error", normalmente significa que una variable es del tipo Variant , y que contiene un valor que Visual Basic para aplicaciones reconoce como un error definido por el usuario. Los valores de error se utilizan en un procedimiento para indicar que se han producido las condiciones de error. A diferencia de errores de tiempo de ejecución normales, estos errores no interrumpen el código ya que se reconocen como variables normales y no errores. Los procedimientos pueden comprobar estos valores de error y tome las medidas adecuadas.

También puede utilizar la instrucción error para simular errores en tiempo de ejecución. Esto resulta especialmente útil cuando se están probando las aplicaciones, o cuando desea tratar una condición determinada como equivalente a un error en tiempo de ejecución. Proporcionando el código de error para el error en una instrucción error se pueden simular cualquier error Visual Basic para aplicaciones tiempo de ejecución. También puede utilizar la instrucción error para crear sus propios errores definidos por el usuario proporcionando un código de error que no corresponde a un error Visual Basic para aplicaciones tiempo de ejecución. La tabla que contiene una lista de los errores integrados aparece anteriormente en este artículo (en la sección "Función Err"). En este momento, Visual Basic para aplicaciones no utiliza todos los números disponibles para los errores integrados. En futuras versiones de Visual Basic para aplicaciones, los números internos aumentará como integrado - errores que se agregan más. Se recomienda que empiece sus números de error en 50000 y que resulte hasta 65.535 para evitar posibles conflictos en el futuro.

Instrucción de ejemplo con error para simular errores de tiempo de ejecución:
   Sub Test()      On Error Resume Next      Error 50000          'set the value of Err to 50000      If Err = 50000 Then         MsgBox "my own error occurred"      End If   End Sub				
al probar la macro se ejecuta, recibirá un cuadro de mensaje que contiene "mi propio error" como el mensaje.

CVErr (función)

La función CVErr se utiliza para crear valores de error. La función CVErr toma un argumento que debe ser un entero o ser una variable que contiene un entero.
   NoRadius = CVErr(2010)   NotANumber = 2020   InvalidArgument = CVErr(NotANumber)				
ejemplo uso de la función CVErr :
   Public NoRadius, NotANumber   Sub AreaOfCircle()      Const PI = 3.142      NoRadius = CVErr(2010)      NotANumber = CVErr(2020)      Radius = CheckData(InputBox("Enter the radius: "))      If IsError(Radius) Then         Select Case Radius            Case NoRadius               MsgBox "Error: No radius given."            Case NotANumber               MsgBox "Error: Radius is not a number."            Case Else               MsgBox "Unknown Error."         End Select      Else         MsgBox "The area of the circle is " & (PI * Radius ^ 2)      End If   End Sub   Function CheckData(TheRadius)      If Not IsNumeric(TheRadius) Then         CheckData = NotANumber      ElseIf TheRadius = 0 Then         CheckData = NoRadius      Else         CheckData = TheRadius      End If   End Function				

Utilizar valores de error integrados

Hay siete valores de error integrados en Excel para Mac. La tabla siguiente muestra el número de error (constante), el valor de error literal y el valor de error convertido.
Error number (Constant)   Literal error value     Converted error valuexlErrDiv0                   [#DIV/0!]               CVErr(xlErrDiv0)xlErrNA                     [#N/A]                  CVErr(xlErrNA)xlErrName                   [#NAME?]                CVErr(xlErrName)xlErrNull                   [#NULL!]                CVErr(xlErrNull)xlErrNum                    [#NUM!]                 CVErr(xlErrNum)xlErrRef                    [#REF!]                 CVErr(xlErrRef)xlErrValue                  [#VALUE!]CVErr(xlErrValue)				
trabaja con estos valores de error de hoja de cálculo integrado convierten de la misma manera que con los errores definidos por el usuario: como números en valores de error mediante la función CVErr. La única diferencia es que los errores de hoja de cálculo, Visual Basic para aplicaciones proporciona los números de error como constantes integradas y también proporciona los valores de error literales. Estos elementos no se proporcionan para valores de error definido por el usuario. Los valores de error literal deben estar encerrados entre corchetes como se muestra en la tabla anterior.

Ejemplo con valores de error integrados:
   Function Commission(SharesSold,PricePerShare)      If Not (IsNumeric(SharesSold) And IsNumeric(PricePerShare)) Then         Commission = CVErr(xlErrNum)      Else         TotalSalePrice = ShareSold * PricePerShare         If TotalSalePrice <= 15000 Then            Commission = 25 + 0.03 * SharesSold         Else            Commission = 25 + 0.03 * (0.9 * SharesSold)         End If      End If   End Function				

Centralizar el control de código de error

Agregar código de tratamiento de errores a su Visual Basic para aplicaciones macros, descubrirá que los mismos errores que se controlan y otra vez. Puede reducir el tamaño del código y el esfuerzo necesario para escribir código escribiendo unos procedimientos que el código de tratamiento de errores puede llamar a para controlar las situaciones de error comunes.

El siguiente es un ejemplo de un procedimiento de función que muestra un mensaje correspondiente al error que ocurrió y cuando sea posible, permite al usuario especificar qué acción tomar siguiente eligiendo un botón determinado. A continuación, devuelve el número código al procedimiento que lo llamó.
   Public Const RESUME_STATEMENT = 0   'Resume   Public Const RESUME_NEXT = 1        'Resume Next   Public Const UNRECOVERABLE = 2      'Unrecoverable error   Public Const UNRECOGNIZED = 3       'Unrecognized error   Public Const ERR_DEVICEUNAVAILABLE = 68   Public Const ERR_BADFILENAMEORNUMBER = 52   Public Const ERR_PATHDOESNOTEXIST = 76   Public Const ERR_BADFILEMODE = 54   Function FileErrors(errVal As Integer) As Integer   Dim MsgType As Integer, Msg As String, Response As Integer      MsgType = vbExalamation      Select Case errVal         Case ERR_DEVICEUNAVAILABLE     'Error #68            Msg = "That device is unavailable."            MsgType = MsgType + vbAbortRetryIgnore         Case BADFILENAMEORNUMBER      'Errors #64 & 52            Msg = "That filename is not valid."            MsgType = MsgType + vbOKCancel         Case PATHDOESNOTEXIST      'Error #76            Msg = "That path does not exist."            MsgType = MsgType + vbOKCancel         Case BADFILEMODE      'Error #54            Msg = "Can not open the file for that type of access."            MsgType = MsgType + vbOKCancel         Case Else            FileErrors = UNRECOGNIZED            Exit Function      End Select      Response = MsgBox(Msg, MsgType, "Disk Error")      Select Case Response         Case vbOK, vbRetry            FileErrors = RESUME_STATEMENT         Case vbIgnore            FileErrors = RESUME_NEXT         Case vbCancel, vbAbort            FileErrors = UNRECOVERABLE         Case Else            FileErrors = UNRECOGNIZED      End Select   End Function				

Interrupciones de control de usuario

Un usuario puede interrumpir un procedimiento de Visual Basic para aplicaciones presionando comando+punto. Es posible deshabilitar las interrupciones para los procedimientos en las aplicaciones terminados. Sin embargo, si no deshabilita las interrupciones de usuario en el procedimiento terminado, puede asegurarse de que el procedimiento es una notificación cuando se ha producido una interrupción para que puedan cerrar archivos, desconectar de recursos compartidos o restaurar variables modificadas antes de devolver el control de la aplicación para el usuario.

Puede interceptar las interrupciones de usuario en los procedimientos estableciendo la propiedad EnableCancelKey en xlErrorHandler . Cuando esta propiedad está establecida, todas las interrupciones generará un tiempo de ejecución número de error 18, se puede interceptar mediante una instrucción On Error . Puede controlar el error para detener el procedimiento y salir del programa. Si se utiliza la instrucción Resume para continuar el procedimiento después de un error en tiempo de ejecución Respiradero, se omitirá la interrupción.

También es posible omitir completamente las interrupciones del usuario estableciendo la propiedad EnableCancelKey en xlDisabled . En este estado, Excel para Mac omite todos los intentos por el usuario para interrumpir el procedimiento en ejecución. Para restaurar la interrupción predeterminado de procesamiento, cambiar la configuración de la propiedad EnableCancelKey a xlInterrupt . Para impedir que un procedimiento deshabilite permanentemente las interrupciones de usuario, Excel para Mac restaura siempre la configuración predeterminada de la propiedad EnableCancelKey a xlInterrupt cada vez que el procedimiento finaliza su ejecución. Para asegurarse de que las interrupciones se controlan correctamente dentro del código, debe deshabilitar explícitamente o interceptar las interrupciones cada vez que se ejecuta el procedimiento. Debe tenerse en cuenta ese controlador de solo interrupción se puede utilizar para cada procedimiento y que el mismo controlador sirve para todos los errores de tiempo de ejecución encontrados por ese procedimiento.

En el ejemplo siguiente se muestra un procedimiento que requiere un gran período de tiempo en completarse. Si un usuario interrumpe el procedimiento, se intercepta un error. La interrupción de usuario confirma primero que el procedimiento realmente se detiene y, a continuación, sale del procedimiento de manera ordenada.
   Sub ProcessData()      'Set up a user interrupt trapping as a run-time error      On Error GoTo UserInterrupt      Application.EnableCancelKey = xlErrorHandler      'Start a long duration task      For x = 1 to 1000000         For y = 1 to 10         Next y      Next x      Exit Sub   UserInterrupt:      If Err = 18 Then         If MsgBox ("Stop processing records?", vbYesNo) = vbNo Then            'Continue running at the point procedure was interrupted            Resume         Else            'Handle other errors that occur            MsgBox Error(Err)         End If      End If   End Sub				
si ejecutar la macro ProcessData y, a continuación, presione rápidamente CTRL+INTER, aparecerá un cuadro de mensaje que le pregunta si desea detener procesamiento de registros. Si hace clic en , aparece otro cuadro de mensaje con "se produjo la interrupción de usuario". Si hace clic en Aceptar en este cuadro de mensaje, se finaliza la macro. Si hace clic en no en el primer cuadro de mensaje, la macro continúa.

Instrucción Resume

La instrucción Resume reanuda la ejecución de código después de que ha terminado un error de rutina de control.
XL98 XL2001 XL2004 XLX

Advertencia: este artículo se tradujo automáticamente

Propiedades

Id. de artículo: 193247 - Última revisión: 12/05/2015 09:21:13 - Revisión: 5.4

Microsoft Excel 2004 for Mac, Microsoft Excel X para Macintosh, Microsoft Excel 2001 para Macintosh, Microsoft Excel 98 para Macintosh

  • kbnosurvey kbarchive kbmt kbdtacode kbhowto KB193247 KbMtes
Comentarios