AIにVBAから外部プログラム(batファイル)を動作させるために聞いてみたことのメモ
・外部プログラムを実行するために、CreateObject("WScript.Shell").ExecとCreateObject("WScript.Shell").Runの両方とも使用することができる
・CreateObject("WScript.Shell").Execメソッドは、外部プログラムを実行し、そのプロセスにアクセスするためのオブジェクトを返す。このオブジェクトを使用することで、プロセスの標準入力、標準出力、および標準エラー出力にアクセスすることができる
・CreateObject("WScript.Shell").Runメソッドは、外部プログラムを実行し、そのプロセスIDを返す
ただし、このメソッドではプロセスの標準入力、標準出力、および標準エラー出力にアクセスすることはできない
【動作確認用】
Sub TestExecMethod()
' WScript.Shellオブジェクトの作成
Dim wsh As Object
Set wsh = CreateObject("WScript.Shell")
' Execメソッドを使用してbatファイルを実行
Dim exec As Object
Set exec = wsh.exec("test.bat")
' 標準出力からデータを読み取り
Dim output As String
output = exec.StdOut.ReadAll
' 結果を表示
MsgBox output
End Sub
Sub TestRunMethod()
' WScript.Shellオブジェクトの作成
Dim wsh As Object
Set wsh = CreateObject("WScript.Shell")
' Runメソッドを使用してbatファイルを実行
wsh.Run "test.bat", vbNormalFocus, True
' 結果を表示(標準出力は取得できない)
MsgBox "Done"
End Sub
このVBAファイルには、TestExecMethodとTestRunMethodという2つのサブプロシージャが含まれています。TestExecMethodサブプロシージャは、Execメソッドを使用してbatファイルを実行し、その標準出力からデータを読み取ります。一方、TestRunMethodサブプロシージャは、Runメソッドを使用してbatファイルを実行しますが、標準出力からデータを読み取ることはできません。
これらのサブプロシージャを実行すると、それぞれがbatファイルを実行し、その結果が表示されます。ただし、Execメソッドでは標準出力からデータを読み取ることができますが、Runメソッドでは標準出力からデータを読み取ることができません。
以上が、CreateObject("WScript.Shell").ExecとCreateObject("WScript.Shell").Runの違いを確認するためのVBAファイルとbatファイルの例です。どうぞよろしくお願いします。