VBA错误处理:捕获并重新抛弃不传播

时间:2017-09-16 13:55:23

标签: excel vba error-handling

我正在开发一个相当大的VBA应用程序,并希望确保我能够有效地处理错误。

在我的调用子/函数中,我想捕获错误并将其传递给全局错误处理程序。

我的解决方案基于: Dymeng - Rethrow ErrorsExcelMacroMastery

全局错误处理程序构建调用堆栈,然后重新引发错误。

我遇到的问题是重新引发全局错误处理程序上的错误不会将程序流返回到调用上下文,而是显示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函数,我该如何解决?

感谢。

1 个答案:

答案 0 :(得分:0)

对不起我的noob idiocy!

我将错误陷阱设置为类模块中断。一旦我将其更改为打破无法解决的错误,情况就解决了。

相关问题