Listaa tiedostot ja kansiot rekursiivisesti Excel VBA:lla
Julkaistu:
Päivitetty:
Artikkelit › Listaa tiedostot ja kansiot rekursiivisesti Excel VBA:lla
Tilanne vuonna 2026 ja turvallinen käyttö
Johtopäätös: käy toistuvasti jokaisessa kansiossa, lähetä tarvitsemasi tiedostot ja siirrä jokainen alakansio takaisin samaan menettelyyn. Lisää selkeä virheenkäsittely ja käytäntö risteyksille, symbolisille linkeille, piilotetuille kansioille ja poluille, joiden käyttö on estetty.
Mitä opit
- Miten FileSystemObject paljastaa kansiot, alikansiot, tiedostot, nimet ja polut.
- Miten rekursio rakentaa kokonaisen puun ja miksi syvät tai sykliset puut tarvitsevat suojatoimenpiteitä.
- Tulosten kirjoittaminen laskentataulukkoon ilman hidasta solukohtaista toimintaa suuressa mittakaavassa.
Kenelle artikkeli on tarkoitettu: Excel-käyttäjät, jotka inventoivat ohjattua Windowsin hakemistopuuta.
Tilanne vuonna 2026: näyte heijastaa kirjoittajan alkuperäistä paikallista testiä. Vahvista käyttöoikeudet ja linkkien toiminta kopiossa hakemistorakenteesta ja harkitse PowerShellia tai erityistä inventointityökalua erittäin suurille tai tietoturva-arkaille puille.
Turvallisuushuomautus: Alkuperäisen artikkelin komentoja ja määritysesimerkkejä ei ole suoritettu uudelleen nykyaikaisessa tuotantoympäristössä. Tarkista tuetut versiot, ota varmuuskopio ja valmistele palautus erillisessä testiympäristössä ennen käyttöönottoa.
Viralliset lähteet
Yleiskatsaus
Seuraavassa kuvataan, miten saada luettelo tiedostoista ja kansioista, mukaan lukien alikansiot, käyttämällä VBA:ta (Excel-makro). Artikkeli on tarkoitettu henkilöille, jotka haluavat ohjelmoida seuraavat tehtävät
- Haluan saada luettelon kaikista kansion alla olevista tiedostoista tai kansioista ja niiden täydellisistä poluista.
- Haluat suorittaa käsittelyn silmukassa kansiossa oleville tiedostoille tai kansioille.
Sisällysluettelo
1. Ohjelmointimenetelmä
Seuraavassa annetaan esimerkkejä ohjelmoinnista.
Koska se on luotu funktiossa Function, haluaisin, että se kopioidaan sellaisenaan ja että metodikutsut tehdään Subista.
'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
Jos haluat käyttää sitä, anna seuraavat argumentit.
- filePath···hakemisto. Esimerkki).C:\Users\user\Desktop\test
- kind···Pass true, false. Jos True, palauttaa luettelon tiedostoista. Jos false, palauttaa luettelon kansioista.
- list···Kokoelmaa käytetään tulosten tallentamiseen. Jäljempänä esitetään esimerkkitoteutus.
Alla on esimerkki varsinaisen Function-kutsun toteutuksesta.
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
Kutsu getFolderOrFile tallentaa luettelon tiedostoista tai luettelon kansioista luetteloon. Toteutusesimerkki on False, joten kansioluettelo tallennetaan.
Kuvaile prosessi, jonka haluat tehdä For-lausekkeen TODO-osiossa. ITEM voidaan käsitellä merkkijonomuuttujana.
Vertailulähde on prosessi, jossa hankittu luettelo asetetaan Excelin A1-luetteloon. (Prosessi korvaa toistuvasti saman solun).
2. Koodi Kuvaus.
Järjestelmän käyttöohjeet päättyvät tähän, ja sen jälkeen seuraa koodin selitys.
Yksityiskohdat ovat nähtävissä koodissa, mutta tärkeintä on kutsu getFolderOrFile-metodin getFolderOrFile-kutsuun.
Kansioiden hakuprosessissa prosessi toistetaan edelleen kutsumalla kansioiden hakuprosessia, joka on kaikkien kansioiden hakumekanismi.
Kutsumalla omaa metodiaan se kutsuu toistuvasti omaa metodiaan niin kauan kuin kansio löytyy, etsien kaikkia kansioita.
3. yhteenveto
Jos tarvitset apua siihen, miten saat luettelon tiedostoista ja kansioista, mukaan lukien alikansiot, käyttämällä VBA:ta (Excel-makroja), tutustu tähän osioon.
Tässä ovat tärkeimmät huomioitavat vaiheet ja rajoitukset.
■Artikkelit
■Profiili
■Yhteystiedot