- ベストアンサー
Dir関数について
MyPath = "c:\test\" MyName = Dir(MyPath, vbDirectory) Do While MyName <> "" If MyName <> "." And MyName <> ".." Then Debug.Print MyName End If MyName = Dir Loop ------------------------------------------------- いきなりコーディングを紹介しましたが、 上記だと"C:\test\"の直下のファイル・フォルダしかデバッグアウトされませんが、 "C:\test\sample"のように、"C:\test\"配下にまだフォルダがあり、 それらを表示させるにはどのようにしたらよろしいでしょうか? 大変見づらくて申し訳ありませんが、宜しくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こういうのは再帰を使用すると、つくりが簡単になってわかりやすいと思います。 ただし、Dir 関数は、続きを表示させるときには引数を指定せずに実行しますが、これが下の階層のフォルダの表示から戻ってきたときに、下の階層のフォルダの続きを検索しようとしてしまうので、ちょっと工夫が必要です。 ↓こんな感じでどうでしょうか。 Sub Command1_Click() Call ListFolder("C:\Test") End Sub Private Sub ListFolder(ByVal strFolderName As String) Dim strSubFolder As String Dim strFullPath As String Dim strSubArray() As String Dim intIndex As Integer Dim i As Integer ReDim strSubArray(0) strSubFolder = Dir(strFolderName & "\*", vbDirectory) Do While strSubFolder <> "" If strSubFolder <> "." And strSubFolder <> ".." Then strFullPath = strFolderName & "\" & strSubFolder If GetAttr(strFullPath) = vbDirectory Then Debug.Print strFullPath intIndex = UBound(strSubArray) + 1 ReDim Preserve strSubArray(intIndex) strSubArray(intIndex) = strSubFolder End If End If strSubFolder = Dir Loop For i = 1 To UBound(strSubArray) strFullPath = strFolderName & "\" & strSubArray(i) Call ListFolder(strFullPath) Next i End Sub
その他の回答 (1)
- 2ch
- ベストアンサー率51% (64/125)
お礼
ありがとうございます。 参考にさせていただきますね。
お礼
コードまでご丁寧にお教えいただき誠にありがとうございました。 うまく動作しました、これを流用させて頂きますね。