Power automate desktop vbaから起動

2022年1月のアップデートで、「Excel の起動」アクションでExcelファイルを開く際、単一プロセス下でインスタンスをグループ化できるようになりました。

Restructure of Excel instance functionality to support multiple macros

Users will now have the ability to group Excel instances under a single Excel process. This way, Excel instances will be able to reference multiple macros. The ability to launch isolated instances will also remain available.

https://powerautomate.microsoft.com/en-us/blog/power-automate-for-desktop-january-2022-update/ より

これにより他ブックのマクロを参照できるようになっています。
具体的な使用方法は下記の通りです。

他ブックのマクロを実行するフロー

フロー全体

Power automate desktop vbaから起動

1. Excel の起動

ドキュメントパスを指定して下記マクロ「Macro1」が書かれたファイル(Macro1.xlsm)を開きます(変数:%ExcelInstance%)。
このとき、「詳細」から「新しい Excel プロセスの配下にネストする」オプションをオフにしておきます。

Public Sub Macro1()
  Dim i As Long
  
  For i = 1 To 100000
    ActiveSheet.Cells(i, 1).Value = i
  Next
  ActiveSheet.Range("B1").Value = "Macro1の処理が終了しました。"
End Sub

Power automate desktop vbaから起動

2. Excel の起動

「Excel の起動」オプションで「空のドキュメントを使用」を指定し、新規ファイルを作成した状態でExcelを起動します(変数:%ExcelInstance2%)。
こちらも「新しい Excel プロセスの配下にネストする」オプションをオフにしておきます。

Power automate desktop vbaから起動

3. Excel マクロの実行

Macro1.xlsm ファイルで「Macro1」マクロを実行します。

Power automate desktop vbaから起動

4. Excel マクロの実行

新規作成したファイルで Macro1.xlsm ファイルの「Macro1」マクロを実行します。
このとき「マクロ」オプションで「Macro1.xlsm!Macro1」のように、マクロが書かれたファイルを指定します。

Power automate desktop vbaから起動

5. Excel を閉じる

処理が終わったらExcelを閉じます。

Power automate desktop vbaから起動

Power automate desktop vbaから起動

実行画面

今月のPower Automate for desktopのアップデートで、「Excel の起動」アクションでファイルを開く際にインスタンスをグループ化できるようになったので、ファイルをまたがってマクロを実行できるようになりました。 https://t.co/sOStCTfz4B #PAD #PA4d pic.twitter.com/deyShJU3G8

— きぬあさ (@kinuasa) January 27, 2022

これまでの「Excel の起動」アクションでは、複数個Excelを起動した場合それぞれ別のプロセスとして立ち上がっていたため、上記のような形で別ファイルのマクロを実行することはできませんでしたが、今回のアップデートによって、ファイルをまたがってマクロを実行することができるようになりました。

関連Webサイト

Power Automate Desktopでは、エクセルのマクロを実行させることができます。

VBAを使った関数を実行させることができるので、マクロ実行を自動化させたい場合に非常に便利です。

エクセルのマクロを実行するには?

Power automate desktop vbaから起動

マクロの作成

エクセルのマクロをまずは作成します。

サンプルとして、VBAを使って関数をワークブック内に作ります。

テスト用なので、単純にセルをコピーしてペーストするだけのものです。

Power automate desktop vbaから起動

フローの作成

ファイルの起動

まずエクセルでファイルを起動させます。

アクションで「Excel>Excelの起動」でファイル名を指定しておきます。

Power automate desktop vbaから起動

詳細でマクロの読み込みがあるので一応チェックしておきます。

Power automate desktop vbaから起動

マクロの実行

アクションで「Excel>詳細>Excelマクロの実行」を追加。マクロ名を指定します。

今回はワークブック内のVBA関数なので「ThisWorkbook.doTest」のように記述します。

Power automate desktop vbaから起動

保存

マクロでセルを上書きしていますので、ファイルを保存します。

アクションで「Excel>Excelの保存」を追加します。

Power automate desktop vbaから起動

終了

最後にエクセルを閉じます。

Power automate desktop vbaから起動

フローの実行

手順としては以下のように、エクセルの起動→マクロ実行→ファイル保存→エクセル終了となります。

実行してマクロで変更されたファイルを確認できれば成功です。

Power automate desktop vbaから起動

Power Automate Desktopからマクロを実行させるメリットは?

既にエクセルファイルにマクロが仕組まれていれば、それを指定するだけで実行できるほうが楽です。

また「セルに色を付ける」などはVBAのほうからでないと設定できません。

PADでエクセルマクロの不具合

マクロが動かない?

そもそもマクロが正常に動作しない場合にはPower Automate Desktopのほうではどうしようもありません。先にVBAの動作などを調べておきましょう。

マクロを指定する場合には、「Excel>Excelの起動」のアクションで、「アドインとマクロを読み込む」をチェックしておきましょう。

マクロが見つからない?

doTestという関数でマクロを実行しようとしたら、なかなか認識されずに苦労しました。

最終的には「ThisWorkbook.doTest」という名前にしたら実行できました。関数の呼び出し方がしっかり一致しないと認識されませんので注意しましょう。

また「Sub Workbook_Open()」のように起動時にマクロを実行するように書いておけば、起動時させることでマクロが実行できます。指定したマクロが実行されない場合は、この方法で動作確認をしてみるといいかもしれません。