VBAからPowerShellのコマンドを実行するサンプルコードを2パターン作成してみました。
この記事ではそのうちの戻り値を取得するパターンを紹介します。
準備
事前準備として、VBAからPowerShellコマンドを実行するには以下の設定が必要です。
- ツールバーから「参照設定」を選択
- 「Windows Script Host Object Model」のライブラリファイルにチェックを入れます。
仕様
VBAからPowerShellコマンドを呼び出します。
PowerShellのコマンドはなんでもよいのですが、「Get-Date」にして結果をVBAのMsgBox関数で表示してみます。
見出し
念のため補足しますが、実現している処理自体はVBAからPowerShellを経由する必要性はありません。
マクロからPowerShellを実行する方法をテストするためにやっています。
ソースコード
WScript.ShellのExecメソッドにより、powershellのコマンドを実行しています。
execPowerShell.xlsm
Option Explicit
Function execPowerShell(psCmd As String)
Dim objWSH As Object
Set objWSH = CreateObject("WScript.Shell")
' PowerShell実行
Dim objwExec As WshExec
Set objwExec = objWSH.Exec("%ComSpec% /c " & psCmd)
' 実行完了待機
Do While objwExec.Status = 0
DoEvents
Loop
' 実行結果の返却
execPowerShell = objwExec.StdOut.ReadAll
End Function
Sub test1() ' PowerShellを実行する(戻り値あり)
'Get-Dateを実行し、結果を表示する
Dim result As String
result = execPowerShell("powershell Get-Date")
MsgBox result
End Sub
実行
実行方法
メニューバーからマクロの一覧を開くと、ソースコード上のtest1が表示されます。
よって、test1関数を選択し実行します。
実行結果
実行するとメッセージボックスで現在時刻が返ってきました。
PowerShellで取得した日時をVBAのメッセージボックスで表示しています。
参考情報
環境
下記の環境で作成・実行しております。
No. | 環境 | バージョン |
---|---|---|
1 | OS | Windows11 |
2 | Word | Word2016 |
3 | PowerShell | 5.1 |
以上です。