指定したフォルダーのすべてのサブフォルダーをループするVBAスクリプトを探しています。すべてのサブフォルダーと言うとき、指定されたフォルダー内の各フォルダー、その中の各フォルダー、およびその中の各フォルダーを意味します...理論的には、ネストされたサブフォルダーは無限にありますが、実際にはおそらく3を超えませんまたは4. VBA Scripting Runtimeオブジェクトを使用しているため、フォルダーにループしたら、いくつかのファイルのプロパティを確認できます(ただし、その部分の実行方法は知っています)。
ご協力ありがとうございました!
この質問は、既知のディレクトリを含む以前の質問にリストされた「類似の」質問とは異なりますが、ここでの必要は、既知および未知のディレクトリを見つけることでした。サブディレクトリの複数のレイヤーも必要でした。 「重複」を発動する前に、質問を読んでください。
簡単なフォルダをドリルダウンします。
sub sample()
Dim FileSystem As Object
Dim HostFolder As String
HostFolder = "C:\"
Set FileSystem = CreateObject("Scripting.FileSystemObject")
DoFolder FileSystem.GetFolder(HostFolder)
end sub
Sub DoFolder(Folder)
Dim SubFolder
For Each SubFolder In Folder.SubFolders
DoFolder SubFolder
Next
Dim File
For Each File In Folder.Files
' Operate on each file
Next
End Sub
また、Richの再帰的な答え、非再帰的な方法を補完するために。
Public Sub NonRecursiveMethod()
Dim fso, oFolder, oSubfolder, oFile, queue As Collection
Set fso = CreateObject("Scripting.FileSystemObject")
Set queue = New Collection
queue.Add fso.GetFolder("your folder path variable") 'obviously replace
Do While queue.Count > 0
Set oFolder = queue(1)
queue.Remove 1 'dequeue
'...insert any folder processing code here...
For Each oSubfolder In oFolder.SubFolders
queue.Add oSubfolder 'enqueue
Next oSubfolder
For Each oFile In oFolder.Files
'...insert any file processing code here...
Next oFile
Loop
End Sub
FIFO動作にキューを使用するか(上記参照)、または再帰アプローチと同じ順序で処理されるLIFO動作にスタックを使用できます(Set oFolder = queue(1)
Set oFolder = queue(queue.Count)
でqueue.Remove(1)
をqueue.Remove(queue.Count)
で置き換え、おそらく変数の名前を変更します...)