Técnicas de control y depuración de errores (2ª parte)

VBA dispone dentro de su categoria de objetos de uno de especial aplicación para el tratamiento de errores: el objeto Err(). Este permite alamacenar información en tiempo de ejecución sobre los errores que puedan presentarse apareciendo cuando se realice una operación no válida. Los atributos o propiedades se especifican por quien genera el error.  Veamos una descripción de cada uno:

PROPIEDADES

Description (Propiedad) Lectura y escritura. Devuelve o establece una cadena descriptiva asociada a un error.
Erl (Propiedad) Sólo lectura. Devuelve un entero que indica el número de línea de la última instrucción ejecutada.
HelpContext (Propiedad) Lectura y escritura. Devuelve o establece un Integer que contiene el identificador de contexto de un tema de un archivo de Ayuda.
HelpFile (Propiedad) Lectura y escritura. Devuelve o establece una expresión String que contiene la ruta de acceso completa a un archivo de Ayuda.
LastDLLError (Propiedad) Sólo lectura. Devuelve un código de error proveniente del sistema y producido por una llamada a la biblioteca de enlaces dinámicos (DLL).
Number (Propiedad) Lectura y escritura. Devuelve o establece un valor numérico que especifica un error.
Source (Propiedad) Lectura y escritura. Devuelve o establece una expresión String que especifica el nombre del objeto o de la aplicación que generó originalmente el error.

METODOS

Clear (Método) Borra todos los valores de las propiedades del objeto Err.
Raise (Método) Genera un error en tiempo de ejecución. Se puede utilizar en lugar de la instrucción Error.

Veamos un ejemplo del mismo, en él vamos a generar un error por desbordamiento en tiempo de ejecución y después vamos a presentar el mensaje correspondiente:

Sub ejemplo_error()
Dim Msg As String
‘ Si se presenta un error construimos un mensaje informativo del mismo
On Error Resume Next
Err.Clear ‘borramos cualquier objeto error
Err.Raise (6)  ‘ generamos un error por desbordamiento
‘ comprobamos que se ha dado el error y presentamos el mensaje
If Err.Number <> 0 Then
  Msg = “Error” & Str(Err.Number) & ” ha sido generado por ” _
      & Err.Source & Err.Description
  MsgBox Msg, vbCritical, “Error”
End If

End Sub

En el ejemplo ha podido ver el uso del evento Clear se utiliza para borrar explícitamente el objeto Err una vez que se ha controlado un error, como ocurre cuando se usa el control diferido de errores con On Error Resume Next. Yel evento Raise genera un error en tiempo de ejecución.

Como ya dije en la primera parte de este capítulo, se nos pueden presentar diversos tipos de errores. Hemos podido analizar algunas técnicas que nos facilita el manejo de los mismos. Pero a la hora de programar el editor VBA nos aporta otras herramientas que nos ayudan cuando estamos programando a depurar nuestro código. Recordemos que al principio establecimos los cuatro tipos fundamentales de error que se pueden dar:

  • de sintáxis
  • de compilación
  • de ejecución
  • de lógica

Los errores de sintáxis se detectan  directamente a medida que se introduce el código. VBA tiene una herramienta de comprobación de sintáxis que viene activada por defecto. No obstante para activarlo vaya a Herramientas>Opciones>ficha editor>Comprobación de sintáxis automática. Los errores de sintáxis que no se corrigan provocan un error de ompilación.

Los errores de compilación dijimos que se generan cuando se compila el programa, es decir, cuando se traduce a lenguaje máquina el código que hemos escrito.

Cuando Excel trata de ejecutar un código y detecta un procedimiento, una instrucción o una operación inválida se produce un error de ejecución, por ejemplo cuando estamos haciendo una llamada a una Hoja 4 siendo que esta no existe.

Los más complicados de detectar serían los errores de lógica, entre otros aquellos imputables al propio programador. Para entendernos aquellos insertos en nuestro propio algoritmo que da lugar a errores inesperados. Para este tipo de error VBA dispone de una herramienta de  depuración que permiten la ejecución del código paso a paso comprobando los procedimientos y valores de las variables. Para acceder a la misma puede activarla desde la barra de menú>Ver>barra de Herramientas>Depuración.

Una vez que la active le saldrá una barra de herramientas con unos iconos: las cuatro primeras leidas de izquierda a derecha ya las conoce, fijémonos en el icono de una mano “alternar punto de interrupción”. En ocasiones, puede interesar poner en ejecución un programa e interrumpirlo en una línea específica. Esto es posible mediante los llamados puntos de interrupción, que se adjuntan a la línea específica en la cual se desea detener la ejecución. De este modo, cuando el curso de ejecución del programa llegue a la línea, éste se  detendrá, es decir, la línea con punto de interrupción quedará pendiente y sin ejecutar; en ese momento, la aplicación  donde se ha creado el módulo pasa de Modo Ejecución a Modo Interrupción.

Tras la interrupción, se podrá las siguientes acciones:

  • evaluar las variables que están siendo utilizadas a través de la ventana Inspección
  • ver el curso exacto de ejecución del código, es decir, la secuencia de acciones que se realizan

Más a la derecha de la barra encontrá una serie de iconos que activan diversas ventanas, una de ellas es la ventana Locales que nos muestra todas las variables y parámetros involucrados en una función o procedimiento.

La ventana Inmediato se utiliza en tiempo de diseño para depurar y evaluar expresiones, ejecutar instrucciones, imprimir valores de variables, etc. Permite escribir expresiones que el lenguaje de programación evalúa o ejecuta durante la depuración.

 

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: