UiPathでExcelVBAのエラーをハンドリングする


UiPathでVBAエラーをハンドリングすることの重要性

仕事柄、UiPathからExcelVBAを呼び出して業務を自動化することがよくあるが、ここでよく困ることがある。
UiPath側でVBAのエラーハンドリングを組み込んでおかないとUiPathが異常を検知できずにずっと停止してしまうのである。
手動でUiPathを起動するなら最悪エラーウインドウを見て気付けるが、自動実行で夜間に動くものだと朝になってやっと気づくなんてことも…
ということでUiPathからVBAエラーを最低限検知できる仕組みを紹介する

VBA側の準備

以下が例、重要なのはVBAの中でもちゃんとエラーハンドリング処理を入れてUiPathに返す値を定義すること。

Function vbaError(stErrorFlg As String)
    On Error GoTo dummyError
    If stErrorFlg = "True" Then
        i = 1 / 0   '0除算で強制的にエラーを起こす
    End If

    vbaError = ""  'エラーがない場合は""を返す
    Exit Function
dummyError:
    vbaError = Err.Number & "," & Err.Description  'エラーが発生したときにUiPathに返すエラー内容
End Function

(Errをそのまま返したいところだがErrObjectクラスはインスタンス化できないらしい…
こちらのサイトを参考にしながらクラス定義してあげればできなくは無いんだろうけど…)

UiPath側の準備

あとは、UiPath側ではこのようにExecuteMacroアクティビティのOutputを適当な変数で受け取ればOK

受け取った変数が空っぽかどうかでエラーの有無を判定。エラーの場合はThrowアクティビティを使ってexceptionを発生させる。

結果

このように、VBAのエラーコード、エラーメッセージを表示することができる。

VBAの保守で悩まないためにもエラーハンドリングはちゃんと入れておこう。