9

我在 Excel 中使用 VBA 已经有一段时间了,我对所有程序都使用了自定义错误处理程序。我第一次发现自己处于需要使用Err.Raise(处理块Case Else中的情况Select Case)的位置。我不知道如何将错误传递给自定义错误处理程序。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

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

在此处输入图像描述

4

1 回答 1

8

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

在此处输入图像描述

于 2013-02-09T01:03:04.897 回答