Seznam datotek in map rekurzivno z Excel VBA


Datum objave:

Osveženo:


Tehnični članki > Seznam datotek in map rekurzivno z Excel VBA

Status in varna uporaba 2026

Sklep: Rekurzivno obiščite vsako mapo, oddajajte datoteke, ki jih potrebujete, in prenesite vse otroške mape nazaj v isti postopek. Dodajte izrecno ravnanje z napakami in politiko za križišča, simbolične povezave, skrite mape in poti, ki so zagotovljene z dostopom.

Kaj se boš naučil?

  • Kako Datotečni sistem Predmet razkriva mape, podmape, datoteke, imena in poti.
  • Kako rekurzija gradi popolno drevo in zakaj globoka ali ciklična drevesa potrebujejo zaščito.
  • Kako napisati rezultate na delovni list brez počasnih operacij po celicah v velikem obsegu.

Za koga je to? Excel uporabniki inventarirajo nadzorovano Windows imeniško drevo.

Kontekst za leto 2026: Vzorec odraža avtorjev izvirni lokalni test. Potrdite dovoljenja in povezati vedenje na kopijo svoje strukture imenika, in menijo PowerShell ali namensko inventar orodje za zelo velike ali varnostno občutljiva drevesa.

Varnostna opomba: Ukazi in konfiguracijski primeri v prvotnem članku niso bili ponovno predvajani v trenutnem proizvodnem okolju. Pred uporabo preveri podprte različice, varnostne kopije, nadzor dostopa in povratne korake v ločenem preskusnem okolju.

Glavni uradni viri

Pregled.

Opisati želim, kako z uporabo VBA (makro programa Excel) pridobiti seznam datotek in seznam map, vključno s podmapami. Članek je namenjen ljudem, ki želijo programirati naslednje naloge

  • Želim dobiti seznam vseh datotek ali map pod mapo z njihovimi polnimi potmi.
  • V zanki želite obdelati datoteke ali mape pod mapo.

Kazalo vsebine

  1. Metoda programiranja
  2. Opis kode.
  3. povzetek

1. Metoda programiranja

V nadaljevanju so navedeni referenčni primeri programiranja.

Ker je ustvarjen v funkciji Function, bi ga rad prekopiral tako, kot je, in klical metode iz 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

Če ga želite uporabiti, kot argumente navedite naslednje.

  • filePath: imenik. Primer.)C:\Users\user\Desktop\test
  • kind: Pass true, false. Če je True, vrne seznam datotek. Če je false, vrne seznam map.
  • list: Zbirka se uporablja za shranjevanje rezultatov. V nadaljevanju je prikazan primer izvajanja.

Primer izvajanja dejanskega klica funkcije je prikazan spodaj.

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

S klicem getFolderOrFile se seznam datotek ali seznam map shrani v seznam. Primer izvajanja je False, zato je seznam map shranjen.

Postopek, ki ga želite izvesti, opišite v razdelku "TODO" v stavku For. ITEM lahko obravnavamo kot spremenljivko String.

Referenčni vir je postopek nastavitve pridobljenega seznama na A1 v programu Excel. (Postopek večkrat prepiše isto celico.)

2. Opis kode.

To je konec navodil za uporabo sistema, ki jim sledi razlaga kode.

Podrobnosti si lahko ogledate v kodi, ključna točka pa je nadaljnji klic metode getFolderOrFile v metodi getFolderOrFile.

V postopku iskanja map se postopek nadaljuje s klicem postopka iskanja map, ki je mehanizem za iskanje vseh map.

S klicem lastne metode večkrat pokliče svojo metodo, dokler je mapa najdena, in preišče vse mape.

3. povzetek

Če potrebujete pomoč pri pridobivanju seznama datotek in seznama map, vključno s podmapami, z uporabo VBA (Excelovih makrov), glejte to poglavje.

Upamo, da je bila razlaga koristna.