RPAからマクロを起動した場合の分岐について~Application.Caller プロパティ~

今回のコラムでは、RPAでExcelマクロを使う場合のノウハウを1つ紹介します。

今日紹介するのはExcelの「Application.Caller プロパティ」というものです。

このプロパティは何がそのマクロを起動したのかの情報があり、これを使うことで

  • ・一般的なボタンを利用したマクロ起動
  • ・RPAからのマクロ起動

以上をマクロの中で判断することができます。

 

検証準備

マクロの準備(Application.Caller)

マクロ有効Excel(.xlsm)ファイルを準備して、以下のようなマクロを入れます。

Sub Macro1()
    If TypeName(Application.Caller) = "Error" Then
        MsgBox "RPAもしくはマクロ本体 から起動されました"
    Else
        MsgBox Application.Caller + " から起動されました"
    End If
End Sub

あとはこれを起動するボタンを用意します。

 

RPAの準備(ExecuteMacro)

今回はUiPathで実装してみます。簡単にExcelApplicationScopeの中でExecuteMacroを実行するだけですね。

 

実行結果

ボタンから起動した場合

Application.Callerプロパティに「四角形:角度付き1」というボタン名が入ります。(使うボタンや数によってボタン名は変わります)

 

RPAから実行した場合

Application.Callerプロパティに値が無い=「型がError」になるので、その型がErrorの場合はRPAから実行された(もしくは直接マクロ本体を起動した)と判断できます。

 

使いどころ

よくマクロの処理の中でMsgBoxでのポップアップウィンドウ(例「マクロが終了しました」メッセージ)や、InputBoxでの入力を求めるものがあります。ただ、RPAによる自動化をしたい場合ユーザーによりこのウィンドウの「OK」ボタン押さないとRPAが次の処理に行かないため、完全自動化できない場合があります。

 

その場合は、このApplication.Callerプロパティを利用した分岐が有効です。ボタンからマクロを起動した場合は今までどおりポップアップウィンドウを表示、RPAから起動した場合はログ出力するだけ、を上記コードのように分岐を設置すればOKです。

処理分岐については、Application.Callerプロパティを利用せずに、RPAが起動する用のプロシージャーを別途用意して、そのプロシージャー内でRPAが起動したことが分かるフラグをONにするなどの対応もあります。必要に応じて使い分けるのがいいかと思います。

もっと知りたい方はこちら

ページトップ