Vis filer og mapper rekursivt med Excel VBA
Udgivet:
Opdateret:
Artikler › Vis filer og mapper rekursivt med Excel VBA
Status i 2026 og sikker brug
Konklusion: Besøg hver mappe rekursivt, send de filer, du har brug for, og send hver underordnet mappe tilbage til den samme procedure. Tilføj eksplicit fejlhåndtering og en politik for vejkryds, symbolske links, skjulte mapper og stier, der nægtes adgang.
Det lærer du
- Hvordan FileSystemObject afslører mapper, undermapper, filer, navne og stier.
- Hvordan rekursion bygger et komplet træ, og hvorfor dybe eller cykliske træer har brug for beskyttelse.
- Sådan skriver man resultater til et regneark uden langsomme celle-for-celle-operationer i stor skala.
Målgruppe: Excel-brugere, der inventerer et kontrolleret Windows-mappetræ.
Aktuel status i 2026: Eksemplet afspejler forfatterens oprindelige lokale test. Valider tilladelser og linkadfærd på en kopi af din mappestruktur, og overvej PowerShell eller et dedikeret lagerværktøj til meget store eller sikkerhedsfølsomme træer.
Sikkerhedsbemærkning: Kommandoerne og konfigurationseksemplerne i den oprindelige artikel er ikke kørt igen i et aktuelt produktionsmiljø. Kontrollér understøttede versioner, tag backup, og forbered en rollback i et separat testmiljø før ændringerne anvendes.
Officielle kilder
Oversigt
Nedenfor beskrives, hvordan du kan få en liste over filer og en liste over mapper, herunder undermapper, ved hjælp af VBA (Excel-makro). Artiklen er beregnet til personer, der ønsker at programmere følgende opgaver
- Jeg ønsker at få en liste over alle filer eller mapper under en mappe med deres fulde stier.
- Du vil udføre behandling i en sløjfe for filer eller mapper under en mappe.
Indholdsfortegnelse
1. Programmeringsmetode
Nedenfor er vist referenceeksempler på programmering.
Da den er oprettet i Function, vil jeg gerne have den kopieret over, som den er, og have metodekald foretaget fra 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
For at bruge den skal du angive følgende som argumenter.
- filePath···mappe. Eksempel).C:\Users\user\Desktop\test
- kind···Passer sandt, falsk. Hvis True, returnerer en liste over filer. Hvis falsk, returneres en liste over mapper.
- list···Samlingen bruges til at gemme resultaterne. Nedenfor er vist et eksempel på en implementering.
Nedenfor er vist et eksempel på en implementering af et faktisk funktionsopkald.
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
Ved at kalde getFolderOrFile gemmes en liste over filer eller en liste over mapper i listen. Implementeringseksemplet er False, så listen over mapper er gemt.
Beskriv den proces, du ønsker at udføre, i "TODO"-afsnittet i For-erklæringen. ITEM kan behandles som en String-variabel.
Referencekilden er processen med at indstille den erhvervede liste til A1 i Excel. (Processen overskriver gentagne gange den samme celle).
2. Kode Beskrivelse.
Dette er slutningen af vejledningen om, hvordan systemet skal bruges, efterfulgt af en forklaring af koden.
Detaljerne kan ses i koden, men det vigtigste punkt er det yderligere kald til getFolderOrFile i getFolderOrFile-metoden.
I processen med at søge efter mapper gentages processen yderligere ved at kalde processen med at søge efter mapper, som er en mekanisme til at søge i alle mapper.
Ved at kalde sin egen metode kalder den gentagne gange sin egen metode, så længe mappen er fundet, og søger i alle mapper.
3. resumé
Hvis du har brug for hjælp til at få en liste over filer og en liste over mapper, herunder undermapper, ved hjælp af VBA (Excel-makroer), kan du læse dette afsnit.
Det opsummerer de vigtigste trin og begrænsninger.