Elencare ricorsivamente file e cartelle con Excel VBA


Data di pubblicazione:

Aggiornato:


Articoli > Elencare ricorsivamente file e cartelle con Excel VBA

2026 stato e uso sicuro

Conclusione: Visitare ricorsivamente ogni cartella, emettere i file di cui hai bisogno, e passare ogni cartella bambino indietro nella stessa procedura. Aggiungi una gestione esplicita degli errori e una politica per le giunzioni, i link simbolici, le cartelle nascoste e i percorsi segnalati dall'accesso.

Cosa imparerai

  • Come funziona FileSystem Oggetto espone cartelle, sottocartelle, file, nomi e percorsi.
  • Come la ricorsione costruisce un albero completo e perché gli alberi profondi o ciclici hanno bisogno di salvaguardie.
  • Come scrivere i risultati a un foglio di lavoro senza lente operazioni di cella per cella su larga scala.

Destinatari: Gli utenti di Excel inventano un albero di directory controllato di Windows.

Nota di aggiornamento (2026): Il campione riflette il test locale originale dell'autore. Convalida autorizzazioni e link comportamentali su una copia della struttura della directory, e consideri PowerShell o uno strumento di inventario dedicato per alberi molto grandi o sensibili alla sicurezza.

Nota di sicurezza: i comandi e gli esempi di configurazione dell'articolo originale non sono stati rieseguiti in un ambiente di produzione moderno. Prima di applicarli, verifica versioni supportate, backup, controlli di accesso e procedura di rollback in un ambiente di prova isolato.

Fonti primarie ufficiali

Panoramica

Questa sezione descrive come ottenere un elenco di file e un elenco di cartelle, comprese le sottocartelle, utilizzando VBA (macro di Excel). L'articolo si rivolge a coloro che desiderano programmare i seguenti compiti

  • Voglio ottenere un elenco di tutti i file o le cartelle sotto una cartella con i loro percorsi completi.
  • Si desidera eseguire l'elaborazione in un ciclo per i file o le cartelle sotto una cartella.

Indice dei contenuti

  1. Metodo di programmazione
  2. Codice Descrizione.
  3. sintesi

1. Metodo di programmazione

Di seguito sono riportati esempi di programmazione di riferimento.

Poiché viene creato in Function, vorrei che venisse copiato così com'è e che le chiamate ai metodi venissero effettuate da 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

Per utilizzarlo, passate i seguenti argomenti.

  • filePath: directory. Esempio.) C:\Users\user\Desktop\test
  • kind: Passare vero, falso. Se Vero, restituisce un elenco di file. Se false, restituisce un elenco di cartelle.
  • list: L'insieme viene utilizzato per memorizzare i risultati. Di seguito è riportato un esempio di implementazione.

Di seguito è riportato un esempio di implementazione di una chiamata di funzione.

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

La chiamata a getFolderOrFile memorizza un elenco di file o un elenco di cartelle in un elenco. L'esempio di implementazione è Falso, quindi l'elenco delle cartelle viene memorizzato.

Descrivete il processo che volete eseguire nella sezione "TODO" dell'istruzione For. ITEM può essere trattato come una variabile String.

La fonte di riferimento è il processo di impostazione dell'elenco acquisito in A1 in Excel. (Il processo sovrascrive ripetutamente la stessa cella.)

2. Codice Descrizione.

Qui finiscono le istruzioni per l'uso del sistema, seguite da una spiegazione del codice.

I dettagli possono essere visti nel codice, ma il punto chiave è l'ulteriore chiamata a getFolderOrFile nel metodo getFolderOrFile.

Nel processo di ricerca delle cartelle, il processo viene ulteriormente ripetuto richiamando il processo di ricerca delle cartelle, che è un meccanismo di ricerca di tutte le cartelle.

Chiamando il proprio metodo, richiama ripetutamente il proprio metodo finché la cartella viene trovata, cercando in tutte le cartelle.

3. sintesi

Se avete bisogno di aiuto per ottenere un elenco di file e un elenco di cartelle, comprese le sottocartelle, utilizzando VBA (macro di Excel), consultate questa sezione.

■INFORMATION

Articoli


■PROFILE

Profilo


■Contatti

Contatti