エラー処理

エラー処理の必要性

コード実行中にエラーが発生したとき、そのエラーに対応する処理が定義されていないと、コードの実行が中断されて再実行できなくなることがあります。 そのため、発生したエラーに対し、何らかの処理を行う必要があります。


エラートラップ

エラーが発生したときに、通常の処理ルーチンからエラー処理用のコードに分岐させるることを「トラップ」といいます。また、エラー処理用に記述したルーチンを「エラー処理ルーチン」といいます。


エラーの処理方法

エラー処理ルーチンは以下のステップからなります
・エラートラップの設定
・エラー処理ルーチンの記述
・エラー処理ルーチンの終了

1.エラートラップの設定

エラートラップは、「On Error」ステートメントが実行されたときに有効となり、エラートラップを含むプロシージャがアクティブな間(Ext Sub,Exit Function,End Sub,End Functionが実行されるまで)は有効なままになります。


2.エラー処理ルーチンの記述

最初に、以下のステートメントを記述します。

構文
 On Error Goto line
  lineには、分岐先のエラー処理ルーチンを示すための「行ラベル」か「行番号」を指定します。

下図にルーチンの例を示します。
エラー処理ルーチンの図

エラーが発生すると、エラー処理ルーチンである(行ラベル)ErrorCheckに分岐します。
エラー処理ルーチンは、プロシージャの最後(End Sub,End Function)の直前に記述します。エラー処理ルーチンの行ラベルの直前には、Exit SubExit Functionステートメントを記述します。 これにより、エラーが発生しなかったばあいは、エラー処理ルーチンが実行されることがなくなります。


3.エラー処理ルーチンの終了

エラーが発生した場合に、メッセージボックスなどでユーザに通知するなどして、プログラムを終了するかもしれませんが、続けて処理を行う必要がある場合には以下のようなステートメントを使用します。

Resume Nextエラーの発生したステートメントの次のステートメントから実行を再開する。
Resumeエラーの発生したステートメントから実行を再開する。
Resume lineline(行番号または行ラベル)から実行を再開する。

主に、「Resume」は、ユーザが何らかの操作をしてエラーに対処した後に、もう一度同じ処理を実行する場合に使用します。
「Resume Next」は、コード内でエラーに対処したり、あらかじめ予想されるエラーを無視するなどして、次の処理に進むときに使用します。

Resume,Resume Nextを使用した例を以下に示します。
Resumeを使ったエラー処理ルーチンの図
「End」は、変数を初期化する、制御をExcelに戻すなどしてコードの実行を正しく終了させるものです。


エラー処理を無効にする

「On Error GoTo 0」ステートメントを使用すると、現在のプロシージャ内のエラー処理を無効に出来ます。


Excel VBAのチップス一覧へ戻る

ツイート
このエントリーをはてなブックマークに追加
inserted by FC2 system