[ VBA ] 例外もどきの発生と捕捉 ( On Error Goto ステートメントと Err.Raise )

Pocket

ここでは、C# や JAVA のようなオブジェクト指向言語にある例外の発生と捕捉の VBA での実装例を掲載しています。

「VBA の弱点を多言語では「例外」として実装した」と言った方がいいのかもしれませんが。

スポンサーリンク

VBA による例外の発生と捕捉

VBA では、Try ~ Catche 構文は使用できませんが、On Error Goto ステートメントを使用してエラー(例外)の捕捉を行うことができます。また、サンプルのように、Err.Raise によってエラー(例外)を生成することができます。多言語では、throw で例外を発生させています。

詳細はサンプル内のコメントを参照ください。

Option Explicit

Private Sub CommandButton1_Click()

    ' エラー時は、ErrorHandle ラベルへ飛ぶ
    On Error GoTo ErrorHandler
    
    ' 多言語で言う例外を発生させるようなもの
    ' エラー番号、エラーソース、エラーメッセージ
    Call Err.Raise(1234, Me.Name, "エラーだぞ。コノヤロー")
    
    ' エラーが前処理で発生したため、この位置の処理は行われない
    MsgBox "このメッセージダイアログが出力されることはない"

ErrorHandler:

    ' エラー番号とエラメッセージを出力
    MsgBox Err.Number & ":" & Err.Source & ":" & Err.Description

    ' エラーをクリアする
    Err.Clear

End Sub

なお、出力されるエラーダイアログは、次のようになりました。

出力されたエラーダイアログ

スポンサーリンク


Pocket

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>