エラーのトラップ

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

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インデックスが有効範囲にありません。存在しない配列要素などを参照していないか確認
110 で除算しました。0で割り算している
13型が一致しません。互換性のないデータ型の間で代入を行っている
52ファイル名または番号が不正です。ファイル番号のファイルが正しく開かれた状態かを確認
53ファイルが見つかりません。存在しないファイルを参照している
55ファイルは既に開かれています。閉じられていないファイルを開こうとしている
58既に同名のファイルが存在しています。既に存在するファイル名と同じ名前を指定している
76パスが見つかりません。指定したパスが存在するか確認

 

コメント