Excel2010のVBAで、
MS-DOSのcompコマンドの実行結果を取得したいのですが、
以下の方法ではうまくいきませんでした。
どのようにすればよいでしょうか。(Windows7)
------------------------------------------------------------
Sub test()
Dim wshShell As Object
Dim wshExec As Object
Dim command As String
Dim file1 As String
Dim file2 As String
Dim result As String
file1 = "C:\test\0128\test.xlsx"
file2 = "C:\test\0129\test.xlsx"
'command = "dir /d " & file1 & " " & file2 '(OK)
'command = "fc /b " & file1 & " " & file2 '(OK)
command = "comp " & file1 & " " & file2 '(NG)
'command = "echo n | comp " & file1 & " " & file2 '(NG)
Debug.Print command
Set wshShell = CreateObject("WScript.Shell")
Set wshExec = wshShell.exec("%ComSpec% /c " & command)
Do Until wshExec.Status
DoEvents
Loop
If wshExec.StdErr.AtEndOfStream = False Then
'エラー
result = wshExec.StdErr.ReadAll
Else
'正常
result = wshExec.StdOut.ReadAll
End If
Set wshExec = Nothing
Set wshShell = Nothing
MsgBox result
End Sub
------------------------------------------------------------
私が調べたサイトでは、以下のようになっていました。
Sub Test()
Dim w, x As Object
Dim c, r As String
Set w = CreateObject("WScript.Shell")
c = "comp D:\Programming\Book1.csv D:\Programming\Book2.csv"
Set x = w.Exec("%ComSpec% /c " & c)
Do While x.Status = 0
DoEvents
Loop
r = x.StdOut.ReadAll
MsgBox r
End Sub
ただ、そのサイトの説明では「%ComSpec% /c」の「/c」で実行後、コマンドプロンプトの画面が閉じる、ということでしたが、私が試したところ、閉じませんでしたが、エクセルの画面上に結果は表示されていましたので、文字列変数「r」には、間違いなく、コマンドプロンプト上で「comp」が実行され、その結果までの内容が格納されています。
お礼
エラーが発生した時だけ wshExec.StdErr.AtEndOfStream = False が「真」になると思い込んでいました。 教えていただきました方法で、 compコマンドの実行結果を正しく 取得することができました。 ありがとうございました。