エラーのトラップ

「エラーのトラップ」とは、発生したエラーに対し適切に対処することです。

on Error Resume Nextステートメント

「on Error Resume Nextステートメント」は、エラーが発生しても実行を中断せずに次のステートメントを実行します。

Sub ErrTrapSample1()
    Dim res As Integer
    
    'エラートラップ有効
    On Error Resume Next
    
    'ユーザが数値以外を入力した場合などエラー発生
    res = CInt(InputBox("数値を入力してください"))
    
    MsgBox res
    
End Sub

上記のように簡単にエラーを回避できますが、プログラムでは防げないエラーをトラップするためのものであることを忘れてはいけません。

On Error GoTo ステートメント

「On Error GoToステートメント」は、エラーが発生した場合、エラー処理ルーチンに分岐するステートメントです。

Sub ErrTrapSample2()
    'エラートラップ有効(行ラベルを指定)
    On Error GoTo HandleErr
    
    'わざと存在しないシートを指定してエラーを発生
    ActiveWorkbook.Worksheets("aaa").Activate
    
    'エラーが発生しなかった場合の処理
    MsgBox "正常に処理実行"
    
    'エラーが発生しなかった場合は、必ず処理終了
    Exit Sub
    
    
HandleErr:
    MsgBox "シート「aaa」は存在しません"
    
End Sub

「On Error GoTo ステートメント」の引数には、行ラベル(又は行番号)を指定します。

行ラベルの名前は任意です。

行ラベルは、「HandleErr:」のように「:」(コロン)つけ、基本的にマクロの最後に記述します。

また、エラーが発生しなかった場合にエラー処理ルーチンを処理しないように、エラー処理ルーチンの直前に「Exit Sub」などを記述してマクロを抜ける処理をしましょう。

On Error GoTo 0 ステートメント

「On Errorステート」は、マクロ終了時に自動的に無効になるが、「On Error GoTo 0 ステートメント」は、マクロの中でトラップ機能を無効にする場合に使用する

エラー番号の例

番号 メッセージ 理由と対策
5 プロシージャの呼び出し、または引数が不正です。 引数が許容値の範囲か確認
6 オーバーフローしました。 代入、計算、データ型変換の結果が、その変数の許容範囲か確認
7 メモリが足りません。 モジュールまたはプロシージャを小さく分割
Public 変数を減らす
9 インデックスが有効範囲にありません。 存在しない配列要素などを参照していないか確認
11 0 で除算しました。 0で割り算している
13 型が一致しません。 互換性のないデータ型の間で代入を行っている
52 ファイル名または番号が不正です。 ファイル番号のファイルが正しく開かれた状態かを確認
53 ファイルが見つかりません。 存在しないファイルを参照している
55 ファイルは既に開かれています。 閉じられていないファイルを開こうとしている
58 既に同名のファイルが存在しています。 既に存在するファイル名と同じ名前を指定している
76 パスが見つかりません。 指定したパスが存在するか確認

 

コメント