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

Open office people working

概要

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

VBA Macro OnErrorGoto

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

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

VBA Macro OnErrorGoto

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

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

VBA Macro OnErrorGoto

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

VBA Macro OnErrorGoto