Select the product you need help with
Interceptación de errores con Visual Basic para AplicacionesId. de artículo: 146864 - Ver los productos a los que se aplica este artículo En esta páginaResumen Cuando se produce un error en tiempo de ejecución en una
macro de Microsoft Visual Basic para Aplicaciones, aparece un mensaje de error
en la pantalla y la macro se detiene o se comporta de forma imprevisible.
Para evitar que la aplicación se bloquee o se comporte de forma imprevisible, puede incluir código de macro que intercepte el error e indique a la macro cómo debe controlarlo. 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 a la aplicación cómo controlar el error se denomina "rutina de control de errores" o "controlador de errores". Más informaciónMicrosoft proporciona ejemplos de programación con fines
ilustrativos únicamente, sin ninguna garantía, ya sea expresa o implícita. Esto
incluye, entre otras, las garantías implícitas de comerciabilidad e idoneidad
para un fin determinado. En este artículo se da por supuesto que ya conoce el
lenguaje de programación que se muestra, así como las herramientas empleadas
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 adaptados a sus necesidades específicas.
Mientras el código de Visual Basic se está ejecutando,
puede encontrar varios tipos de errores que se pueden interceptar. Puede
aprovechar la interceptación de errores de Microsoft Excel si utiliza las
funciones e instrucciones siguientes. Instrucción On ErrorLa instrucción On Error hace que Visual Basic para Aplicaciones empiece o deje de interceptar errores. La instrucción On Error también especifica un conjunto de instrucciones que se ejecutarán si se encuentra un error.Para obtener información adicional al respecto, consulte los artículos siguientes en Microsoft Knowledge Base: 141571
(http://support.microsoft.com/kb/141571/
)
Cómo usar la instrucción "On Error" para manejar errores en una macro Función ErrLa función Err devuelve el número del error encontrado.Ejemplo de uso de la función Err:
Código de error Mensaje de error ---------- ------------- 3 Return sin GoSub 5 Llamada al procedimiento no válida 6 Desbordamiento 7 Memoria insuficiente 9 Subíndice fuera de rango 10 Definición duplicada (versiones 5.0 y 7.0) 10 Esta matriz es fija o se encuentra temporalmente bloqueada (versión 97) 11 División por cero 13 No coinciden los tipos 14 Espacio para cadenas insuficiente 16 Fórmula de cadena demasiado compleja (versiones 5.0 y 7.0) 16 Expresión demasiado compleja (versión 97) 17 No se puede realizar la operación solicitada 18 Se produjo una interrupción por parte del usuario 20 Resume sin Error 28 Espacio de pila insuficiente 35 Sub o Function no definida (versiones 5.0 y 7.0) 35 Sub, Function o Property no definida (versión 97) 47 Demasiados clientes de aplicación DLL (versión 97) 48 Error al cargar la biblioteca DLL 49 Convención de llamada a archivo DLL no válida 51 Error interno 52 Nombre o número de archivo incorrecto 53 Archivo no encontrado 54 Modo de archivo incorrecto 55 El archivo ya está abierto 57 Error de E/S del dispositivo 58 El archivo ya existe 59 Longitud de registro incorrecta 61 Disco lleno 62 La entrada superó el final de línea 63 Número de registro incorrecto 67 Demasiados archivos 68 Dispositivo no disponible 70 Permiso denegado 71 Disco no preparado 74 No se puede cambiar el nombre con una unidad de disco diferente 75 Error de acceso a la ruta o al archivo 76 No se encuentra la ruta de acceso 91 Variable de objeto no establecida (versiones 5.0 y 7.0) 91 Variable de objeto o de bloque With no establecida (versión 97) 92 Bucle For no inicializado 93 Cadena modelo no válida 94 Uso no válido de Null 95 Error definido por el usuario (versiones 5.0 y 7.0 únicamente) 298 No se pudo cargar la DLL del sistema (versión 97) 320 No se pueden utilizar nombres de dispositivo de caracteres en los nombres de archivo especificados (versión 97) 321 Formato de archivo no válido (versión 97) 322 No se puede crear el archivo temporal necesario (versión 97) 323 No se puede cargar el módulo; formato no válido (versiones 5.0 y 7.0) 325 Formato no válido en archivo de recursos (versión 97) 327 No se encontró el valor de datos indicado (versión 97) 328 Parámetro no válido; no se pueden escribir matrices (versión 97) 335 No se pudo tener acceso al Registro del sistema (versión 97) 336 Componente ActiveX no registrado correctamente (versión 97) 337 Componente ActiveX no encontrado (versión 97) 338 El componente ActiveX no se ejecutó correctamente (versión 97) 360 Objeto ya cargado (versión 97) 361 No se puede cargar o descargar este objeto (versión 97) 363 El control ActiveX especificado no se encuentra (versión 97) 364 Se descargó el objeto (versión 97) 365 No se puede descargar dentro de este contexto (versión 97) 368 El archivo especificado está obsoleto. Este programa requiere una versión más reciente (versión 97) 371 El objeto especificado no puede utilizarse como una forma propietaria de Show (versión 97) 380 Valor de propiedad no válido (versión 97) 381 Índice de matriz de propiedad no válido (versión 97) 382 Property Set no se puede ejecutar en tiempo de ejecución (versión 97) 383 Property Set no se puede utilizar con una propiedad de sólo lectura (versión 97) 385 Se necesita un índice de matriz de propiedad (versión 97) 387 Property Set no permitido (versión 97) 393 Property Get no se puede ejecutar en tiempo de ejecución (versión 97) 394 Property Get no se puede ejecutar en una propiedad de sólo escritura (versión 97) 400 Formulario ya mostrado; no se puede mostrar de forma modal (versión 97) 402 El código debe cerrar primero el formulario modal superior (versión 97) 419 Denegado el permiso para utilizar el objeto (versión 97) 422 Propiedad no encontrada (versión 97) 423 No se encuentra la propiedad ni el método 424 Se requiere un objeto 425 Uso de objeto no válido (versión 97) 429 El componente ActiveX no puede crear un objeto o devolver una referencia a este objeto (versión 97) 430 La clase no admite Automatización OLE 430 La clase no admite Automatización (versión 97) 432 No se encontró el nombre del archivo o de la clase durante la operación de Automatización (versión 97)
438 El objeto no admite esta propiedad o método 440 Error de Automatización 440 Error de Automatización (versión 97) 442 Se ha perdido la conexión a la biblioteca de tipos o biblioteca de objetos para el proceso remoto (versión 97) 443 El objeto de Automatización no tiene un valor predeterminado (versión 97) 445 El objeto no acepta esta acción 446 El objeto no admite argumentos con nombre 447 El objeto no admite la configuración regional actual 448 Argumento con nombre no encontrado 449 Argumento no opcional 449 Argumento no opcional o asignación de propiedad no válida (versión 97) 450 Número incorrecto de argumentos 450 El número de argumentos es erróneo o asignación de propiedad no válida (versión 97) 451 Es un objeto, no una colección 452 Número ordinal no válido 453 No se encuentra la función de biblioteca DLL especificada 454 No se encuentra el recurso del código 455 Error al bloquear el recurso de código 457 Esta clave ya está asociada con un elemento de esta colección (versión 97) 458 La variable utiliza un tipo no compatible en Visual Basic (versión 97) 459 Este componente no admite eventos (versión 97) 460 Formato de Portapapeles no válido (versión 97) 461 El formato especificado no coincide con el formato de los datos (versión 97) 480 No se puede crear imagen AutoRedraw (versión 97) 481 Imagen no válida (versión 97) 482 Error de impresora (versión 97) 483 El controlador de impresora no admite la propiedad especificada (versión 97) 484 Problema al obtener información de impresora del sistema. Asegúrese de que la impresora esté configurada correctamente (versión 97) 485 Tipo de imagen no válido (versión 97) 486 No se puede imprimir imagen del formulario en este tipo de impresora (versión 97) 735 No se puede guardar el archivo en el directorio temporal (versión 97) 744 No se encuentra el texto de la búsqueda (versión 97) 746 Los reemplazos son demasiado largos (versión 97) 1000 nombreDeClase no tiene la propiedad nombreDePropiedad (versiones 5.0 y 7.0) 1001 nombreDeClase no tiene el método nombreDeMétodo (versiones 5.0 y 7.0) 1002 Falta un argumento necesario: nombreDeArgumento (versiones 5.0 y 7.0) 1003 Número de argumentos no válido (versiones 5.0 y 7.0) 1004 Error en el método nombreDeMétodo de la clase nombreDeClase (versiones 5.0 y 7.0) 1005 No se puede asignar la propiedad nombreDePropiedad de la clase nombreDeClase (versiones 5.0 y 7.0) 1006 No se puede obtener la propiedad nombreDePropiedad de la clase nombreDeClase
(versiones 5.0 y 7.0) 31001 Memoria insuficiente (versión 97) 31004 No hay ningún objeto (versión 97) 31018 Clase no establecida (versión 97) 31027 No se puede activar el objeto (versión 97) 31032 No se puede crear el objeto incrustado (versión 97) 31036 Error al guardar en archivo (versión 97) 31037 Error al cargar desde archivo (versión 97)
142138
(http://support.microsoft.com/kb/142138/
)
OFF: Una explicación de errores capturables en Visual Basic para Aplicaciones Función ErrorLa función Error devuelve el mensaje de error correspondiente a un número de error determinado.Ejemplo de uso de la función Error: Instrucción ErrorLa instrucción Error simula la aparición de un error permitiéndole asignar un número de error personalizado a la función Err. Estos valores de error definidos por el usuario son valores que usted define para sus procedimientos y que siempre se almacenan en variables del tipo de datos Variant. Un uso frecuente 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 cierto intervalo. Su procedimiento puede probar los argumentos que el usuario proporciona y, si los argumentos no están en el intervalo aceptable, puede hacer que el procedimiento devuelva el valor de error adecuado.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 condiciones de error. A diferencia de los errores normales en tiempo de ejecución, estos errores no interrumpen el código porque se reconocen como variables normales y no como errores. Sus procedimientos pueden comprobar estos valores de error y realizar las acciones correctivas adecuadas. También puede utilizar la instrucción Error para simular errores en tiempo de ejecución. Esto es especialmente útil cuando está probando aplicaciones o cuando desea tratar una condición determinada como equivalente a un error en tiempo de ejecución. Es posible simular cualquier error en tiempo de ejecución de Visual Basic para Aplicaciones proporcionando el código para el error en una instrucción Error. 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 corresponda a un error en tiempo de ejecución de Visual Basic para Aplicaciones. Anteriormente en este artículo se incluye una tabla que contiene una lista de los errores integrados (bajo la sección "Función Err"). Ahora, Visual Basic para Aplicaciones no utiliza todos los números disponibles para los errores integrados. En futuras versiones de Visual Basic para Aplicaciones aumentarán los números internos a medida que se agreguen más errores integrados. Se recomienda que empiece sus números de error en 50000 y que avance hasta 65535 para evitar posibles conflictos en el futuro. Ejemplo de uso de la instrucción Error para simular errores en tiempo de ejecución: Función CVErrLa función CVErr se utiliza para crear valores de error. La función CVErr toma un argumento que debe ser un entero o una variable que contenga un entero.Utilizar valores de error integradosHay siete valores de error integrados en Microsoft Excel. En la tabla siguiente se muestra el número de error (constante), el valor de error literal y el valor de error convertido.Número de error (Constante) Valor de error literal Valor de error convertido ----------------------------------------------------------------------- xlErrDiv0 [#¡DIV/0!] CVErr(xlErrDiv0) xlErrNA [#N/A] CVErr(xlErrNA) xlErrName [#¿NOMBRE?] CVErr(xlErrName) xlErrNull [#¡NULO!] CVErr(xlErrNull) xlErrNum [#¡NUM!] CVErr(xlErrNum) xlErrRef [#¡REF!] CVErr(xlErrRef) xlErrValue [#¡VALOR!] CVErr(xlErrValue) Ejemplo de uso de valores de error integrados: Centralizar el código de control de erroresCuando agregue código de control de errores a sus macros de Visual Basic para Aplicaciones, descubrirá que se controlan los mismos errores una y otra vez. Puede reducir el tamaño del código y el esfuerzo necesario para escribir código si escribe algunos procedimientos a los que el código de control de errores pueda llamar para controlar las situaciones de error frecuentes.A continuación se ofrece un ejemplo de un procedimiento de función que muestra un mensaje correspondiente al error que se ha producido y, donde sea posible, permite al usuario especificar qué acción se realizará a continuación eligiendo un botón determinado. Después devuelve el número del código al procedimiento que lo llamó. Controlar interrupciones por parte del usuarioUn usuario puede interrumpir un procedimiento de Visual Basic para Aplicaciones si presiona CTRL+INTER o ESC (COMANDO+PUNTO en Macintosh). Es posible deshabilitar las interrupciones para los procedimientos en las aplicaciones terminadas. Sin embargo, si no deshabilita las interrupciones por parte del usuario en el procedimiento terminado, puede asegurarse de que se notifica al procedimiento cuándo se ha producido una interrupción para que pueda cerrar los archivos, desconectarse de los recursos compartidos o restaurar las variables modificadas antes de devolver el control de la aplicación al usuario.Puede interceptar las interrupciones por parte del usuario en sus procedimientos si establece la propiedad EnableCancelKey en xlErrorHandler. Cuando esta propiedad está establecida, todas las interrupciones generarán un error en tiempo de ejecución número 18, que 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 con el procedimiento después de un error en tiempo de ejecución interceptado, se omitirá la interrupción. También es posible omitir completamente las interrupciones por parte del usuario si se establece la propiedad EnableCancelKey en xlDisabled. En este estado, Microsoft Excel pasa por alto todos los intentos por parte del usuario para interrumpir el procedimiento en ejecución. Para restaurar el procesamiento de interrupciones predeterminado, cambie la configuración de la propiedad EnableCancelKey a xlInterrupt. Para impedir que un procedimiento deshabilite permanentemente las interrupciones por parte del usuario, Microsoft Excel restaura siempre la configuración predeterminada de la propiedad EnableCancelKey a xlInterrupt cada vez que el procedimiento finaliza su ejecución. Para garantizar que las interrupciones se controlan correctamente dentro del código, debe deshabilitar explícitamente o interceptar las interrupciones cada vez que se ejecute el procedimiento. Hay que destacar que sólo puede utilizarse un controlador de interrupciones para cada procedimiento y que se utiliza el mismo controlador para todos los errores en tiempo de ejecución encontrados por ese procedimiento. En el ejemplo siguiente se muestra un procedimiento que necesita mucho tiempo para completarse. Si un usuario interrumpe el procedimiento, se interceptará un error. La interrupción por parte del usuario confirma primero que realmente se debe detener el procedimiento y a continuación sale del procedimiento de manera ordenada. Instrucción ResumeLa instrucción Resume reanuda la ejecución del código una vez que haya finalizado una rutina de control de errores.ReferenciasExcel 97Para obtener más información acerca de cómo interceptar errores de macro, haga clic en la ficha Índice en la Ayuda de Visual Basic para Microsoft Excel 97, escriba el textointerceptar errores y haga doble clic en el texto seleccionado para ir al tema
"Errores interceptables". Excel 7.0Para obtener más información acerca de cómo interceptar errores de macro, haga clic en la ficha Índice en la Ayuda de Microsoft Excel 7.0, escriba el textointerceptar errores y haga doble clic en el texto seleccionado para ir al tema
"Interceptación de errores". Excel 5.0En el capítulo 9, "Control de errores y valores de error", del "Manual del usuario de Visual Basic", versión 5.0, consulte los temas siguientes:
PropiedadesId. de artículo: 146864 - Última revisión: lunes, 19 de septiembre de 2011 - Versión: 3.0 La información de este artículo se refiere a:
| Seleccione idioma
|


Volver al principio








