Lista filer och mappar rekursivt med Excel VBA


Datum för offentliggörande:

Uppdaterad:


Tekniska artiklar > Lista filer och mappar rekursivt med Excel VBA

2026 status och säker användning

Slutsats: Besök varje mapp rekursivt, skicka de filer du behöver och skicka tillbaka varje underordnad mapp till samma procedur. Lägg till explicit felhantering och en policy för korsningar, symboliska länkar, dolda mappar och vägrad åtkomst.

Vad du kommer att lära dig

  • Hur FileSystemObject exponerar mappar, undermappar, filer, namn och sökvägar.
  • Hur rekursion bygger ett komplett träd och varför djupa eller cykliska träd behöver skydd.
  • Hur man skriver resultat till ett kalkylblad utan långsamma cell-för-cell-operationer i stor skala.

Vem detta är till för: Excel-användare som inventerar ett kontrollerat Windows-katalogträd.

2026-kontext: Exemplet återspeglar författarens ursprungliga lokala test. Validera behörigheter och länkbeteende på en kopia av din katalogstruktur, och överväg PowerShell eller ett dedikerat inventeringsverktyg för mycket stora eller säkerhetskänsliga träd.

Säkerhetsanmärkning: Kommandona och konfigurationsexemplen i den ursprungliga artikeln har inte körts om i en aktuell produktionsmiljö. Verifiera versioner som stöds, säkerhetskopior, åtkomstkontroller och återställningssteg i en separat testmiljö innan du använder dem.

Viktiga officiella källor

Översikt.

Jag skulle vilja beskriva hur man får en lista över filer och en lista över mappar, inklusive undermappar, med hjälp av VBA (Excel-makro). Artikeln är avsedd för personer som vill programmera följande uppgifter

  • Jag vill få en lista över alla filer eller mappar under en mapp med deras fullständiga sökvägar.
  • Du vill utföra bearbetning i en slinga för filer eller mappar under en mapp.

Innehållsförteckning

  1. Programmeringsmetod
  2. Kodbeskrivning.
  3. sammanfattning

1. Programmeringsmetod

Referensexempel på programmering ges nedan.

Eftersom den skapas i Function vill jag att den kopieras över som den är och att metodanropen görs från 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

För att använda den, skicka följande som argument.

  • filePath: katalog. Exempel.)C:\Users\user\Desktop\test
  • kind: Passera sant, falskt. Om True, returnerar en lista med filer. Om den är falsk, returneras en lista med mappar.
  • list: Samlingen används för att lagra resultaten. Nedan följer ett exempel på ett genomförande.

Nedan visas en exempelimplementering av ett faktiskt funktionsanrop.

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

Om du anropar getFolderOrFile lagras en lista med filer eller en lista med mappar i listan. Implementeringsexemplet är False, så listan över mappar lagras.

Beskriv den process du vill göra i "TODO"-avsnittet i For-angivelsen. ITEM kan behandlas som en String-variabel.

Referenskällan är processen att ställa in den förvärvade listan till A1 i Excel. (Processen skriver över samma cell upprepade gånger.)

2. Kodbeskrivning.

Detta är slutet på instruktionerna om hur man använder systemet, följt av en förklaring av koden.

Detaljerna kan ses i koden, men den viktigaste punkten är det ytterligare anropet till getFolderOrFile i getFolderOrFile-metoden.

I processen för att söka efter mappar upprepas processen ytterligare genom att kalla processen för att söka efter mappar, som är en mekanism för att söka efter alla mappar.

Genom att anropa sin egen metod anropar den upprepade gånger sin egen metod så länge mappen hittas och söker i alla mappar.

3. sammanfattning

Om du behöver hjälp med att få fram en lista över filer och mappar, inklusive undermappar, med hjälp av VBA (Excel-makros) kan du läsa det här avsnittet.

Tack för att du tittade på till slutet.