VBA:On Error

目次

On Errorとは

VBAの「On Error」ステートメントは、VBAプログラムでランタイムエラーを管理するために使用されます。これにはいくつかの異なる形式があり、それぞれに特定の用途と注意点があります。

On Error Resume Next

このステートメントは、エラーが発生したときにプログラムがエラーを無視して次の行から実行を続けるように指示します。これにより、プログラムはランタイムエラーにもかかわらず実行を続けますが、エラーによる副作用(未初期化の変数やnullオブジェクトなど)をプログラマが管理する責任があります。これは特定の状況で役立ちますが、不適切な使用はプログラムの不安定さを引き起こす可能性があります。

On Error GoTo [Label]

この形式では、エラーが発生した場合にプログラムの制御を特定のラベルに移動させることができます。これは、エラーが発生した際に、より洗練されたエラーメッセージを表示するか、アプリケーションを適切に終了させる場合に適しています。

On Error GoTo LABEL名

LABEL名:
    ' エラー処理 

On Error GoTo 0

このステートメントは、現在のプロシージャでエラーハンドリングを無効にします。これは、エラーハンドリングコードの開始を行番号0で指定するものではありません。プロシージャを抜ける際に自動的にエラーハンドラが無効になるため、これを指定する必要はありませんが、「On Error Resume Next」と組み合わせることで、特定のセクションでのみエラーチェックを無効にするといった使い方ができます。

On Error のサンプルコード

VBAのOn Errorステートメントは、エラーハンドリングを行うために使われる非常に重要な機能です。以下に、VBA初心者が理解しやすいようなOn Errorの使用例を示します。

On Error Resume Nextの例

この例では、エラーが発生しても、プログラムはエラーを無視して次の行から実行を続けます。これは、特定のエラーが予想され、それを無視しても問題ない場合に有用ですが、使い方には注意が必要です。

Sub OnErrorResumeNextExample()
    On Error Resume Next ' エラーを無視して次の行を実行

    Dim x As Integer
    x = 1 / 0 ' 0で割るとエラーが発生しますが、無視されます

    MsgBox "プログラムは続行されました"
End Sub

On Error GoTo [Label]の例

この例では、エラーが発生した場合にプログラムの制御を特定のラベル(ここではErrorHandler)に移動させます。これは、エラーが発生した際に適切なエラーメッセージを表示するか、プログラムを適切に終了させる場合に適しています。

Sub OnErrorGotoLabelExample()
    On Error GoTo ErrorHandler ' エラーが発生した場合にErrorHandlerへ移動

    Dim y As Integer
    y = 1 / 0 ' 0で割るとエラーが発生します

    Exit Sub

ErrorHandler:
    MsgBox "エラーが発生しました: " & Err.Description
End Sub

On Error GoTo 0の例

この例では、On Error GoTo 0を使用して、エラーが発生した場合にデフォルトのエラーハンドリングに戻ります。これは、一時的にエラーハンドリングを変更した後、元の状態に戻す場合に使用します。

Sub OnErrorGoto0Example()
    On Error Resume Next ' 最初にエラーを無視する

    Dim z As Integer
    z = 1 / 0 ' このエラーは無視されます

    On Error GoTo 0 ' デフォルトのエラーハンドリングに戻る

    z = 1 / 0 ' このエラーは通常通り処理されます(エラーダイアログが表示される)
End Sub
hideharu

エラーハンドリングは、VBAプログラムをより堅牢で信頼性の高いものにするための重要なスキルです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次