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箇所で書かていてカッコ悪いので、実用的なコードを書くときはちゃんと関数化などしましょう。
おわり。