Note: The other languages of the website are Google-translated. Back to English

Come elencare tutti i file nella cartella e nelle sottocartelle in un foglio di lavoro?

Hai mai provato a elencare tutti i nomi di file da una cartella in un foglio di lavoro inclusi i file che si trovano nelle sue sottocartelle? In effetti, non esiste un modo diretto per elencare i nomi di file da una cartella e dalla sua sottocartella in Excel, tuttavia, oggi introdurrò alcuni trucchi rapidi per risolvere questo lavoro.

Elenca tutti i nomi di file nella cartella e nella sottocartella con il codice VBA

Elenca tutti i nomi di file nella cartella e nella sottocartella in modo rapido e semplice con Kutools per Excel


Normalmente, Excel non ha funzionalità integrate per gestire questa attività, ma è possibile applicare il seguente codice VBA per completare questo problema.

1. Attiva un nuovo foglio di lavoro che elencherà i nomi dei file.

2. Tieni premuto il ALT + F11 chiavi in ​​Excel e apre il file Microsoft Visual Basic, Applications Edition finestra.

3. Clic inserire > Moduloe incolla il codice seguente nel file Finestra del modulo.

Codice VBA: elenca tutti i nomi di file nella cartella e nella sottocartella

Sub MainList()
'Updateby Extendoffice
Set folder = Application.FileDialog(msoFileDialogFolderPicker)
If folder.Show <> -1 Then Exit Sub
xDir = folder.SelectedItems(1)
Call ListFilesInFolder(xDir, True)
End Sub
Sub ListFilesInFolder(ByVal xFolderName As String, ByVal xIsSubfolders As Boolean)
Dim xFileSystemObject As Object
Dim xFolder As Object
Dim xSubFolder As Object
Dim xFile As Object
Dim rowIndex As Long
Set xFileSystemObject = CreateObject("Scripting.FileSystemObject")
Set xFolder = xFileSystemObject.GetFolder(xFolderName)
rowIndex = Application.ActiveSheet.Range("A65536").End(xlUp).Row + 1
For Each xFile In xFolder.Files
  Application.ActiveSheet.Cells(rowIndex, 1).Formula = xFile.Name
  rowIndex = rowIndex + 1
Next xFile
If xIsSubfolders Then
  For Each xSubFolder In xFolder.SubFolders
    ListFilesInFolder xSubFolder.Path, True
  Next xSubFolder
End If
Set xFile = Nothing
Set xFolder = Nothing
Set xFileSystemObject = Nothing
End Sub
Function GetFileOwner(ByVal xPath As String, ByVal xName As String)
Dim xFolder As Object
Dim xFolderItem As Object
Dim xShell As Object
xName = StrConv(xName, vbUnicode)
xPath = StrConv(xPath, vbUnicode)
Set xShell = CreateObject("Shell.Application")
Set xFolder = xShell.Namespace(StrConv(xPath, vbFromUnicode))
If Not xFolder Is Nothing Then
  Set xFolderItem = xFolder.ParseName(StrConv(xName, vbFromUnicode))
End If
If Not xFolderItem Is Nothing Then
  GetFileOwner = xFolder.GetDetailsOf(xFolderItem, 8)
Else
  GetFileOwner = ""
End If
Set xShell = Nothing
Set xFolder = Nothing
Set xFolderItem = Nothing
End Function

4. Dopo aver incollato il codice nel modulo, premere F5 chiave per eseguire questo codice e un file Macro si apre la finestra di dialogo, selezionare il file Elenco principale nome della macro, quindi fare clic su Correre pulsante, vedi screenshot:

doc list file nella cartella sottocartella 1

5. E nella Scopri la nostra gamma finestra, seleziona la cartella in cui desideri elencare tutti i nomi di file comprese le sottocartelle, vedi screenshot:

doc list file nella cartella sottocartella 2

6. Dopo aver specificato la cartella, fare clic su OK pulsante e tutti i nomi di file nella cartella e le sue sottocartelle sono stati elencati nel foglio di lavoro corrente dalla cella A2, vedere screenshot:

doc list file nella cartella sottocartella 3
1
doc list file nella cartella sottocartella 4

Con il codice sopra, puoi semplicemente elencare i nomi dei file, a volte, devi elencare altri attributi, come la dimensione del file, il tipo di file, l'ora di creazione, la cartella contenente e così via. Kutools for Excel contiene una funzione utile - Elenco nomi file, con questa funzione è possibile elencare rapidamente tutti o specifici tipi di nomi di file in una cartella e nelle sue sottocartelle.

Kutools for Excel : con oltre 300 utili componenti aggiuntivi di Excel, da provare gratuitamente senza limitazioni in 30 giorni.

