トップページ

#19_1 エラーを処理する


エラーのトラップ

エラーの中には、プログラミングでは回避できないものがあります。特定のシートをアクティブにしたい時に、そのシートが存在しない場合には実行時エラーが発生してマクロが強制終了してしまいます。

このようなエラーを回避したい場合には、あらかじめエラーが発生した場合を想定してマクロを作る必要があり、適切にエラーを処理することを「エラーのトラップ」と呼びます。

本記事では代表的なステートメントである「On Error GoToステートメント」と「On Error Resume Nextステートメント」について学習したいと思います。

On Error GoToステートメント

まず1つ目の「On Error GoTo」ステートメントですが、こちらはエラーが発生した時にエラー処理ルーチンに分岐するステートメントです。

下の例は、グラフシートをアクティブにしようとした時に、そのグラフシートが存在しなかった時に生じるエラーを回避するマクロです。

ポイントとして、「On Error Go To」ステートメントはエラーの発生しそうなステートメントよりも前に記述しなければならないという点です。

また、引数にはエラー処理の分岐先を指定します。通常はこのように「行ラベル」を指定します。

忘れやすいポイントですが、行ラベルの後にはコロン(:)をつけて宣言しましょう。

作法として、エラー処理ルーチンはマクロの最後に記述しますが、エラーが発生しなかった時にエラー処理ルーチンを実行してしまわぬよう、エラー処理ルーチンの前には必ずExit Subステートメントを記述してマクロを抜けるようにしましょう。

On Error Resume Next

2つ目は「On Error Resume Next」ステートメントです。こちらはエラーが発生しても実行を中断せずに杉のステートメントを実行するためのコマンドです。

実際に例を解説します。

このように、エラーが発生してもマクロをそのまま継続できる「On Error Resume Next」ステートメントはついつい多用しがちですが、あくまでもプログラミングでは防げないエラーをトラップするためのものなので、決してバグを隠すために使用してはいけません。