Sarakstīt failus un mapes rekursīvi, izmantojot Excel VBA
Publikācijas datums:
Atjaunināts:
Tehniskie raksti > Sarakstīt failus un mapes rekursīvi, izmantojot Excel VBA
2026. gada statuss un droša lietošana
Galvenais: apmeklējiet katru mapi, reģistrējiet vajadzīgos failus un katru apakšmapi nododiet tai pašai procedūrai. Pievienojiet skaidru kļūdu apstrādi un noteikumus savienojumpunktiem, simboliskajām saitēm, slēptajām mapēm un ceļiem, kuriem piekļuve ir liegta.
Ko jūs uzzināsiet
- Kā FileSystemObject atklāj mapes, apakšmapes, failus, nosaukumus un ceļus.
- Kā rekursija apstaigā visu direktoriju koku un kāpēc dziļiem vai cikliskiem kokiem ir nepieciešami aizsardzības pasākumi.
- Kā rakstīt rezultātus darblapā, neizmantojot lēnas liela mēroga darbības pa šūnai.
Kam tas paredzēts: Excel lietotājiem, kuri inventarizē kontrolētu Windows direktoriju koku.
2026. gada konteksts: paraugs atspoguļo autora sākotnējo vietējo testu. Apstipriniet atļaujas un saišu darbību jūsu direktoriju struktūras kopijā un apsveriet PowerShell vai speciālu inventarizācijas rīku ļoti lieliem vai drošības ziņā jutīgiem kokiem.
Drošības piezīme. Sākotnējā rakstā esošās komandas un konfigurācijas piemēri nav atkārtoti izpildīti pašreizējā ražošanas vidē. Pirms to lietošanas pārbaudiet atbalstītās versijas, dublējumus, piekļuves vadīklas un atcelšanas darbības atsevišķā testa vidē.
Galvenie oficiālie avoti
Pārskats
Šajā rakstā parādīts, kā ar VBA (Excel makro) rekursīvi iegūt failu un mapju sarakstu, ieskaitot apakšmapes. Piemērs aptver šādus uzdevumus.
- Iegūt visu mapē esošo failu vai apakšmapju pilno ceļu sarakstu.
- Ciklā apstrādāt mapē un tās apakšmapēs atrastos failus vai direktorijus.
Satura rādītājs
1. Risinājuma izveide
Tālāk dots rekursīvas direktoriju apstaigāšanas piemērs.
Piemērā definēta Function, ko var izsaukt no Sub procedūras. Pirms lietošanas nepazīstamā direktoriju kokā pievienojiet projektam piemērotu kļūdu apstrādi.
'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
Funkcijai jānodod šādi argumenti.
- filePath — apstaigājamais direktorijs. Piemērs: C:\Users\user\Desktop\test
- kind — True atgriež failu sarakstu, bet False — mapju sarakstu.
- list — kolekcija, kurā glabā rezultātus. Tālāk parādīts tās izmantošanas piemērs.
Tālāk parādīts funkcijas izsaukuma piemērs.
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
Pēc getFolderOrFile izsaukuma kolekcijā list atrodas failu vai mapju saraksts. Piemērā nodots False, tāpēc tiek saglabāts mapju saraksts.
For priekšraksta sadaļā "TODO" ierakstiet vajadzīgo apstrādi. Mainīgo ITEM var izmantot kā virkni.
Piemēra kods katru iegūto vērtību ieraksta Excel šūnā A1, tādēļ ciklā viena un tā pati šūna tiek atkārtoti pārrakstīta. Lai saglabātu visu sarakstu, rezultāti jāraksta dažādās rindās vai vienā reizē jānodod šūnu diapazonam.
2. Koda skaidrojums
Pēc lietošanas piemēra aplūkosim rekursijas darbību.
Galvenais ir tas, ka metode getFolderOrFile katrai atrastajai apakšmapei vēlreiz izsauc getFolderOrFile.
Šādi procedūra virzās arvien dziļāk direktoriju kokā un apstrādā visas sasniedzamās mapes.
Nepieejami ceļi, ļoti dziļi koki un cikliskas failu sistēmas saites var pārtraukt vai iesprostot apstrādi, tāpēc ražošanas risinājumā vajadzīga kļūdu apstrāde, dziļuma vai ierakstu limits un skaidra saišu politika.
3. Kopsavilkums
Šis paņēmiens ar VBA rekursīvi uzskaita failus un mapes. Pirms to lietojat nepazīstamā direktoriju kokā, nosakiet, kā rīkoties ar nepieejamiem ceļiem un failu sistēmas saitēm.