|
▼もとあし さん:
>>CmdTxt = """dir" & Dir_Opt & " " & """" & myPath & "\" & Target_File & """"""
>ここで、""がたくさんあるのが、どういう意味なのか、わかりません。が、
>もう少し記述の法則など調べてみます。
VBA上で、"を認識させるには、""とする必要があります。
結果を確認してみてください。
Sub Test1()
Debug.Print """"
Debug.Print """"""
End Sub
>>Set WSH = CreateObject("WScript.Shell")
>>Set Cmd = WSH.Exec("%ComSpec% /C " & CmdTxt)
>ここの%ComSpec% は環境変数というものですか?(%は何をしているのでしょうか?)
その通りです。コマンドラインで環境変数を使う場合は、%で括ります。
試しにコマンドプロンプトを開いて
set と入力してみてください。
その後、echo %変数名%(%OS%とか)
標準出力(表示)されるのがわかると思います。
このへんはDOSとかBATファイルとか勉強してみてください。
>それでC:\WINDOWS\system32\cmd.exeが起動されるようですが、
>コマンドプロンプトとは違うものですか?
同じです。Win9xでは、cmd.exeではなくてcommand.exeになりますので、
OS依存を避ける為にComSpecを使いました。
>また、これを表示しないようにする方法はありますか?
Execメソッドではできません。
Runメソッドならできますが、標準出力を直接取得することはできない為、
リダイレクトでテキストファイルに出力し、それを読み込むことできます。
(そこまでやるなら、別の方法でやるほうが良いと思いますが・・)
とりあえずTest2()を実行するとtxtファイルができます。
どこにできるかは、調べられるはずです^^
>なのでお忙しいところ申し訳ありませんが、もう少しお付き合いくださって、
>コードの解説をもしいただければ嬉しいです。
>よろしくお願いします。
Option Explicit
Sub Test()
Dim WSH As Object
Dim Cmd As Object
Dim CmdTxt As String
Dim myPath As String
Dim i As Long
Const Target_File As String = "*.xls"
Const Dir_Opt As String = "/S /B /A:-D" 'Dirオプションの指定(コマンドプロンプトで確認)
myPath = "e:Work" 'ルートパスの指定
CmdTxt = """dir" & Dir_Opt & " " & """" & myPath & "\" & Target_File & """"""
'修正
CmdTxt = "%ComSpec% /C " & CmdTxt
'確認用に追加。イミディエイトで確認
'これをコマンドプロンプトに貼り付けて実行すると、同じ結果が表示されるはず。
Debug.Print CmdTxt
'標準出力を取得するのにWScript.Shell.Exceを使用する。
Set WSH = CreateObject("WScript.Shell")
Set Cmd = WSH.Exec(CmdTxt)
i = 1
'実行結果の標準出力を一行づつ読み込んでセルに書き出し
Do Until Cmd.StdOut.AtEndOfStream
Cells(i, 1).Value = Cmd.StdOut.ReadLine
i = i + 1
Loop
Set Cmd = Nothing
Set WSH = Nothing
End Sub
Sub Test2()
Dim WSH As Object
Dim CmdTxt As String
Dim myPath As String
Dim i As Long
Const Target_File As String = "*.xls"
Const Dir_Opt As String = "/S /B /A:-D" 'Dirオプションの指定(コマンドプロンプトで確認)
myPath = "e:Work" 'ルートパスの指定
CmdTxt = """dir" & Dir_Opt & " " & """" & myPath & "\" & Target_File & """"""
'修正
CmdTxt = "%ComSpec% /C " & CmdTxt & " > %HOMEPATH%\TestDir.txt"
'確認用に追加。イミディエイトで確認
Debug.Print CmdTxt
Set WSH = CreateObject("WScript.Shell")
'Runメソッドに変更
WSH.Run CmdTxt, 0
Set WSH = Nothing
End Sub
|
|