Sąrašas failų ir aplankų rekursiškai naudojant Excel VBA
Paskelbimo data:
Atnaujinta:
INFORMATION > Sąrašas failų ir aplankų rekursiškai naudojant Excel VBA
2026 m. būsena ir saugus naudojimas
Išvada: pakartotinai apsilankykite kiekviename aplanke, išskirkite reikalingus failus ir grąžinkite kiekvieną antrinį aplanką į tą pačią procedūrą. Pridėkite aiškų klaidų apdorojimą ir sankryžų, simbolinių nuorodų, paslėptų aplankų ir kelių, kuriems neleidžiama prieiga, politiką.
Ką išmoksite
- Kaip „FileSystemObject“ atskleidžia aplankus, poaplankius, failus, pavadinimus ir kelius.
- Kaip rekursija sukuria visą medį ir kodėl giliems arba cikliniams medžiams reikia apsaugos priemonių.
- Kaip įrašyti rezultatus į darbalapį be lėtų operacijų po langelį dideliu mastu.
Kam tai skirta: „Excel“ naudotojams, kurie inventorizuoja valdomą „Windows“ katalogų medį.
2026 m. pozicija: pavyzdys atspindi originalų autoriaus vietinį testą. Patvirtinkite leidimus ir susiejimo elgseną savo katalogų struktūros kopijoje ir apsvarstykite galimybę naudoti „PowerShell“ arba specialų inventoriaus įrankį, skirtą labai dideliems ar saugumui jautriems medžiams.
Saugos pastaba: pradiniame straipsnyje pateiktos komandos ir konfigūracijos pavyzdžiai nebuvo pakartotinai vykdomi dabartinėje gamybos aplinkoje. Prieš taikydami, patikrinkite palaikomas versijas, atsargines kopijas, prieigos valdiklius ir atšaukimo veiksmus atskiroje bandymo aplinkoje.
Oficialūs pirminiai šaltiniai
Apžvalga.
Norėčiau aprašyti, kaip naudojant VBA ("Excel" makrokomandą) gauti failų ir aplankų sąrašą, įskaitant pakatalogius. Straipsnis skirtas žmonėms, norintiems užprogramuoti šias užduotis
- Noriu gauti visų aplanke esančių failų ar aplankų sąrašą su visais jų keliais.
- Norite atlikti aplanke esančių failų ar aplankų apdorojimą ciklu.
1. Programavimo metodas
Toliau pateikiami programavimo pavyzdžiai.
Kadangi jis sukurtas funkcijoje Function, norėčiau, kad jis būtų nukopijuotas toks, koks yra, ir kad metodo iškvietimai būtų atliekami iš 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
Jei norite jį naudoti, kaip argumentus pateikite šiuos įrašus.
- filePath・・・katalogas. Pavyzdys.)C:\Users\user\Desktop\test
- kind・・・Perduoti true, false. Jei True, grąžinamas failų sąrašas. Jei false, grąžinamas aplankų sąrašas.
- list・・・Rezultatams saugoti naudojama kolekcija. Toliau pateikiamas įgyvendinimo pavyzdys.
Toliau pateikiamas faktinio funkcijos iškvietimo įgyvendinimo pavyzdys.
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
Iškvietus getFolderOrFile, failų sąrašas arba aplankų sąrašas bus įrašytas į sąrašą. Įgyvendinimo pavyzdys yra "False", todėl aplankų sąrašas išsaugomas.
Procesą, kurį norite atlikti, aprašykite "TODO" skirsnyje, esančiame "For" sakinyje. ITEM gali būti traktuojamas kaip String kintamasis.
Nuorodos šaltinis - tai įsigyto sąrašo nustatymo į A1 procesas "Excel" programoje. (Procesas pakartotinai perrašo tą pačią ląstelę.)
2. Kodas Aprašymas.
Tai yra sistemos naudojimo instrukcijų pabaiga, po kurios pateikiamas kodo paaiškinimas.
Išsamią informaciją galima pamatyti kode, tačiau svarbiausia yra tolesnis getFolderOrFile metodo getFolderOrFile iškvietimas.
Atliekant aplankų paiešką, procesas toliau kartojamas kviečiant aplankų paieškos procesą, kuris yra visų aplankų paieškos mechanizmas.
Skambindamas savo metodui, jis pakartotinai kviečia savo metodą tol, kol aplankas randamas, ieškodamas visų aplankų.
3. santrauka
Jei reikia pagalbos, kaip naudojant VBA (Excel makrokomandas) gauti failų ir aplankų, įskaitant pakatalogius, sąrašą, žr. šį skyrių.
Dėkojame, kad žiūrėjote iki pabaigos.
■INFORMATION
Spustelėkite čia, kad pereitumėte į viršutinį puslapį su informacija.
■PROFILE
Spustelėkite čia, kad pamatytumėte profilį.
■Kontaktinė informacija.
Jei turite klausimų apie straipsnį, susisiekite su mumis čia.