ナレッジベース

VBA Macroの自動化対応時のエラーハンドリング(OnErrorGoto)

概要

Try Catchアクティビティを使用すると、エラー発生時にワークフローが停止することを防止できます。しかし、Try Catchアクティビティがキャッチするエラーは、.Net FrameworkのSystem.Exceptionを継承した例外であるため、VBAマクロ内部で発生したエラーは対象となりません。そのため、エラーハンドリングがされていないVBAマクロ内でエラーが発生すると、VBAマクロが停止してしまいます。こうした状況を防止するには、VBAマクロ内にも別途エラーハンドリングをする必要があります。

 

vba-macro-onerrorgoto-image1

 

エラーハンドリングがないVBAマクロでエラーが発生した場合

 

エラーハンドリングがないVBAマクロでエラーが発生すると、下記のような形でVBAマクロが停止してしまいます。
(VBAマクロのエラーはTry Catchアクティビティのキャッチ対象ではないため、Try Catch内であるかどうかに関わらず停止します。)

 

vba-macro-onerrorgoto-image2

 

VBAマクロへのエラーハンドリング実装


上記のような状況を防止するには、VBAマクロ内にOn Error GoToステートメントを実装します(VBAエラーハンドリングの詳細な説明は、VBAのナレッジとなりますので本項では割愛します)。
Execute MacroアクティビティはVBAマクロの戻り値を受け取ることができますので、VBAマクロの処理結果に応じて、その後の処理フローを変化させることができます。

 

vba-macro-onerrorgoto-image3

※なお、上記のようにエラーハンドリングがされていても、VBAプロジェクトの設定によってはエラー発生時にVBAマクロが停止することがあります。この場合、VBAプロジェクトのエラートラップの設定が、「エラー発生時に中断」以外になっているかどうかご確認ください(「エラー発生時に中断」だと、エラーハンドリングが実装されていても止まってしまいます。)。当該設定のダイアログは、 VBAエディターのメニュー[ツール] - [オプション]で表示できます。

 

vba-macro-onerrorgoto-image4