2013-02-09 7 views
7

私はしばらくの間、ExcelでVBAを使用していましたが、すべての手順でカスタムエラーハンドラを使用しています。私は初めてErr.RaiseSelect 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

Works for me。 VBEのTools >> options >> general tab –

+0

で設定された "すべてのエラーで中断"があった可能性があります。ありがとう、Tim。 – Lokerim

答えて

6

ティムは彼のコメントで指摘したように、答えはVBA IDEがあったことでしたすべてのエラーが発生するように設定されています。未処理のエラーを打破するためにそれを変更するだけで、私が望む動作が得られました。

enter image description here

関連する問題