VBAのマクロで外部コマンドを呼び出すサンプル
はじめに
諸事情があり、Excelのマクロから外部コマンドを呼び出す必要がありました。その際書いたスクリプトのメモです。
動作環境
Win10 × Excel2016でしか動作確認しています。
サンプルコード
Dim wsh As Object Dim exec As Object Dim command As String Dim result As String Set wsh = CreateObject("WScript.Shell") command = "〜〜〜" Set exec = wsh.exec("%ComSpec% /c " & command) Dim line As String ' ★★★ポイント1★★★ Do While exec.Status = 0 If Not exec.StdOut.AtEndOfStream Then line = exec.StdOut.ReadLine ' 標準出力の1行読み込み ' 〜〜〜(処理)〜〜〜 Do Events End If Loop ' ★★★ポイント2★★★ Do Until exec.StdOut.AtEndOfStream line = exec.StdOut.ReadLine ' 標準出力の1行読み込み ' 〜〜〜(処理)〜〜〜 Do Events Loop Set exec = Nothing Set wsh = Nothing
ポイント1
exec.Status
が 0
になるまで待ち合わせを行っています。wsh#exec
した後はコマンド実行が終わるまで時間がかかるかもしれないためです。ちなみにこの位置で標準出力のストリームを読み込んで置かないと、データ量が多いとふんずまるみたいです。
ポイント2
ここは、残りの標準出力のストリームを最後まで読み込んでいる部分です。
同じ処理を2箇所で書かていてカッコ悪いので、実用的なコードを書くときはちゃんと関数化などしましょう。
おわり。