我正在开发一个相当大的VBA应用程序,并希望确保我能够有效地处理错误。
在我的调用子/函数中,我想捕获错误并将其传递给全局错误处理程序。
我的解决方案基于: Dymeng - Rethrow Errors 和 ExcelMacroMastery
全局错误处理程序构建调用堆栈,然后重新引发错误。
我遇到的问题是重新引发全局错误处理程序上的错误不会将程序流返回到调用上下文,而是显示VBA错误模式。
在下面的示例中,SQL查询尝试插入具有重复索引的行。这会触发违反PRIMARY KEY约束错误。
全局错误处理程序(在模块UTIL_ErrorHandler中):
Sub HandleError (ByVal p_Error As DO_Error)
' Manipulate the error data
'...
'Clear the error and re-raise
'REMOVED in response to Wayne's answer: On Error GoTo 0
Err.Raise p_Error.Number, p_Error.Source, p_Error.Description
End Sub
调用代码(在UTIL_Database类中)
Public Function Query (ByVal p_querySQL AS String) As ADODB.RecordSet
On Error GoTo ErrHandler
'connection code...
'query code...
ExitProc:
Exit Function
ErrHandler:
Dim myError as New DO_Error
myError.Construct(Err.Number, Err.Source, Err.Description, Erl,
"UTIL_Database.Query")
UTIL_ErrorHandler.HandleError myError
Resume ExitProc
Resume
End Function
在Err.Raise上调试调试器时停止
为什么控件没有返回到Query函数,我该如何解决?
感谢。
答案 0 :(得分:0)
对不起我的noob idiocy!
我将错误陷阱设置为类模块中断。一旦我将其更改为打破无法解决的错误,情况就解决了。