Dopo l'installazione Kutools for Excel, eseguire i seguenti passaggi:

1. Clic Impresa > Importa ed esporta > Elenco nomi file, vedi screenshot:

2. Nel Elenco nomi file finestra di dialogo, eseguire le seguenti operazioni:

A: Fare clic su doc list file nella cartella sottocartella 7pulsante per scegliere la cartella in cui si desidera elencare i nomi dei file;

B: Specificare il tipo di file che si desidera elencare dal file Tipo di file sezione;

C: Selezionare un'unità di dimensione del file che si desidera visualizzare dal file Unità dimensione file .

Note:: Per elencare i nomi dei file dalla sottocartella, controllare Includi file nelle sottodirectory, puoi anche controllare il file Includi file e cartelle nascosti di cui hai bisogno. Se controlli Crea collegamenti ipertestuali opzione, creerà collegamenti ipertestuali per ogni nome di file e cartella.

Scarica e prova gratuita ora!

3. Quindi fare clic OK pulsante, tutti i file contenuti nella cartella selezionata e le sue sottocartelle sono stati visualizzati con i seguenti attributi in un nuovo foglio di lavoro. Vedi screenshot:

doc list file nella cartella sottocartella 8

Fare clic per conoscere ulteriori dettagli su questa utility Elenco nomi file.

Scarica e prova gratuitamente Kutools per Excel ora!


Kutools for Excel: con più di 300 utili componenti aggiuntivi di Excel, liberi di provare senza limitazioni in 30 giorni. Scarica e prova gratuita ora!

I migliori strumenti per la produttività in ufficio

Kutools per Excel risolve la maggior parte dei tuoi problemi e aumenta la tua produttività dell'80%

  • Riutilizzo: Inserisci rapidamente formule complesse, grafici e tutto ciò che hai usato prima; Crittografa celle con password; Crea mailing list e invia email ...
  • Bar Super Formula (modifica facilmente più righe di testo e formula); Layout di lettura (leggi e modifica facilmente un gran numero di celle); Incolla su intervallo filtrato...
  • Unisci celle / righe / colonne senza perdere dati; Contenuto delle celle divise; Combina righe / colonne duplicate... Impedisci celle duplicate; Confronta intervalli...
  • Seleziona Duplica o Unico Righe; Seleziona Righe vuote (tutte le celle sono vuote); Super Find e Fuzzy Find in molte cartelle di lavoro; Selezione casuale ...
  • Copia esatta Più celle senza modificare il riferimento della formula; Riferimenti di creazione automatica a più fogli; Inserisci punti elenco, Caselle di controllo e altro ...
  • Estrai testo, Aggiungi testo, Rimuovi per posizione, Rimuovi spazio; Creare e stampare totali parziali di paging; Converti contenuto e commenti tra celle...
  • Super filtro (salva e applica schemi di filtri ad altri fogli); Ordinamento avanzato per mese / settimana / giorno, frequenza e altro; Filtro speciale in grassetto, corsivo ...
  • Combina cartelle di lavoro e fogli di lavoro; Unisci tabelle in base a colonne chiave; Suddividi i dati in più fogli; Conversione in batch xls, xlsx e PDF...
  • Più di 300 potenti funzionalità. Supporta Office/Excel 2007-2021 e 365. Supporta tutte le lingue. Facile implementazione nella tua azienda o organizzazione. Funzionalità complete Prova gratuita di 30 giorni. Garanzia di rimborso di 60 giorni.
scheda kte 201905

Scheda Office porta l'interfaccia a schede a Office e semplifica notevolmente il lavoro

  • Abilita la modifica e la lettura a schede in Word, Excel, PowerPoint, Publisher, Access, Visio e Project.
  • Apri e crea più documenti in nuove schede della stessa finestra, piuttosto che in nuove finestre.
  • Aumenta la produttività del 50% e riduce ogni giorno centinaia di clic del mouse!
fondo officetab
Commenti (20)
Ancora nessuna valutazione. Puoi essere il primo a votare!
Questo commento è stato fatto dal moderatore sul sito
Buon articolo Grazie :D
Questo commento è stato fatto dal moderatore sul sito
caro, grazie per questa meravigliosa utilità.....!!! anilkumar
Questo commento è stato fatto dal moderatore sul sito
COME FARE FUNZIONARE QUESTA QUERY PER OTTENERE I NOME DEI FILE ELENCATI DALLA cella B2 invece di A2?
Questo commento è stato fatto dal moderatore sul sito
Ciao, Satish,
Il codice seguente può aiutarti a inserire i nomi dei file in qualsiasi cella selezionata, provalo:

