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

Cum se listează toate fișierele din folder și subfoldere într-o foaie de lucru?

Ați încercat vreodată să enumerați toate numele de fișiere dintr-un folder într-o foaie de lucru, inclusiv fișierele aflate în subfolderele sale? De fapt, nu există nicio modalitate directă de a enumera numele de fișiere dintr-un folder și subfolderul său în Excel, cu toate acestea, astăzi, voi introduce câteva trucuri rapide pentru a rezolva această sarcină.

Enumerați toate numele de fișiere din folder și subfolder cu cod VBA

Listați toate numele de fișiere din folder și subfolder rapid și ușor cu Kutools pentru Excel


În mod normal, Excel nu are nicio caracteristică de construcție pentru a face față acestei sarcini, dar puteți aplica următorul cod VBA pentru a finaliza această problemă.

1. Activați o nouă foaie de lucru care va lista numele fișierelor.

2. Țineți apăsat butonul ALT + F11 tastele în Excel și deschide fișierul Microsoft Visual Basic pentru aplicații fereastră.

3. Clic Insera > Moduleși lipiți următorul cod în Fereastra modulului.

Cod VBA: enumeră toate numele fișierelor din folder și subfolder

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. După lipirea codului în modul, apăsați F5 tasta pentru a rula acest cod și a Macrocomenzi caseta de dialog apare, selectați Lista principală numele macro, apoi faceți clic pe Alerga buton, vezi captura de ecran:

fișiere listă doc în subfolderul folder 1

5. Și în Naviga fereastra, vă rugăm să selectați folderul în care doriți să afișați toate numele de fișiere, inclusiv subfolderele, a se vedea captura de ecran:

fișiere listă doc în subfolderul folder 2

6. După specificarea folderului, faceți clic pe OK buton și toate numele de fișiere din folder și subfolderele sale au fost listate în foaia de lucru curentă din celula A2, consultați capturi de ecran:

fișiere listă doc în subfolderul folder 3
1
fișiere listă doc în subfolderul folder 4

Cu codul de mai sus, puteți doar să enumerați numele fișierelor, uneori, trebuie să enumerați alte atribute, cum ar fi dimensiunea fișierului, tipul fișierului, timpul creat, conținând folderul și așa mai departe. Kutools pentru Excel conține o funcție utilă - Lista de nume de fișiere, cu această caracteristică, puteți lista rapid toate tipurile sau anumite tipuri de nume de fișiere dintr-un folder și subdirectoarele sale.

Kutools pentru Excel : cu mai mult de 300 de programe de completare Excel la îndemână, gratuit pentru a încerca fără limitări în 30 de zile.

După instalare Kutools pentru ExcelVă rugăm să efectuați pașii următori:

1. Clic Afacere > Import Export > Lista de nume de fișiere, vezi captura de ecran:

2. În Lista de nume de fișiere caseta de dialog, efectuați următoarele operații:

A: Faceți clic pe fișiere listă doc în subfolderul folder 7buton pentru a alege folderul în care doriți să enumerați numele fișierelor;

B: Specificați tipul de fișier pe care doriți să îl listați din Tipul fișierelor secțiune;

C: Selectați o unitate de dimensiune a fișierului pe care doriți să o afișați din Unitatea de dimensiune a fișierului secţiune.

notițe: Pentru a lista numele de fișiere din subfolder, vă rugăm să verificați Includeți fișiere în subdirectoare, puteți verifica și Includeți fișiere și foldere ascunse după cum ai nevoie. Dacă verificați Creați hyperlinkuri opțiune, va crea hyperlinkuri pentru fiecare nume de fișier și folder.

Descărcați și proba gratuită acum!

3. Apoi apasa OK butonul, toate fișierele conținute în folderul selectat și subfolderele sale au fost afișate cu următoarele atribute într-o nouă foaie de lucru. Vedeți captura de ecran:

fișiere listă doc în subfolderul folder 8

Faceți clic pentru a afla mai multe detalii despre acest utilitar Lista de nume de fișiere.

Descărcați și proba gratuită Kutools pentru Excel acum!


