特定ドライブ下の全フォルダパスを取得する

所謂再帰処理ですね。

コード

フォルダパスを出力させたいシートのシートモジュールに以下をコピペ。
で、GetFoldersを実行してもらえば、当該シートのA列にフォルダパスが出力されます。

Option Explicit
Private r As Long 'セルに出力させる際の行カウンター

Sub GetFolders()

    Const cnsRootDrv = "D"
    
    Dim fols As Object
    Dim fol  As Object
    
    r = 1
    
    Set fols = CreateObject("Scripting.FileSystemObject") _
                .GetDrive(cnsRootDrv).RootFolder.SubFolders
    
    If Not fols Is Nothing Then
        Call getFol(fols)
    Else
        MsgBox cnsRootDrv & "ドライブにはフォルダーが有りません!", vbExclamation
    End If
    
    Set fols = Nothing
    
End Sub
    
Sub getFol(argFol As Object)

    Dim objFSO  As Object
    Dim fol     As Variant
    Dim strPath As String
    Dim c       As Long

    On Error Resume Next
    
    For Each fol In argFol
        Me.Cells(r, "A").Value = fol.Path
        r = r + 1
        'そのフォルダ中にサブフォルダーが存在すれば再帰
        If fol.SubFolders.Count > 0 Then
            Call getFol(fol.SubFolders)
        End If
    Next fol
    
End Sub

getFolプロシージャでエラーを無視させてんのは、実行時エラー70が出て止まる事があったので。
エラーの内容は、対象のフォルダにロックがかかってる為、参照出来ないとかそんな理由っぽい。
ただ、実行結果には影響を与えてないっぽいので、とりあえず無視しときゃOKかなと…(;^ω^)