这更像是一个观察而不是一个真实的问题:MS-Access(以及一般的VBA)极度缺少一个可以自动生成错误处理代码的工具,以及发生错误时可以显示行号的工具.你找到了解决方案吗?它是什么?我刚刚意识到,自从几年前我找到了解决这个基本问题的正确答案以来,我有多少个小时,我希望看到你在这个非常重要的问题上有什么想法和解决方案.
如何使用"Erl",它会显示错误之前的最后一个标签(例如10,20或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
我的解决方案如下:
安装MZ-Tools,这是一个非常有趣的VBA附加组件.不,他们没有付我写这个.版本3是免费的,但自8.0版以来,该插件已在商业上出售.
编写一个标准的错误处理程序代码,例如这个(参见MZ-Tools菜单/选项/错误处理程序):
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}"
然后,通过单击MZ-Tools菜单中的相应按钮,可以将此标准错误代码自动添加到所有过程和功能中.你会注意到我们在这里引用VBA标准库中的隐藏和未记录的函数,'Erl',它代表'错误行'.你说对了!如果您要求MZ-Tools自动为您的代码行编号,那么'Erl'将为您提供发生错误的行号.您将在即时窗口中获得错误的完整描述,例如:
#91, Object variable or With block variable not set, l# 30, addNewField, Utilities
当然,一旦你意识到系统的兴趣,你就可以想到一个更复杂的错误处理程序,它不仅会在调试窗口中显示数据,还会:
将其显示为屏幕上的消息
自动在错误日志文件中插入一行,其中包含错误或的描述
如果您正在使用Access或者如果您连接到数据库,则自动将记录添加到Tbl_Error表中!
意味着在用户级别生成的每个错误都可以存储在文件或表中,机器或网络上的某个位置.我们是否正在讨论构建与VBA一起使用的自动错误报告系统?
那么有一些工具可以满足您对MZ Tools和FMS Inc的想法.
基本上他们涉及添加:
On Error GoTo ErrorHandler
到每个过程的顶部,最后他们把:
ErrorHandler: Call MyErrorhandler Err.Number, Err.Description, Err.LineNumber
标签通常调用全局错误处理程序,您可以在其中显示和记录自定义错误消息