エラー処理
マクロで発生するエラーを大別すると、次の2種類に分類できる。
- 文法エラー
- 論理エラー
文法エラー
文法エラーは記述エラーとも呼ばれる。VBAの構文に違反した書式で命令を記述したときに発生する。
論理エラー
VBAの文法的な誤りはないものの、論理的な矛盾によって発生するエラーである。
論理エラーはコンパイルエラーと実行時エラーの2種類に分類できる。
エラーへの対応
エラーが発生したら別の処理にジャンプする
On Error ステートメントを使う。
On Error GoTo ジャンプ先のラベル名
ラベルとはマクロコード中に記述する「しおり」のような機能。
ラベル名の後ろにコロン(:)をつけて表す。
ラベル名:
サンプルコード
Sub Sample()
On Error GoTo myError
Workbooks.Open "XXXXX.xlsx"
MsgBox "ブックを開きました。"
myError:
MsgBox "エラーが発生しました。"
End Sub
上記のコードではエラーが発生しなかったときにもエラーメッセージを
表示してしまう。
Sub Sample()
On Error GoTo myError
Workbooks.Open "XXXXX.xlsx"
MsgBox "ブックを開きました。"
Exit Sub
myError:
MsgBox "エラーが発生しました。"
End Sub
「Exit Sub」を使って正常終了する場合は処理を抜けるようにする。
どんなエラーが発生したか調べる
On Errorステートメント
↓
エラーが発生した時にエラー処理にジャンプできるが、
どんなエラーが発生したかがわからない。
発生したエラーに関する情報はErrオブジェクトに格納される。
■Errオブジェクトでよく使われるプロパティとメソッド
- Numberプロパティ:エラーごとに決まっている「エラー番号」を返す。
- Descriptionプロパティ:エラーの意味を表すメッセージ(文字列)を返す。
- Clearメソッド:エラー情報をクリアする。
エラー番号とメッセージを取得して発生したエラーの種類を判定する。
発生したエラーを無視する
On Errorステートメントでは発生したエラーを無視することができる。
On Error Resume Next
エラー対策のポイント
- 事前にエラーとなりそうな処理を調べて対策を打っておく。
- エラーが発生した時の処理を記述する。(On Errorステートメント)