MS-Access, VBA y manejo de errores

Esta es más una observación que una pregunta real: MS-Access (y VBA en general) está perdiendo una herramienta desesperada donde el código de manejo de errores puede generarse automáticamente, y donde el número de línea se puede mostrar cuando ocurre un error. ¿Encontraste una solución? ¿Qué es? Me di cuenta de cuántos cientos de horas perdoné desde que encontré la respuesta correcta a este problema básico hace unos años, y me gustaría ver cuáles son sus ideas y soluciones sobre este tema tan importante.

¿Qué pasa con el uso de “Erl”, se mostrará la última etiqueta antes del error (por ejemplo, 10, 20 o 30)?

Private Sub mySUB() On Error GoTo Err_mySUB 10: Dim stDocName As String Dim stLinkCriteria As String 20: stDocName = "MyDoc" 30: DoCmd.openform stDocName, acFormDS, , stLinkCriteria Exit_mySUB: Exit Sub Err_mySUB: MsgBox Err.Number & ": " & Err.Description & " (" & Erl & ")" Resume Exit_mySUB End Sub 

Bueno, hay un par de herramientas que harán lo que pidas MZ Tools y FMS Inc vienen a la mente.

Básicamente implican agregar un:

 On Error GoTo ErrorHandler 

a la parte superior de cada proceso y al final ponen un:

 ErrorHandler: Call MyErrorhandler Err.Number, Err.Description, Err.LineNumber 

etiquetar con generalmente una llamada a un controlador de error global donde puede visualizar y registrar mensajes de error personalizados

Mi solución es la siguiente:

  1. instala MZ-Tools , un complemento muy interesante para VBA. No, no me pagaron, de todos modos es gratis.
  2. programe un código de controlador de errores estándar como este (consulte el menú de herramientas MZ / Opciones / Manejador de errores):

 On Error GoTo {PROCEDURE_NAME}_Error {PROCEDURE_BODY} On Error GoTo 0 Exit {PROCEDURE_TYPE} {PROCEDURE_NAME}_Error: debug.print "#" & Err.Number, Err.description, "l#" & erl, "{PROCEDURE_NAME}", "{MODULE_NAME}" 

Este código de error estándar se puede agregar automáticamente a todos sus procesos y función haciendo clic en el botón correspondiente en el menú MZ-Tools. Notarás que nos referimos aquí a un valor / propiedad indocumentado de VBA (edición de 2003), ‘erl’, que significa ‘línea de error’. ¡Lo tienes! Si le pides a MZ-Tools que numere automáticamente tus líneas de código, ‘erl’ te dará el número de la línea donde ocurrió el error. Tendrás una descripción completa del error en tu ventana inmediata, como por ejemplo:

 #91, Object variable or With block variable not set, l# 30, addNewField, Utilities 

Por supuesto, una vez que se da cuenta del interés del sistema, puede pensar en un manejador de errores más sofisticado, que no solo mostrará los datos en la ventana de depuración, sino que también:

  1. mostrarlo como un mensaje en la pantalla
  2. Inserte automáticamente una línea en un archivo de registro de error con la descripción del error o
  3. si está trabajando con Access o si está conectado a una base de datos, ¡agregue automáticamente un registro a una tabla Tbl_Error!

lo que significa que cada error generado en el nivel de usuario se puede almacenar en un archivo o una tabla, en algún lugar de la máquina o de la red. ¿Estamos hablando de construir un sistema automatizado de reporte de errores trabajando con VBA?

Siempre puede rodar su propia herramienta como lo hizo Chip Pearson . VBA puede acceder a su propio IDE a través de la Biblioteca de Microsoft Visual Basic para Extensibilidad de Aplicaciones 5.3 . He escrito algunos módulos de clase que hacen que sea más fácil trabajar conmigo mismo. Se pueden encontrar en Code Review SE .

Lo uso para insertar sentencias On Error GoTo ErrHandler y las tags y constantes apropiadas relacionadas con mi esquema de manejo de errores. También lo uso para sincronizar las constantes con los nombres de los procedimientos reales (si los nombres de las funciones cambian).