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

Secinājums: atkārtoti apmeklējiet katru mapi, izsniedziet vajadzīgos failus un nododiet visas pakārtotās mapes atpakaļ tai pašai procedūrai. Pievienojiet skaidru kļūdu apstrādi un politiku krustojumiem, simboliskām saitēm, slēptām mapēm un ceļiem, kuriem ir liegta piekļuve.

Ko jūs uzzināsiet

  • Kā FileSystemObject atklāj mapes, apakšmapes, failus, nosaukumus un ceļus.
  • Kā rekursija veido pilnīgu 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 ir paredzēts: Excel lietotāji, kuri veic 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.

Vēlos aprakstīt, kā, izmantojot VBA (Excel makro), iegūt failu sarakstu un mapju sarakstu, tostarp apakšmapes. Šis raksts ir paredzēts cilvēkiem, kuri vēlas ieprogrammēt šādus uzdevumus.

  • Es gribu iegūt sarakstu ar visiem failiem vai mapēm, kas atrodas mapē, norādot to pilnos ceļus.
  • Failu vai mapju, kas atrodas mapē, apstrādi vēlaties veikt cilpveidā.

Satura rādītājs

  1. Programmēšanas metode
  2. Kods Apraksts.
  3. kopsavilkums

1. Programmēšanas metode

Tālāk ir sniegti atsauces piemēri par programmēšanu.

Tā kā tas ir izveidots funkcijā Function, es vēlētos, lai tas tiktu pārkopēts, kā tas ir, un metodes izsaukumi tiktu veikti no 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

Lai to izmantotu, kā argumentus norādiet.

  • filePath: katalogs. Piemērs.)C:\Users\user\Desktop\test
  • kind: Pass true, false. Ja True, tiek atgriezts failu saraksts. Ja false, tiek atgriezts mapju saraksts.
  • list: Kolekcija tiek izmantota rezultātu glabāšanai. Tālāk ir sniegts implementācijas piemērs.

Tālāk ir parādīts faktiskā funkcijas izsaukuma implementācijas 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

Izsaucot getFolderOrFile, failu saraksts vai mapju saraksts tiks saglabāts sarakstā. Īstenošanas piemērs ir False, tāpēc mapju saraksts tiek saglabāts.

Aprakstiet procesu, ko vēlaties veikt, For paziņojuma sadaļā "TODO". ITEM var uzskatīt par virknes mainīgo.

Atsauces avots ir iegūto sarakstu iestatīšanas process A1 programmā Excel. (Process atkārtoti pārraksta vienu un to pašu šūnu.)

2. Kods Apraksts.

Tas ir sistēmas lietošanas pamācības beigas, kam seko koda skaidrojums.

Sīkāka informācija ir redzama kodā, bet galvenais ir turpmākais izsaukums getFolderOrFile metodē getFolderOrFile.

Mapeņu meklēšanas procesā process tālāk tiek atkārtots, izsaucot mapju meklēšanas procesu, kas ir visu mapju meklēšanas mehānisms.

Izsaucot savu metodi, tā atkārtoti izsauc savu metodi, kamēr vien mape ir atrasta, meklējot visas mapes.

3. kopsavilkums

Ja nepieciešama palīdzība, kā iegūt failu un mapju sarakstu, tostarp apakšmapes, izmantojot VBA (Excel makrus), skatiet šo sadaļu.

Paldies, ka noskatījāties līdz beigām.