• ベストアンサー

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\"配下にまだフォルダがあり、 それらを表示させるにはどのようにしたらよろしいでしょうか? 大変見づらくて申し訳ありませんが、宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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

noname#149114
質問者

お礼

コードまでご丁寧にお教えいただき誠にありがとうございました。 うまく動作しました、これを流用させて頂きますね。

その他の回答 (1)

  • 2ch
  • ベストアンサー率51% (64/125)
回答No.1
参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=403181
noname#149114
質問者

お礼

ありがとうございます。 参考にさせていただきますね。

関連するQ&A