Listarea recursivă a fișierelor și folderelor cu Excel VBA
Data publicării:
Actualizat:
Articole tehnice > Listarea recursivă a fișierelor și folderelor cu Excel VBA
Contextul din 2026 și utilizarea în siguranță
Concluzie: vizitați recursiv fiecare folder, emiteți fișierele de care aveți nevoie și transferați fiecare dosar copil înapoi în aceeași procedură. Adăugați gestionarea explicită a erorilor și o politică pentru joncțiuni, legături simbolice, dosare ascunse și căi cu acces interzis.
Ce vei învăța
- Cum FileSystemObject expune folderele, subfolderele, fișierele, numele și căile.
- Cum construiește recursiunea un arbore complet și de ce arborii adânci sau ciclici au nevoie de măsuri de protecție.
- Cum să scrieți rezultatele într-o foaie de lucru fără operațiuni lente celulă cu celulă la scară largă.
Cui se adresează: utilizatorii Excel care inventează un arbore de directoare Windows controlat.
Contextul din 2026: eșantionul reflectă testul local original al autorului. Validați permisiunile și comportamentul linkurilor pe o copie a structurii dvs. de directoare și luați în considerare PowerShell sau un instrument de inventar dedicat pentru arbori foarte mari sau sensibili la securitate.
Notă de siguranță: comenzile și exemplele de configurare din articolul original nu au fost reluate într-un mediu de producție actual. Verificați versiunile acceptate, copiile de rezervă, controalele de acces și pașii de retragere într-un mediu de testare separat înainte de a le aplica.
Surse oficiale principale
Prezentare generală
Vom descriu cum să obțin o listă de fișiere și o listă de foldere, inclusiv subfoldere, utilizând VBA (macro Excel). Articolul este destinat persoanelor care doresc să programeze următoarele sarcini
- Doresc să obțin o listă a tuturor fișierelor sau folderelor din cadrul unui dosar cu căile lor complete.
- Doriți să efectuați procesarea într-o buclă pentru fișierele sau folderele din cadrul unui dosar.
1. Metoda de programare
Exemple de programare de referință sunt prezentate mai jos.
Având în vedere că este creat în Function, aș dori să fie copiat așa cum este și apelurile de metode să fie făcute din Sub.
'Parameter Examples
'## filePath C:\Users\user\Desktop\test\
'## kind false:folder, true:file
'## list
Function getFolderOrFile(filePath As String, kind As Boolean, list As Collection) As Collection
'delete\
Dim filePathEnd As String
filePathEnd = Right(filePath, 1)
If filePathEnd = "\" Then
filePath = Left(filePath, Len(filePath) - 1)
End If
'Folder existence check
Dim result As String
result = Dir(filePath, vbDirectory)
If result = "" Then
MsgBox "File does not exist!"
Exit Function
End If
If kind Then
Dim buf As String
buf = Dir(filePath & "\*.*")
Do While buf <> ""
list.Add filePath & "\" & buf
buf = Dir()
Loop
Else
list.Add filePath
End If
Dim folder As Object
With CreateObject("Scripting.FileSystemObject")
For Each folder In .GetFolder(filePath).SubFolders
getFolderOrFile folder.Path, kind, list
Next folder
End With
End Function
Pentru a o utiliza, treceți următoarele ca argumente.
- filePath: director. Exemplu.)C:\Users\user\Desktop\test
- kind: Treceți true, false. Dacă este adevărat, se returnează o listă de fișiere. Dacă este falsă, se returnează o listă de dosare.
- list: Colecția este utilizată pentru a stoca rezultatele. Mai jos este prezentat un exemplu de implementare.
Mai jos este prezentat un exemplu de implementare a unui apel de funcție real.
Sub test()
Dim list As Collection
Set list = New Collection
getFolderOrFile "C:\Users\user\Desktop\test", False, list
Dim item As Variant
For Each item In list
'------TODO------
ThisWorkbook.Worksheets(1).Cells(1, 1).Value = item
Next
End Sub
Apelul getFolderOrFile va stoca o listă de fișiere sau o listă de dosare în listă. Exemplul de implementare este False, astfel încât lista de dosare este stocată.
Descrieți procesul pe care doriți să îl efectuați în secțiunea "TODO" din declarația For. ITEM poate fi tratată ca o variabilă de tip String.
Sursa de referință este procesul de setare a listei achiziționate la A1 în Excel. (Procesul suprascrie în mod repetat aceeași celulă.)
2. Cod Descriere.
Aici se încheie instrucțiunile de utilizare a sistemului, urmate de o explicație a codului.
Detaliile pot fi văzute în cod, dar punctul cheie este apelul ulterior la getFolderOrFile în metoda getFolderOrFile.
În procesul de căutare a dosarelor, procesul se repetă în continuare prin apelarea procesului de căutare a dosarelor, care este un mecanism de căutare a tuturor dosarelor.
Prin apelarea propriei metode, aceasta își apelează în mod repetat propria metodă atât timp cât dosarul este găsit, căutând toate dosarele.
3. rezumat
Dacă aveți nevoie de ajutor cu privire la modul de obținere a unei liste de fișiere și a unei liste de foldere, inclusiv subfoldere, utilizând VBA (macro-uri Excel), consultați această secțiune.
Sperăm că explicația a fost utilă.