[Excel VBA] WScriptを利用して外部コンソールアプリケーションの標準出力結果を取得する


はじめに

VBAで外部アプリケーションを実行する方法として、主にShell関数を利用することが多いですが、Shell関数では外部アプリケーションの標準出力結果を得ることができません。

そこで、今回はWScriptを利用し、コンソールアプリケーション(.exe)で出力された標準出力結果を取得する方法の備忘録です。

 

サンプルコード

Sub Sample()
    Dim objc
    Dim objExec
    Dim cmd
    Dim result

    Set objc = CreateObject("WScript.Shell")
    cmd = "Sample.exe Arg1"
    Set objExec = objc.Exec("%ComSpec% /c" & cmd)

    '処理完了までループ処理
    Do While objExec.Status = 0
        DoEvents
    Loop

    ' StdOut が標準出力ストリームを提供
    result = objExec.StdOut.ReadAll

    ' 標準出力結果を出力
    Debug.Print result
End Sub

 

%ComSpec% 環境変数はコマンドインタープリター(cmd.exe)のパスをもつ環境変数です。

$ echo %ComSpec%
C:¥WINDOWS¥system32¥cmd.exe

 

objExec.Status が「0」の場合ループを続けますが、このStatusプロパティの値が「0」の場合は "起動したプログラムが実行中" を指します。

 

最後に

Excelは何かと使うツールの一つで、VBAを使えばより仕事の幅が広がります。

今回は Excelを飛び越えて外部アプリケーションまで利用していますが、参考になれば幸いです。