Sub MainList()
On Error Resume Next
Set xRg = Application.InputBox("Seleziona una cella in cui inserire i nomi dei file:", "KuTools per Excel", Selection.Address, , , , , 8)
Se xRg non è niente, esci da Sub
Imposta xRg = xRg(1)
Imposta cartella = Application.FileDialog(msoFileDialogFolderPicker)
Se Folder.Show <> -1 Quindi esci da Sub
xDir = Folder.SelectedItems(1)
Elenco chiamateFilesInFolder(xRg, xDir, True)
End Sub
Sub ListFilesInFolder(ByVal xRg As Range, ByVal xFolderName As String, ByVal xIsSubfolders As Boolean)
Dim xFileSystemObject come oggetto
Dim xCartella come oggetto
Dim xSubFolder come oggetto
Dim xFile come oggetto
Dim rowIndex per tutto il tempo
Imposta xFileSystemObject = CreateObject ("Scripting.FileSystemObject")
Imposta xCartella = xFileSystemObject.GetFolder(xFolderName)
indice di riga = 1
Per ogni xFile in xFolder.Files
xRg.Formula = xFile.Nome
Imposta xRg = xRg.Offset(rowIndex)
indice di riga = 1
Avanti xFile
Se xIsSottocartelle Allora
Per ogni xSubFolder in xFolder.SubFolders
ListFilesInFolder xRg, xSubFolder.Path, True
Avanti xSottocartella
End If
Imposta xFile = Niente
Imposta xCartella = Niente
Imposta xFileSystemObject = Niente
End Sub
Questo commento è stato fatto dal moderatore sul sito
grande!!! lo adoro, grazie
Questo commento è stato fatto dal moderatore sul sito
Non sono sicuro... ma considera le cartelle lunghe. ho scritto un codice simile e non riesce dove il percorso della cartella/del file supera i 256 caratteri? Pensieri per favore?
Questo commento è stato fatto dal moderatore sul sito
Grazie mille per l'utile articolo!
Come posso aggiornare automaticamente l'elenco e individuare le modifiche?
Questo commento è stato fatto dal moderatore sul sito
Questo mi ha aiutato a convertire il mio codice per ottenere la chiamata ricorsiva, ma mi chiedo come usi gli oggetti. Preferisco definire i miei oggetti per quello che sono, siano essi cartelle di lavoro, fogli di lavoro o oggetti del file system. (dim wbDest come excel.workbook, ad esempio dim wsDest come excel.worksheet. In questo modo non devo mai preoccuparmi di quale sia il foglio attivo.

Mi sono anche chiesto dell'uso di .show - if.show <>-1, e non posso fare a meno di pensare che sarebbe più facile per le persone capire se invece tu usassi if.show = false.

E in termini di scrittura alla destinazione, ho sentito che l'uso di celle e formule sembrava essere molto lontano

Quindi nel mio codice ho, ad esempio,
wsDest.Range("B" & CurRow) = fil.name
(CurRow = Riga corrente)

Non sto criticando, mi chiedo solo se lo fai in questo modo per qualsiasi motivo diverso dalle preferenze personali. - Sempre pronto ad imparare


Ma a parte questo grazie per l'aiuto
Questo commento è stato fatto dal moderatore sul sito
Grazie per questo codice, mi ha aiutato con una richiesta di lavoro, ora sono in grado di importare questi risultati in Access per un'ulteriore trasformazione. Apprezzo.
Questo commento è stato fatto dal moderatore sul sito
Il sub "GetFileOwner()" nel codice sopra non viene utilizzato.
Questo commento è stato fatto dal moderatore sul sito
Ciao, jumpjack,
Il codice sopra funziona bene nel mio Excel, quale versione di Excel usi?
Questo commento è stato fatto dal moderatore sul sito
Estremamente elegante este código!
Questo commento è stato fatto dal moderatore sul sito
Qual era lo scopo del parametro ByVal xIsSubfolders As Boolean?
Questo commento è stato fatto dal moderatore sul sito
Il mio VBA dice che la cartella variabile non è definita. Qualcuno sa perché questo è?
Questo commento è stato fatto dal moderatore sul sito
Davvero nuovo per VBA. come faccio a usare il codice sopra ma ho il percorso del file integrato in modo da non doverlo cercare ogni volta?
Questo commento è stato fatto dal moderatore sul sito
Ehi, quindi se devo semplicemente estrarre un'estensione dall'intero elenco, dove dovrei apportare le modifiche?
Questo commento è stato fatto dal moderatore sul sito
Funziona anche su MAC?
Questo commento è stato fatto dal moderatore sul sito
Ho modificato il codice per farlo riciclare e rieseguire continuamente la finestra di dialogo della cartella fino a quando non si preme Annulla. Sfortunatamente genera alcuni errori.1. Se le sottocartelle vengono coinvolte in una cartella selezionata, la cartella successiva selezionata diventa fuori dall'ordine numerico.2. Se le sottocartelle vengono coinvolte in una cartella selezionata, il pulsante Annulla deve essere ripetuto e ripetuto a seconda di quante cartelle hai aggiunto.
Codice:
Sub MainList()
'Aggiorna entro Extendoffice
Imposta cartella = Application.FileDialog(msoFileDialogFolderPicker)
Se folder.Show <> -1 Quindi esci da Sub
xDir = cartella.SelectedItems(1)
Elenco chiamateFilesInFolder(xDir, True)
End SubSub ListFilesInFolder(ByVal xFolderName As String, ByVal xIsSubfolders As Boolean)
Dim xFileSystemObject come oggetto
Dim xCartella come oggetto
Dim xSubFolder come oggetto
Dim xFile come oggetto
Dim rowIndex per tutto il tempo
Imposta xFileSystemObject = CreateObject ("Scripting.FileSystemObject")
Imposta xCartella = xFileSystemObject.GetFolder(xFolderName)
rowIndex = Application.ActiveSheet.Range("A65536").End(xlUp).Row + 1
Per ogni xFile in xFolder.Files
Application.ActiveSheet.Cells(rowIndex, 1).Formula = xFile.Name
indiceriga = indiceriga + 1
Avanti xFile
Se xIsSottocartelle Allora
Per ogni xSubFolder in xFolder.SubFolders
ListFilesInFolder xSubFolder.Path, vero
Avanti xSottocartella
End If
Imposta xFile = Niente
Imposta xCartella = Niente
Imposta xFileSystemObject = Niente
End Sub

qualche idea ?
Questo commento è stato fatto dal moderatore sul sito
Scusa... ti ho dato il codice sbagliato (sotto), ecco il codice che ho modificato..
Codice:
Sub MainList()
On Error Resume Next
Dim xFileSystemObject come oggetto
Dim xCartella come oggetto
Dim xSubFolder come oggetto
Dim xFile come oggetto
Dim rowIndex per tutto il tempo
Risposta debole come variante
risposta = Falso
Con Application.FileDialog(msoFileDialogFolderPicker)
.Titolo = "Seleziona una cartella"
.AllowMultiSelect = Falso
Imposta cartella = Application.FileDialog(msoFileDialogFolderPicker)
Se folder.Show = -1 Allora
xDir = cartella.SelectedItems(1)
Altro
Exit Sub
End If
Fine Con

Elenco chiamateFilesInFolder(xDir, True)
End Sub

Sub ListFilesInFolder(ByVal xFolderName As String, ByVal xIsSubfolders As Boolean)
Imposta xFileSystemObject = CreateObject ("Scripting.FileSystemObject")
Imposta xCartella = xFileSystemObject.GetFolder(xFolderName)
rowIndex = Application.ActiveSheet.Range("A65536").End(xlUp).Row + 1

' Aggiungi uno spazio, quindi il nome della cartella al foglio di lavoro
indiceriga = indiceriga + 1
Con Application.ActiveSheet.Cells(rowIndex, 1)
.Valore = xCartella.Nome
.Dimensione carattere = 12
.Font.FontStyle = "Corsivo grassetto"
Fine Con
indiceriga = indiceriga + 1

Per ogni xFile in xFolder.Files
Application.ActiveSheet.Cells(rowIndex, 1).Formula = xFile.Name
indiceriga = indiceriga + 1
Avanti xFile
Se xIsSottocartelle Allora
Per ogni xSubFolder in xFolder.SubFolders
ListFilesInFolder xSubFolder.Path, vero
Avanti xSottocartella
indiceriga = indiceriga + 1
End If

Imposta xFile = Niente
Imposta xCartella = Niente
Imposta xFileSystemObject = Niente

Chiama MainList
End Sub


Questo commento è stato fatto dal moderatore sul sito
Bel lavoro, esattamente quello che stavo cercando di creare. Ma questo è 1000% migliore.
Non ci sono ancora commenti pubblicati qui
Lasciate i vostri commenti
Pubblicazione come ospite
×
Valuta questo post:
0   Personaggi
Posizioni suggerite

Seguici

Copyright © 2009 - www.extendoffice.com. | Tutti i diritti riservati. Offerto da ExtendOffice, | Mappa del sito
Microsoft e il logo Office sono marchi o marchi registrati di Microsoft Corporation negli Stati Uniti e / o in altri paesi.
Protetto da Sectigo SSL