2.5. Gestión de Errores y Ejecución Automática

Gestión de errores.

En el tema 2.2.4. mostrábamos el código siguiente para el evento BeforeUpdate que incluía la conversión a unidades del documento.

Figura 1. Código para el evento AfterUpdate propuesto en el tema anterior.

Pero ese código tiene un punto débil. La comprobación de que el contenido del cuadro de texto sea numérico que utilizamos antes de implementar la conversión de las unidades de la base de datos a las unidades del dibujo ya no valdría pues si introducimos caracteres no numéricos esto provocará un error en el método GetValueFromExpression. Este error se encuentra dentro del grupo de los errores interceptables que pueden ocurrir durante la ejecución de una aplicación. Algunos de estos errores pueden ocurrir también durante el periodo de desarrollo o durante la compilación. Podemos comprobar y responder a estos errores interceptables mediante la instrucción On Error y el objeto Err.

De aquí que debamos cambiar el procedimiento para esta validación inicial de los datos, teniendo en cuenta que la comprobación no dependerá ahora de la función IsNumeric, sino que bastaría comprobar si se produce error en el método GetValueFromExpression para saber que el valor que se introdujo no es válido. Esto nos lleva a la necesidad de implementar el control de errores.

Como dependemos de que se produzca el error para comprobar el dato, lo primero que debemos lograr es que no se interrumpa el flujo del programa. Esto lo podemos lograr con la expresión On Error Resume Next. Esta expresión especifica que, en caso de que se produzca un error en tiempo de ejecución, el control pase a la instrucción que sigue inmediatamente a aquélla en la que se ha producido el error, donde continúa la ejecución. Se recomienda utilizar este formato en lugar de On Error GoTo cuando, como en nuestro caso, se acceda a objetos.

La instrucción siguiente deberá comprobar si se ha producido un error y opcionalmente cuál ha sido. Esto puede saberse a partir del número de error que se obtiene a partir de la propiedad Number del objeto Err. En caso de no haberse producido errores, el número de error es igual a cero. Como en nuestro caso basta comprobar si se ha producido el error, comprobaremos si Err.Number <> 0. Se debe tener la precaución de antes de llegar a la expresión donde esperamos se produzca el error restablecer el estado inicial del objeto Err, lo que se logra empleando su método Clear. Ver el código de la Figura 4 para un ejemplo de la implementación de este control de errores.

Figura 2. Código para el evento BeforeUpdate que implementa el control de errores.

Activar la Macro al abrir el Documento.

La última de las mejoras propuestas al inicio de este ejercicio era la de mostrar de manera automática el cuadro de modificación de parámetros al abrir el documento. Para ello podemos recurrir a las Macros Automáticas.

Macros Automáticas.

Las Macros Automáticas son macros que se ejecutan de manera automática al ocurrir determinados eventos en Autodesk Inventor. Una macro automática es similar a cualquier otra macro excepto por su nombre. Para crear una macro automática basta renombrar una macro cualquiera para que su nombre incluya cualquiera de las cadenas de caracteres que identifican las macros automáticas. Según el nombre de la macro ésta se ejecutará de manera automática al ocurrir el evento asociado. Sólo es posible definir macros automáticas en los Proyectos de Documento.

Si el nombre de una macro contiene, por ejemplo, la cadena de caracteres "AutoOpen", ésta se ejecutará automáticamente al abrir el documento. Esta cadena de caracteres puede estar al inicio o al final del nombre de la macro y no se distingue entre letras mayúsculas y minúsculas. Los siguientes nombres serían válidos para macros automáticas que se ejecutaran al abrir el documento: AutoOpen1, autooPEn2, NuevoAutoOpen, autoopen3, o TestautoOpen4.

Public Sub autoOpen_modParametros()
     frmparams.Show
End Sub

Es posible incluso crear varias macros automáticas para un mismo evento, aunque el orden de su ejecución será arbitrario. Si el usuario pulsa la tecla Mayúsculas (Shift) cuando se produce el vento la macro automática asociada no se ejecutará.

AutoOpen : 	Se ejecuta al abrir el documento. 

AutoNew : Se ejecuta cuando se crea un Nuevo documento a partir de
una plantilla. La macro debe estar incluida en el proyecto
de documento de la plantilla.

AutoSave : Se ejecuta cada vez que se guarda el documento.
 
AutoClose : Se ejecuta al cerrar el documento.
 
AutoEdit : Se ejecuta cuando se abren o editan partes o sub-conjuntos
(sub-assemblies).

El comportamiento de AutoOpen y el de AutoEdit presentan diferencias. AutoOpen se dispara cada vez que se abre un documento. Esto ocurre cuando se abre de manera explícita el documento y también cuando se abre un conjunto en el que se incluye una referencia al documento como parte de ese conjunto. AutoEdit también se dispara en el primer caso, ya que al abrir un documento éste queda disponible para su edición. Sin embargo, no se dispara en el segundo caso ya que el documento referenciado no es el que se está editando en ese momento, sino el del conjunto. Si estando dentro del documento de conjunto se activara la parte para su edición, sería entonces que se ejecutaría la macro automática AutoEdit, al quedar disponible para su edición el documento.