見出し画像

Blue PrismからExcelマクロをタイムアウト時間指定で実行する

こんにちは、「レッドブーツ88」です。

どうでも良い話ですが、一般的な音楽としてメロディーを作曲する際は、通常、ピアノの黒鍵と白鍵を組み合せることになり1オクターブに最大で12音しか存在しません。(ブルースのブルーノートやインド音楽ならその間の音とかも利用するので12音より多いとも言えそうですが)

大昔、たった12個しかない音を組み合わせてメロディーを作っても昔の人が作ったものにどうしても似てしまうよなーと考えたことがあったのですが、そんな話をよりスケールを大きく考えて全てのメロディーを用意してパブリックドメインにしてしまった方が居るようです。いやー凄い話です。

さて、今回は、Blue PrismからExcel VBOを用いてマクロを実行する際にタイムアウト時間を指定する手順を紹介いたします。

よく遭遇する課題

例えば、製品に付属するMS Excel VBOからマクロを実行する際に、以下のようにマクロ処理でダイアログが表示されてしまった場合は手動でダイアログを閉じないとBlue Prism側へ応答が戻されず実行中のままとなり、利用者からはBlue Prismがハングしたように見えてしまう事象が発生してしまいます。

MS Excel VBOのRun Macroアクションの実装

標準のMS Excel VBOのRun Macroアクションを確認すると以下のようになっていることが分かります。

GetInstance(Handle).Run(Macro_Name)

Run Macroアクションをタイムアウト可能なように改善

Run Macroアクションを複製し(ここではRun Macro Timeoutと言う名前で複製しています)、以下のようにパラメータでタイムアウト時間を指定できるように修正すると、指定した時間が経過すれば呼び出し元へエラーが戻されるようになります。

ExecWithTimeout(Timeout, "Run Macro",
Sub() GetInstance(Handle).Run(Macro_Name))

カスタムExcel VBOを用意するザックリな手順

ご利用中のBlue Prismに含まれるExcel VBOをコピーし(別名で保存が便利です)、コピーしたVBO上のRun MacroアクションからRun Macro Timeoutなどの名前で複製を行います。

Run Macro Timeoutアクションの開始ステージへ呼び出し元からタイムアウト時間を指定するためのパラメータを追加します。

あとはコードステージの実装を上記のようにExecWithTimeout関数を経由するように修正するだけです。

まとめ

・ Excel マクロを実行する際にタイムアウト時間を指定することが可能です
・ サンプル定義をユーザーコミュニティ上で共有しました (ログインが必要です)

あるお客様から昔はExcel VBOの中でタイムアウト時間が指定できなかったのに、いつの間にか指定できるようになったアクションが幾つかあると教えていただいたので、試しにOpen Workbookアクションを見てみたら、クロージャ―みたいな実装でタイムアウトを実現していることに気づいて上記対応を思いつきました。このサンプルが何かしら参考になれば幸いです。

※本投稿は、別ブログで掲載・公開していた内容に加筆・修正を加え再掲載しています。