じつは前回の記事ではDir関数の結果をきちんと取得できていない。
「exCommand = exCommand & " " & document.form1.fileaddr.value & "*.*"」の行でテキスト格納フォルダ(フルパス)のテキストボックスで指定したフォルダに「*.*」を文字列連結してDirコマンドのパラメータとして使用していたため、
dir c:\temp*.*
と同義となった。
そのため、『c:ドライブ配下の先頭がtempを含むファイル名(.ドットを含む)』という意味となり、tempフォルダはおろか、そのほかのファイルにもヒットせず、C:\の空き容量を示すのみとなっている。
改善方法は"*.*"の前に「¥」を追記し、ファイルが複数あった場合のコードにする。
ReadAllをReadLineに変更し、Do Untilで全行取得しきるまでループさせよう。
改善したGET_FileName関数は下記のとおり。
' ファイル一覧取得
Sub GET_FileName()Dim WshShell, oExec
Dim strTempSet WshShell = CreateObject("WScript.Shell")
' dirコマンドの実行
exCommand = "cmd /c dir /o"
exCommand = exCommand & " " & document.form1.fileaddr.value & "\*.*"
Set oExec = WshShell.Exec(exCommand)Do Until oExec.StdOut.AtEndOfStream
strTemp = strTemp & oExec.Stdout.ReadLine() & vbCrLfLoop
MsgBox strTemp
End Sub
実行すると下記のメッセージが表示される。