「エラーのトラップ」とは、発生したエラーに対し適切に対処することです。
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 | パスが見つかりません。 | 指定したパスが存在するか確認 |
コメント