Power Automate Desktop(PAD)でOfficeのマクロを実行したいとき、Excelの場合は標準で「Excel マクロの実行」アクションが用意されていますが、Excel以外のアプリケーションはマクロを実行するためのアクションが用意されていないため(2021年7月時点)、他の方法で何とかする必要があります。
今回は例として、PADからPowerPointマクロを実行する方法をご紹介します。
Officeアプリケーションのコマンドラインスイッチ
下記サイトにある通り、Officeアプリケーションには様々なコマンドラインスイッチが用意されていて、PowerPointの場合は「/M」スイッチでファイル名とマクロを指定することで、ファイルを開いた後に自動的にマクロを実行できます。
「アプリケーションの実行」アクションでこのコマンドラインスイッチを指定することで、PADからマクロを実行するわけです。
「アプリケーションの実行」アクション
具体例として「C:\Test\テスト.pptm」ファイルの「SampleMacro」マクロを実行する場合は下記のようになります
Public Sub SampleMacro() MsgBox "開いているファイルは " & ActivePresentation.Name & " です。", vbInformation + vbSystemModal End Sub
- アプリケーション パス:POWERPNT.exe
- コマンド ライン引数:/M "C:\Test\テスト.pptm" "SampleMacro"
ただし、環境によってはファイルを開いた際にマクロの警告ダイアログが表示され、そこで動作が止まってしまいます。
アドイン化したマクロを実行する
上記の通り、「アプリケーションの実行」アクションとコマンドラインスイッチでPADからPowerPointマクロを実行できましたが、フローに組み込む場合は1ファイルに埋め込まれたマクロを呼び出すよりも、任意のファイルに対して指定したマクロを実行できるようにした方が使い勝手が良さそうです。
これを実現するためにはPowerPointファイルをアドインとして保存し、事前に読み込んでおく必要があります。
- 実行するマクロを用意します。今回はアクティブなプレゼンテーションファイルをPDFに変換する簡単なマクロを書いてみました。
- 「名前を付けて保存」からファイルの種類を「PowerPoint アドイン (*.ppam)」にして保存します。ファイルの種類をアドインにした時点で保存先が自動的にAddInsフォルダに切り替わるので、そのまま保存します。
- 「開発」タブのアドイングループから「PowerPoint アドイン」ボタンをクリックします。
- 「新規追加」ボタンをクリックします。
- 手順2.で保存したアドインファイルを選択し、「OK」ボタンをクリックします。
- アドインダイアログで手順5.で選択したアドインが読み込まれていることを確認し、「閉じる」ボタンをクリックします。
Public Sub SaveAsPdf() 'プレゼンテーションファイルと同じ場所にPDFファイルを出力 Dim prs As PowerPoint.Presentation Set prs = ActivePresentation With CreateObject("Scripting.FileSystemObject") If .FolderExists(prs.Path) Then prs.ExportAsFixedFormat2 .BuildPath(prs.Path, .GetBaseName(prs.FullName) & ".pdf"), _ ppFixedFormatTypePDF End If End With prs.Saved = True: prs.Close '保存せずに閉じる Application.Quit End Sub
以上でアドインの読み込みは完了です。
読み込んだアドインのマクロは、下記のように「(アドイン名)!(マクロ名)」といった形で呼び出すことができます。
POWERPNT.exe /M "C:\Test\PowerPoint へようこそ.pptx" "SampleAddin.ppam!SaveAsPdf"
これを踏まえて作成したPADのフローが下記になります。
- アプリケーション パス:POWERPNT.exe
- コマンド ライン引数:/M "C:\Test\PowerPoint へようこそ.pptx" "SampleAddin.ppam!SaveAsPdf"
- アプリケーションを起動後:アプリケーションの完了を待機
マクロの中にPowerPointを終了する処理を入れているため、「アプリケーションの完了を待機」を指定することで、マクロの終了を待ってから次の処理に移ることができるわけです。
以上のように、PADのフローにマクロを組み込むことで、例えば指定したフォルダにあるPowerPointファイルを一括でPDFに変換する処理等ができます。
もちろん、マクロを使わずにキー送信やボタンクリックでPowerPointを操作することでも同様の処理はできますが、マクロを使うことで処理は安定します。
また逆に、上で挙げたファイル変換程度であればPADを使わずにマクロだけでも簡単に処理できるわけですが、処理が複雑になればなるほどコードを書く負担は増えるので、PADに任せられる部分は任せてしまった方がコード量は少なくて済みます。
どの部分をマクロで行い、どの部分をPADに投げるかの見極めは必要になりますが、PADとOfficeマクロを組み合わせるメリットは十分にあると、個人的には思います。
この記事へのコメントはありません。