【问题标题】:How do I pass a raised error to a custom error handler in VBA?如何将引发的错误传递给 VBA 中的自定义错误处理程序?
【发布时间】:2013-01-24 20:54:09
【问题描述】:

我在 Excel 中使用 VBA 已经有一段时间了,我对所有程序都使用了自定义错误处理程序。我第一次发现自己处于需要使用Err.Raise 的位置(处理Select Case 块中的Case Else 情况)。我不知道如何将错误传递给自定义错误处理程序。 VBA 没有将引发的错误传递给自定义处理程序,而是弹出自己的丑陋且相当无用的错误对话框。如果有人能告诉我解决此问题的方法,我将不胜感激。

下面是我正在使用的代码的通用版本(函数/变量名称已更改以保护无辜者)。 gErrorHandler 对象是一个全局维度的类模块变量,它处理来自任何和所有过程的错误。

Public Function MyFunction(dblInputParameter As Double) As Double
On Error GoTo Err_MyFunction

    Dim dblResult as Double

    Select Case dblInputParameter 

        ...Several case statements go here...

        Case Else
            Err.Raise vbObjectError + 1000, "MyProjectName.MyObjectName", "Error Description"

    End Select

    MyFunction = dblResult

Exit_MyFunction:
    Exit Function

Err_MyFunction:
    gErrorHandler.DisplayError Err.Number, Err.Description, Erl, csModule, "basMyModuleName", "MyFunction"
    Resume Exit_MyFunction

End Function

这是我得到的错误对话框,而不是将错误传递给自定义处理程序:

【问题讨论】:

  • 为我工作。可能是您在 VBE 中的工具>>选项>>常规选项卡下设置了“中断所有错误”
  • 就是这样。谢谢蒂姆。

标签: vba excel


【解决方案1】:

正如 Tim 在他的评论中指出的那样,答案是 VBA IDE 被配置为中断所有错误。将其更改为在未处理的错误上中断只会给我想要的行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    • 2014-11-13
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 2017-12-18
    相关资源
    最近更新 更多