2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

WScript.Shellオブジェクトについてのメモ

Posted at

AIにVBAから外部プログラム(batファイル)を動作させるために聞いてみたことのメモ

・外部プログラムを実行するために、CreateObject("WScript.Shell").ExecとCreateObject("WScript.Shell").Runの両方とも使用することができる

・CreateObject("WScript.Shell").Execメソッドは、外部プログラムを実行し、そのプロセスにアクセスするためのオブジェクトを返す。このオブジェクトを使用することで、プロセスの標準入力、標準出力、および標準エラー出力にアクセスすることができる

・CreateObject("WScript.Shell").Runメソッドは、外部プログラムを実行し、そのプロセスIDを返す
ただし、このメソッドではプロセスの標準入力、標準出力、および標準エラー出力にアクセスすることはできない

【動作確認用】

TestExecMethod.
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
TestRunMethod.
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ファイルの例です。どうぞよろしくお願いします。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?