Kutools pentru Excel: cu mai mult de 300 de programe de completare Excel la îndemână, încercați fără limitări în 30 de zile. Descărcați și proba gratuită acum!

Cele mai bune instrumente de productivitate Office

Kutools pentru Excel vă rezolvă majoritatea problemelor și vă crește productivitatea cu 80%

  • reutilizarea: Introduceți rapid formule complexe, diagrame și orice ai folosit anterior; Criptați celulele cu parola; Creați o listă de corespondență și trimiteți e-mailuri ...
  • Super Formula Bar (editați cu ușurință mai multe linii de text și formulă); Layout de citire (citiți și editați cu ușurință un număr mare de celule); Lipiți la interval filtrat...
  • Merge celule / rânduri / coloane fără a pierde date; Conținut de celule divizate; Combinați rânduri / coloane duplicate... Prevenirea celulelor duplicate; Comparați gamele...
  • Selectați Duplicat sau Unic Rânduri; Selectați Rânduri goale (toate celulele sunt goale); Super Find și Fuzzy Find în multe cărți de lucru; Selectare aleatorie ...
  • Copie exactă Mai multe celule fără modificarea referinței formulelor; Creați automat referințe la foi multiple; Introduceți gloanțe, Casete de selectare și multe altele ...
  • Extrageți textul, Adăugați text, eliminați după poziție, Eliminați spațiul; Creați și imprimați subtotaluri de paginare; Convertiți conținutul dintre celule și comentarii...
  • Super Filtru (salvați și aplicați scheme de filtrare altor foi); Sortare avansată după lună / săptămână / zi, frecvență și multe altele; Filtru special cu bold, italic ...
  • Combinați cărți de lucru și foi de lucru; Merge Tables pe baza coloanelor cheie; Împărțiți datele în mai multe foi; Conversia în loturi xls, xlsx și PDF...
  • Peste 300 de funcții puternice. Suportă Office / Excel 2007-2021 și 365. Acceptă toate limbile. Implementare ușoară în întreprinderea sau organizația dvs. Funcții complete Probă gratuită de 30 de zile. Garanție de returnare a banilor de 60 de zile.
fila kte 201905

Fila Office aduce interfața cu file în Office și vă face munca mult mai ușoară

  • Activați editarea și citirea cu file în Word, Excel, PowerPoint, Publisher, Access, Visio și Project.
  • Deschideți și creați mai multe documente în filele noi ale aceleiași ferestre, mai degrabă decât în ​​ferestrele noi.
  • Vă crește productivitatea cu 50% și reduce sute de clicuri de mouse pentru dvs. în fiecare zi!
fundul officetab
Comentarii (20)
Încă nu există evaluări. Fii primul care evaluează!
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bun articol Multumesc :D
Acest comentariu a fost redus la minimum de moderatorul de pe site
draga, Multumesc pentru aceasta utilitate minunata.....!!! anilkumar
Acest comentariu a fost redus la minimum de moderatorul de pe site
CUM SĂ FACEȚI ACEASTA INTEROGARE PENTRU A OBȚINE NUMELE DE FIȘIERE LISTATE DIN celula B2 în loc de A2?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună, Satish,
Următorul cod vă poate ajuta să puneți numele fișierelor oricărei celule pe care ați selectat-o, vă rugăm să încercați:

