ワードマクロで、ドキュメントの状態・ファイル形式の違いにより、同じメソッドでも使用できないことがあります。
そんな時場合によっては、エラーを無視してもよい場合もあるでしょう。あるいは、独自のエラー処理を書いたり、ブレイクポイントをって解析することもできます。
そこで、ワードマクロでエラー処理を独自に行う方法を紹介します。
※実案件作業中のため、まずはメモ用に時短で書いております。
ワードマクロ:エラー発生で実行停止せずエラー処理をさせる方法
エラー処理の変更には、On Error 命令を使います。
On Error Goto と、 On Error Resume Next の2つを覚えておけばよいでしょう。
On Error Gotoを使う場合
1 |
On Error Goto ラベル |
エラー発生時には、ErrHandlerラベルへ処理を移動します。そのためエラーが発生した命令のあとの命令は実行されません。
使用例は下リストの通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Sub test_goto() On Error GoTo ErrHandler 'エラー(例外)発生時も次の行を実行続ける Debug.Print ActiveDocument.Nam ' Nameの間違い 'この下は実行されない On Error GoTo 0 '通常動作(エラー発生で実行停止)に戻す Debug.Print ActiveDocument.Nam 'Nameの間違い。エラー実行停止 Exit Sub 'ここでサブルーチンを終了する 'ここからエラー処理 ErrHandler: Debug.Print "エラーハンドラー: " & vbCrLf & Err.Description Err.Clear 'エラークリア On Error GoTo 0 '通常動作(エラー発生で実行停止)に戻す End Sub |
下図は実行結果です。処理分岐しているため、2度目のエラーは発生してません。
On Error Resume Next を使う場合
エラー発生時は、実行停止せず、次の命令を実行します。
この時、処理に不整合が出てこないように、必要に応じてエラー発生時の処理を行ってください。
エラーが発生したかどうかを調べるには、 Err オブジェクトの Number 変数を参照します。0以外ならエラーが発生しています。下に使用例を載せます。
Errオブジェクトで発生を調べた後、Err.Clearメソッドでエラー情報をクリアしています。
また、想定外のエラーでは実行停止させるため、エラー発生が予期できる場所以外では、 On Error Goto 0 で実行停止するようにしてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Sub test_resume() On Error Resume Next 'エラー(例外)発生時も次の行を実行続ける Debug.Print ActiveDocument.Nam ' Nameの間違い If Err.Number <> 0 Then 'エラー発生時処理 Debug.Print "エラー発生: " & vbCrLf & Err.Description End If Err.Clear 'エラークリア On Error GoTo 0 '通常動作(エラー発生で実行停止)に戻す Debug.Print ActiveDocument.Nam 'Nameの間違い。エラー実行停止 End Sub |
下図が実行結果です。いったんDebug.Printでエラー表示したあと、もう一度エラー発生し、実行停止しています。
2回目のエラー発生では、通常動作に戻した後なので、通常のエラーウィンドウが表示されました。
まとめ
マイクロソフトのオフィスのマクロ(VBA)では、On Error 命令を使ってエラー処理をカスタマイズすることができます。
On Error Goto ラベル を使うと処理を分岐(移動)させることができ、 On Error Resume Nextを使えばエラー発生時に次の命令に実行が続きます。
いずれの場合も、エラー発生が想定できる場所でのみ使うようにして、 On Error Goto 0 を実行して通常のエラー処理(実行停止)するように戻してください。
コメント