VBAerror handling:捕获和重新抛出不传播

我正在研究一个相当大的VBA应用程序,并希望确保我能够很好地处理错误。

在我的调用子/函数我想赶上错误,并将其传递给全局error handling程序。

我的解决scheme是基于: Dymeng – Rethrow Errors和ExcelMacroMastery

全局error handling程序构build调用堆栈,然后重新引发错误。

我遇到的问题是重新提高全局error handling程序上的错误不返回到调用上下文的程序stream,而是显示一个VBA错误模式。

在下面的示例中,SQL查询尝试插入具有重复索引的行。 这会触发PRIMARY KEY约束错误的冲突。

全局error handling程序(在模块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上debuggingdebugging器时停止

为什么控制不能返回到查询function,我该如何解决?

谢谢。

对不起,我的小白痴!

我有错误陷阱设置为在类模块中断 。 一旦我改变了这种情况,就可以解决无用的错误