Sub MainList()
La data de eroare CV următoare
Set xRg = Application.InputBox("Vă rugăm să selectați o celulă pentru a pune numele fișierelor:", "KuTools For Excel", Selection.Address, , , , , 8)
Dacă xRg nu este nimic, ieșiți din sub
Setați xRg = xRg(1)
Set Folder = Application.FileDialog(msoFileDialogFolderPicker)
Dacă Folder.Show <> -1 Apoi Ieșire din sub
xDir = Folder.SelectedItems(1)
Listă de apeluriFilesInFolder(xRg, xDir, True)
End Sub
Sub ListFilesInFolder(ByVal xRg ca interval, ByVal xFolderName ca șir, ByVal xIsSubfolders ca boolean)
Dim xFileSystemObject ca obiect
Dim xFolder ca obiect
Dim xSubFolder ca obiect
Dim xFile ca obiect
Dim rowIndex As Long
Setați xFileSystemObject = CreateObject("Scripting.FileSystemObject")
Setați xFolder = xFileSystemObject.GetFolder(xFolderName)
rowIndex = 1
Pentru fiecare xFile din xFolder.Files
xRg.Formula = xFile.Name
Set xRg = xRg.Offset(rowIndex)
rowIndex = 1
Următorul xFile
Dacă xIsSubfolders Atunci
Pentru fiecare xSubFolder din xFolder.SubFolders
ListFilesInFolder xRg, xSubFolder.Path, True
Următorul xSubFolder
Final, dacă
Setați xFile = Nimic
Setați xFolder = Nimic
Setați xFileSystemObject = Nimic
End Sub
Acest comentariu a fost redus la minimum de moderatorul de pe site
Grozav!!! iubesc, multumesc
Acest comentariu a fost redus la minimum de moderatorul de pe site
Nu sunt sigur.. dar are în vedere folderele lungi. Am scris un cod similar și nu reușește acolo unde calea folderului/fișierului depășește 256 de caractere? Ganduri va rog?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Mulțumesc mult pentru articolul util!
Cum pot actualiza automat lista și pot observa modificările?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Acest lucru m-a ajutat să-mi convertesc codul pentru a obține apelul recursiv, dar mă întreb despre modul în care utilizați obiectele. Prefer să-mi definesc obiectele ca ceea ce sunt, fie ele cărți de lucru, foi de lucru sau obiecte ale sistemului de fișiere. (dim wbDest ca excel.workbook, dim wsDest ca excel.worksheet, de exemplu. În acest fel, nu trebuie să mă îngrijorez niciodată despre ce este foaia activă.

M-am întrebat și despre utilizarea lui .show - if.show <>-1 și nu pot să nu simt că ar fi mai ușor de înțeles pentru oameni dacă în schimb ați folosi if.show = false.

Și în ceea ce privește scrierea către destinație, am simțit că folosirea celulelor și a formulei părea a fi o cale lungă.

Deci, în codul meu am, de exemplu,
wsDest.Range("B" & CurRow) = nume.fil
(CurRow = Rând curent)

Nu critic, doar mă întreb dacă o faci așa din alt motiv decât preferința personală. - Întotdeauna dispus să învețe


Dar în afară de asta, mulțumesc pentru ajutor
Acest comentariu a fost redus la minimum de moderatorul de pe site
Vă mulțumesc pentru acest cod, m-a ajutat cu o solicitare de lucru, acum pot importa aceste rezultate în Access pentru transformare ulterioară. Apreciez.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Sub „GetFileOwner()” din codul de mai sus nu este utilizat.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună, jumpjack,
Codul de mai sus funcționează bine în Excel-ul meu, ce versiune Excel folosiți?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Extrem de elegant acest cod!
Acest comentariu a fost redus la minimum de moderatorul de pe site
Care a fost scopul parametrului ByVal xIsSubfolders As Boolean?
Acest comentariu a fost redus la minimum de moderatorul de pe site
VBA-ul meu spune că folderul variabil nu este definit. Știe cineva de ce este asta?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Cu adevărat nou în VBA. cum folosesc codul de mai sus, dar am calea fișierului încorporată, astfel încât să nu trebuie să-l caut de fiecare dată?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Hei, deci dacă trebuie doar să extrag o extensie din întreaga listă, unde ar trebui să fac modificări?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Functioneaza si pe MAC?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Am modificat codul dvs. pentru a-l recicla și a rula din nou dialogul folderului în mod continuu până când apăsați Anulare. Din nefericire, generează unele erori.1. Dacă subfolderele devin implicate într-un folder selectat atunci următorul folder selectat devine din ordinea numerică.2. Dacă subfolderele devin implicate într-un folder selectat, butonul Anulare trebuie repetat și repetat în funcție de câte foldere ați adăugat.
Cod:
Sub MainList()
'Actualizare de Extendoffice
Set folder = Application.FileDialog(msoFileDialogFolderPicker)
Dacă folder.Afișează <> -1 Apoi Ieșire Sub
xDir = folder.SelectedItems(1)
Listă de apeluriFilesInFolder(xDir, True)
End SubSub ListFilesInFolder(ByVal xFolderName ca șir, ByVal xIsSubfolders ca boolean)
Dim xFileSystemObject ca obiect
Dim xFolder ca obiect
Dim xSubFolder ca obiect
Dim xFile ca obiect
Dim rowIndex As Long
Setați xFileSystemObject = CreateObject("Scripting.FileSystemObject")
Setați xFolder = xFileSystemObject.GetFolder(xFolderName)
rowIndex = Application.ActiveSheet.Range("A65536").End(xlUp).Row + 1
Pentru fiecare xFile din xFolder.Files
Application.ActiveSheet.Cells(rowIndex, 1).Formula = xFile.Name
rowIndex = rowIndex + 1
Următorul xFile
Dacă xIsSubfolders Atunci
Pentru fiecare xSubFolder din xFolder.SubFolders
ListFilesInFolder xSubFolder.Path, True
Următorul xSubFolder
Final, dacă
Setați xFile = Nimic
Setați xFolder = Nimic
Setați xFileSystemObject = Nimic
End Sub

vreo idee ?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Scuze... ți-am dat codul greșit (mai jos), iată codul pe care l-am modificat..
Cod:
Sub MainList()
La data de eroare CV următoare
Dim xFileSystemObject ca obiect
Dim xFolder ca obiect
Dim xSubFolder ca obiect
Dim xFile ca obiect
Dim rowIndex As Long
Dim răspuns ca variantă
răspuns = Fals
Cu Application.FileDialog(msoFileDialogFolderPicker)
.Title = „Selectați un dosar”
.AllowMultiSelect = Fals
Set folder = Application.FileDialog(msoFileDialogFolderPicker)
Dacă folder.Show = -1 Atunci
xDir = folder.SelectedItems(1)
Altfel
Ieșiți din Sub
Final, dacă
Se termina cu

Listă de apeluriFilesInFolder(xDir, True)
End Sub

Sub ListFilesInFolder(ByVal xFolderName ca șir, ByVal xIsSubfolders ca boolean)
Setați xFileSystemObject = CreateObject("Scripting.FileSystemObject")
Setați xFolder = xFileSystemObject.GetFolder(xFolderName)
rowIndex = Application.ActiveSheet.Range("A65536").End(xlUp).Row + 1

' Adăugați un spațiu apoi numele folderului în foaia de lucru
rowIndex = rowIndex + 1
Cu Application.ActiveSheet.Cells(rowIndex, 1)
.Valoare = xFolder.Nume
.Dimensiune.font = 12
.Font.FontStyle = „Italică aldine”
Se termina cu
rowIndex = rowIndex + 1

Pentru fiecare xFile din xFolder.Files
Application.ActiveSheet.Cells(rowIndex, 1).Formula = xFile.Name
rowIndex = rowIndex + 1
Următorul xFile
Dacă xIsSubfolders Atunci
Pentru fiecare xSubFolder din xFolder.SubFolders
ListFilesInFolder xSubFolder.Path, True
Următorul xSubFolder
rowIndex = rowIndex + 1
Final, dacă

Setați xFile = Nimic
Setați xFolder = Nimic
Setați xFileSystemObject = Nimic

Apelați MainList
End Sub


Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună treabă, exact ceea ce încercam să creez. Dar acest lucru este 1000% mai bun.
Nu există comentarii postate aici încă
Lăsa comentarii
Postare ca invitat
×
Evaluează această postare:
0   Caractere
Locații sugerate

Urmărește-ne

Copyright © 2009 - www.extendoffice.com. | Toate drepturile rezervate. Cu sprijinul ExtendOffice. | Harta site-ului
Microsoft și sigla Office sunt mărci comerciale sau mărci comerciale înregistrate ale Microsoft Corporation în Statele Unite și / sau în alte țări.
Protejat de Sectigo SSL