VBA - Access
Entrega
Gestin de errores
Eduardo Olaz
11
11 - 2
Errores
La gestin de los errores en procedimientos
A la hora de utilizar el cdigo de un mdulo, hay dos tiempos
Tiempo de Diseo.
Tiempo de Ejecucin.
eduardo@olaz.net
Eduardo Olaz
Entrega 11
Gestin de errores
11 - 3
Esta pre-compilacin revisa todo el cdigo, e incluso posibles procedimientos que no seran
utilizados durante la ejecucin del programa. Esto nos da ms garanta sobre la calidad del
cdigo y nos protege frente a ciertos tipos de error que de otra forma no podramos detectar.
Errores en Tiempo de Ejecucin
Hay una serie de errores que se pueden producir durante la ejecucin del cdigo, que no
son de sintaxis ni originados por cdigo incompleto o declaraciones inadecuadas.
Son, por ejemplo los errores provenientes de valores no previstos por el cdigo pasados ya
sea por el propio usuario extrados de tablas, ficheros u otras fuentes de origen.
Son los tpicos errores de Tiempo de Ejecucin.
Supongamos que tenemos que dividir entre s dos cantidades; si el denominador vale cero,
nos dar un error de divisin entre cero.
Podra ocurrir que no hayamos previsto que un cuadro de texto contuviera el valor Null.
Esto nos podra generar error al intentar asignar este valor a una cadena de texto.
Tambin podra ocurrir que en una expresin por la que queremos asignar el resultado de
una operacin a una variable, ese resultado superara el rango admisible por el tipo de la
variable, con lo que tendramos un error de Desbordamiento.
Un programa profesional debe adelantarse a todas estas posibilidades.
Por ejemplo, si tenemos que dividir dos nmeros, se debera comprobar que el denominador
no contuviese el valor Cero.
Comencemos a programar con VBA - Access
11 - 4
Realizar todo tipo de filtros en el cdigo para evitar que llegue a darse una situacin
de error
En caso de que el error se produzca, capturarlo y darle una respuesta civilizada.
Para capturar un error, VBA utiliza la ms denostada, criticada y repudiada de las sentencias
de cdigo. Es la sentencia Goto.
Es la instruccin de salto que nos faltaba por ver en las dos entregas anteriores.
eduardo@olaz.net
Eduardo Olaz
Entrega 11
Gestin de errores
11 - 5
Instrucciones de salto.
La Instruccin Goto
Cuando el cdigo se encuentra con esta sentencia realiza un salto incondicional.
Su sintaxis tiene esta estructura:
GoTo lnea
Lnea puede ser una Etiqueta de lnea un nmero de lnea.
Observa este cdigo
GoTo Etiqueta_01
Salta a la etiqueta sin ejecutar la lnea intermedia.
GoTo 10
Salta a la lnea precedida por el nmero 10.
Gosub - - Return
Es otra instruccin de salto, de la cual slo voy a comentar que existe por compatibilidad con
las antiguas versiones de Basic.
Si alguien quiere ms informacin puede acudir a la ayuda de VBA.
Personalmente desaconsejo completamente su uso, ya que en VBA existen alternativas ms
eficientes y claras.
La utilizacin de Goto y Gosub se desaconseja ya que pueden convertir el cdigo en una
sucesin de saltos de canguro imposible de seguir de una forma coherente.
11 - 6
Capturar Errores
Ya hemos comentado que durante la ejecucin de una aplicacin pueden producirse
diversos tipos de errores, como rangos de valores no vlidos, divisin por cero,
manipulacin de un elemento de una matriz, coleccin, o un fichero que no existan, etc.
Si prevemos que en un procedimiento pudiera producirse un error, para poder gestionarlo,
pondremos en su cabecera o en un punto anterior al lugar donde el error se pudiera generar,
la sentencia:
El objeto Err
Este objeto contiene la informacin de los errores que se producen en tiempo de ejecucin.
Cuando se produce un error, el objeto o el procedimiento que lo ha generado puede asignar
datos a sus propiedades.
Las propiedades ms importantes, o las que en este nivel nos interesan ms, son:
Number
Description
Source
HelpFile
LastDLLError
La propiedad Number contiene un nmero que sirve como identificador del error.
Description incluye una cadena de texto que nos sirve para interpretar las
caractersticas del error.
Eduardo Olaz
Entrega 11
Gestin de errores
11 - 7
Error n 11
Divisin por cero
Entrega11
Para usar las propiedades del objeto Err, se utiliza la misma sintaxis que para otros objetos
NombreObjeto.Propiedad
La instruccin Resume
Hace que la ejecucin del cdigo contine en una lnea determinada, tras gestionar un error.
En el ejemplo anterior Resume Salir hace que el cdigo vaya a la lnea marcada con la
etiqueta Salir:
La ejecucin de
Resume Salir
har que se salga del procedimiento.
Despus de la palabra Resume, puede ponerse una etiqueta un nmero de lnea.
En ambos casos se producir una salto hasta la lnea especificada.
Si se pusiera
Resume
Resume 0
Resume Next
Se ejecutar la lnea siguiente a aqulla en la que se produjo el error se llam al
procedimiento para la gestin de errores.
11 - 8
En la parte de la izquierda nos muestra un ejemplo de los iconos que se podran poner en el
botn.
Eduardo Olaz
Entrega 11
Gestin de errores
11 - 9
11 - 10
Como hemos visto, cuando usamos un asistente para controles de Access, en el cdigo
generado se suele colocar un segmento para la gestin de errores.
Este cdigo escrito por Access lo podemos cambiar; por ejemplo podramos sustituir
Exit_cmdSalir_Click por Salir, Err_NombreDelProcedimiento por
hayError, e incluso lo podramos quitar, si estuviramos seguros de que nunca se podra
llegar a producir un error o ya tuviramos desarrollado nuestro propio sistema para la
gestin de errores.
Gestionando errores
Supongamos que nos han encargado un programa para visualizar en un formulario el
contenido, en formato texto, de los ficheros que seleccionemos.
Para especificar el fichero que se va a visualizar nos piden que su nombre, incluida su ruta,
se escriba en un cuadro de texto.
Tras esto, y presionar un botn, su contenido se mostrar en un segundo cuadro de texto.
Se decide seleccionar un cuadro de texto como soporte, con el fin de que se puedan
seleccionar y copiar segmentos del texto del contenido de los ficheros.
Debo aclarar que no todo el contenido de un fichero cualquiera se podr mostrar en
un cuadro de texto. Si el fichero es de tipo Binario, grficos, ficheros exe
multimedia, habr caracteres que no se muestren que tengan secuencias
ininteligibles.
Como ya habamos escrito previamente un procedimiento para mostrar el contenido de
ficheros (MuestraFichero del captulo anterior) vamos a aprovecharlo, con algunas
modificaciones para adaptarlo a los nuevos requerimientos.
El nuevo procedimiento exigir que se le pase como parmetro un cuadro de texto; en este
caso con nombre Pizarra, que ser donde se ir escribiendo el contenido del fichero
mientras se vaya leyendo.
Adems le aadiremos un control de errores, ya que podra ocurrir que no se pudiera abrir el
fichero por no existir, o porque estuviera abierto en modo exclusivo por algn usuario.
Eduardo Olaz
Entrega 11
Gestin de errores
11 - 11
Pizarra.Value = ""
Resume Salir
End Sub
Creamos un nuevo formulario y le aadimos los siguientes elementos
Control
Nombre
Cuadro de texto
txtFichero
Cuadro de texto
txtContenido
Botn
cmdVerFichero
El cuadro de texto txtFichero servir para introducir el nombre completo del fichero a
visualizar.
En txtContenido mostraremos el contenido del fichero.
El botn cmdVerFichero activar el procedimiento que sirve para mostrar el contenido
del fichero. La llamada al procedimiento lo colocaremos en el evento Al hacer clic del botn
cmdVerFichero.
Usaremos el procedimiento MuestraFichero al que le pasaremos como parmetro el
control txtContenido.
En el cuadro de texto txtContenido activamos la Barra Vertical en la propiedad Barras
de Desplazamiento.
En el evento Al hacer clic del botn escribiremos lo siguiente:
11 - 12
Error n 666
Se ha producido el error: Houston! Tenemos un problema
en el procedimiento: GenerarError
eduardo@olaz.net
Eduardo Olaz