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