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.Pero ese código tiene un punto débil. La comprobación de que el contenido del cuadrode texto sea numérico que utilizamos antes de implementar la conversión de las unidades de la base de datosa las unidades del dibujo ya no valdrÃa pues si introducimos caracteres no numéricos esto provocará un erroren el método GetValueFromExpression. Este error se encuentra dentro del grupo de los errores interceptablesque pueden ocurrir durante la ejecución de una aplicación. Algunos de estos errores pueden ocurrir tambiéndurante el periodo de desarrollo o durante la compilación. Podemos comprobar y responder a estos erroresinterceptables 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 cuentaque la comprobación no dependerá ahora de la función IsNumeric, sino que bastarÃa comprobar si se produceerror en el método GetValueFromExpression para saber que el valor que se introdujo no es válido. Esto noslleva 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 queno se interrumpa el flujo del programa. Esto lo podemos lograr con la expresión On Error Resume Next. Estaexpresión especifica que, en caso de que se produzca un error en tiempo de ejecución, el control pase a lainstrucción que sigue inmediatamente a aquélla en la que se ha producido el error, donde continúa laejecución. Se recomienda utilizar este formato en lugar de On Error GoTo cuando, como en nuestro caso, seacceda a objetos.
La instrucción siguiente deberá comprobar si se ha producido un error y opcionalmente cuál ha sido. Estopuede saberse a partir del número de error que se obtiene a partir de la propiedad Number del objeto Err. Encaso de no haberse producido errores, el número de error es igual a cero. Como en nuestro caso bastacomprobar si se ha producido el error, comprobaremos si Err.Number <> 0. Se debe tener la precaución deantes de llegar a la expresión donde esperamos se produzca el error restablecer el estado inicial del objetoErr, lo que se logra empleando su método Clear. Ver el código de la Figura 4 para un ejemplo de laimplementación de este 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 elcuadro de modificación de parámetros al abrir el documento. Para ello podemos recurrir a las MacrosAutomáticas.
Macros Automáticas.
Las Macros Automáticas son macros que se ejecutan de manera automática al ocurrir determinados eventosen Autodesk Inventor. Una macro automática es similar a cualquier otra macro excepto por su nombre. Paracrear una macro automática basta renombrar una macro cualquiera para que su nombre incluya cualquierade las cadenas de caracteres que identifican las macros automáticas. Según el nombre de la macro ésta seejecutará de manera automática al ocurrir el evento asociado. Sólo es posible definir macros automáticas enlos 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 nombrede la macro y no se distingue entre letras mayúsculas y minúsculas. Los siguientes nombres serÃan válidospara 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ónserá arbitrario. Si el usuario pulsa la tecla Mayúsculas (Shift) cuando se produce el vento la macro automáticaasociada 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 seabre un documento. Esto ocurre cuando se abre de manera explÃcita el documento y también cuando se abreun conjunto en el que se incluye una referencia al documento como parte de ese conjunto. AutoEdit tambiénse dispara en el primer caso, ya que al abrir un documento éste queda disponible para su edición. Sinembargo, no se dispara en el segundo caso ya que el documento referenciado no es el que se está editandoen ese momento, sino el del conjunto. Si estando dentro del documento de conjunto se activara la parte parasu edición, serÃa entonces que se ejecutarÃa la macro automática AutoEdit, al quedar disponible para suedición el documento.