第61回.「On Error GoTo」と「Exit Sub」
「On Error GoTo 行ラベル」
このステートメントは、実行時エラーが発生した時に制御を指定の行ラベルに移動させるものです。
このようなエラー発生時にも、マクロVBAが停止せずに指定の行ラベルの位置に移動し処理を継続したい場合に、
On Error Go To ステートメントを使用します。
On Error GoTo 行ラベル
これが実行された後にエラーが発生すると、行ラベルの位置に制御が移ります。
・プロシージャーの終了
On Errorが実行された時点で、それ以前のエラー情報は消去さます。
Sub Sample
On Error GoTo Label01
'・・・
'ここでエラー発生した場合はLabel01に移動
'・・・
On Error GoTo 0
'・・・
'ここでエラー発生した場合はVBA停止します
'・・・
Exit Sub
Label01:
エラー時の処理
End Sub
行ラベル
これが、行ラベルです。
ラベル名:
このようにラベル名の後ろに:(コロン)を付けて書きます。
ラベルの命名は通常の変数の命名規則に準じます。
行ラベルではなく、行番号(数字)を指定することもできますす。
On Error GoTo 10
'・・・
10:
このように数字の後ろに:(コロン)を付けて書きます。
行番号を使う事も出来ますが、現代においては使わない方が良いでしょう。
Exit Sub
つまり、Subプロシージャーが終了します。
エラー処理ルーチンの直前でSubプロシージャーを抜けるためには、Exit Subを使用します。
If 終了条件 Then
Exit Sub
End If
このように、ある条件の時に、
それ以降の処理をせずに、プロシージャーを抜ける為に使用します。
On Error の有効範囲とその動作について
Sub sample1()
On Error GoTo Label01
Call sample2
Call sample3
Exit Sub
Label01:
MsgBox "Label01"
End Sub
Sub sample2()
On Error GoTo Label02
Dim i As Long
i = "abc"
On Error GoTo 0
Exit Sub
Label02:
MsgBox "Label02"
End Sub
Sub sample3()
Dim i As Long
i = "abc"
Exit Sub
Label03:
MsgBox "Label03"
End Sub
sample02には、On Error GoTo Label02、があるのでエラー発生時はLabel02に移ります。
sample03には、On Error がないので、エラー発生した時点でプロシージャーを抜けます。
「Label02」→「Label01」の順でメッセージ表示されます。
・呼び出し元にOn Error が無い場合はエラー停止します。
・呼び出し元にOn Error がある場合はその時点でプロシージャーを抜けます。
呼び出し元のさらに呼び出し元(親の親)も含まれます。
エラー処理を理解することはとても重要です。
ステップイン実行(F8) で、その動作を確認することが理解する一番の近道になるでしょう。
最後に
もちろん、エラー発生しないようにVBAを書くべきではありますが、
エクセルVBAでは、避けようのないエラー(でしか判定できないような場合)も存在します。
次回のOn Error Resume Nextと合わせてしっかりと習得してください。
同じテーマ「マクロVBA入門」の記事
第62回.「On Error Resume Next」とErrオブジェクト
新着記事NEW ・・・新着記事一覧を見る
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.条件分岐(Select Case)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。