9

私はExcelでVBAをしばらく使用しており、すべてのプロシージャにカスタムエラーハンドラを使用しています。私は初めて、 (ブロック内の状況にErr.Raise対処するために)使用する必要がある立場にいることに気付きました。そして、エラーをカスタムエラーハンドラーに渡す方法がわかりません。発生したエラーをカスタムハンドラーに渡す代わりに、VBAは独自の醜くてかなり役に立たないエラーダイアログをポップアップします。誰かがこれを回避する方法を教えてくれれば、私はとても感謝しています。Case ElseSelect Case

以下は、私が使用しているコードの一般化されたバージョンです(関数/変数名は無実を保護するために変更されています)。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

ティムがコメントで指摘したように、答えは、VBAIDEがすべてのエラーで機能するように構成されているというものでした。未処理のエラーで中断するように変更すると、希望する動作しか得られませんでした。

ここに画像の説明を入力してください

于 2013-02-09T01:03:04.897 に答える