2013-02-09 40 views
7

我一直在Excel中使用VBA,并对所有的程序使用自定义错误处理程序。我第一次发现自己需要使用Err.Raise(以处理Select Case块中的Case Else情况),并且我无法弄清楚如何将错误传递给自定义错误处理程序。 VBA不会将引发的错误传递给自定义处理程序,而是弹出自己丑陋而且相当无用的错误对话框。如果有人能告诉我一种解决这个问题的方法,我会非常感激。如何将引发的错误传递给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 

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

enter image description here

+5

适合我。这可能是因为你在工具>>选项>>常规选项卡 – 2013-02-09 00:53:49

+0

下在VBE中设置了“所有错误”。就是这样。谢谢蒂姆。 – Lokerim 2013-02-09 00:55:26

回答

6

蒂姆在他的评论中指出,答案是,VBA IDE是配置为打破所有错误。改变它以打破未处理的错误只给了我想要的行为。

enter image description here

相关问题