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ä
  2. Koodi Kuvaus.
  3. Yhteenveto

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.