XLSTARTに設定したマクロを別ファイルから呼び出せない
今回の記事を書くに至った経緯
ある案件で「エクセルマクロの実行を自動化してくれ!」と言われ、別の案件で既にマクロを実行するロボットは作成した経験はあったので、簡単だなと思いながら作成を始めたわけです。
状況
デスクトップに保存されているAというエクセル通常ファイルを起動し、「XLSTART」に保存されているBのマクロファイル内にあるマクロを実行するという内容。
※XLSTARTについては下記を参照してください。
Excel の起動方法をカスタマイズする
ロボとしてはAをExcel Application scopeで開き、Execute macroアクティビティでBの関数「B.xlsm!マクロ」を実行してみました。
ですがこのようなエラーが出て実行できません。
手作業で実行して時は何もエラーが出なかったのに、ロボで動かすとこの様なエラーが出る。
試した事
こんな感じでマクロ実行までに10秒の間隔を置いたがダメ。
他にもマクロのセキュリティの設定や、Start Application で起動してからマクロ実行をしようとしたが、そもそもAエクセルが2回開いてしまうのでダメ。
原因
そもそも手作業でAを開くと裏側でBマクロファイルも起動しているように見えるのに、ロボだとBが起動していないように見えました。
ここが原因かなと思い、一度手作業でBマクロファイルを立ち上げた状態でロボットでAを立ち上げてマクロ実行をしてみたところ問題なく実行されました。
このような事からおそらくロボットでエクセルを実行した時には「XLSTART」での自動実行が正常に機能しないと判断しました。
解決策
BマクロファイルをStart applicationで起動したあと、Aエクセルを起動してマクロを実行する手順も考えたのですが、エクセルが2個開かれるのでスコープなどがずれたらエラーが起きやすそうだなと思い却下。
結果として解決方法はUipath側の工夫ではないですが、Bのマクロの内容を見たところ特にそのファイルで実行される理由は見受けられないので、Aファイルにモジュールをインポートして、Bマクロを使わずA単体でマクロを実行するよう業務も変更してもらいました。
結果として管理するファイルが減るのし、何年後かに「XLSTART」??なんじゃそりゃとなるのも怖いので。