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

Jak vypsat všechny soubory ve složce a podsložkách do listu?

Zkoušeli jste někdy vypsat všechny názvy souborů ze složky do listu včetně souborů umístěných v jejích podsložkách? Ve skutečnosti pro nás neexistuje žádný přímý způsob, jak vypsat názvy souborů ze složky a její podsložky v aplikaci Excel, nicméně dnes představím několik rychlých triků, jak tuto práci vyřešit.

Seznam všech názvů souborů ve složce a podsložce s kódem VBA

Seznamte všechny názvy souborů ve složce a podsložce rychle a snadno pomocí programu Kutools pro Excel


Za normálních okolností Excel nemá žádnou vestavěnou funkci pro řešení tohoto úkolu, ale k dokončení tohoto problému můžete použít následující kód VBA.

1. Aktivujte nový list se seznamem názvů souborů.

2. Podržte ALT + F11 klíče v aplikaci Excel a otevře Microsoft Visual Basic pro aplikace okno.

3, klikněte Vložit > Modula vložte následující kód do Okno modulu.

Kód VBA: Seznam všech názvů souborů ve složce a podsložce

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. Po vložení kódu do modulu stiskněte F5 klíč ke spuštění tohoto kódu a makra Zobrazí se dialogové okno, vyberte ikonu Hlavní seznam název makra a potom klepněte na Běh tlačítko, viz screenshot:

soubory se seznamem dokumentů ve podsložce složky 1

5. A v Procházet v okně vyberte složku, ve které chcete zobrazit seznam všech názvů souborů včetně podsložek, viz screenshot:

soubory se seznamem dokumentů ve podsložce složky 2

6. Po zadání složky klikněte na OK Tlačítko a všechny názvy souborů ve složce a jejích podsložkách byly uvedeny do aktuálního listu z buňky A2, viz screenshoty:

soubory se seznamem dokumentů ve podsložce složky 3
1
soubory se seznamem dokumentů ve podsložce složky 4

S výše uvedeným kódem můžete pouze vypsat názvy souborů, někdy musíte uvést další atributy, jako je velikost souboru, typ souboru, vytvořený čas, složka atd. Kutools pro Excel obsahuje užitečnou funkci - Seznam názvů souborůPomocí této funkce můžete rychle zobrazit seznam všech nebo konkrétních typů souborů ve složce a jejích podsložkách.

Kutools pro Excel : s více než 300 praktickými doplňky Excel, můžete si je vyzkoušet bez omezení do 30 dnů.

Po instalaci Kutools pro Excel, proveďte prosím následující kroky:

1, klikněte Enterprise > Import Export > Seznam názvů souborů, viz screenshot:

2. V Seznam názvů souborů dialogové okno, proveďte následující operace:

A: Klepněte na tlačítko soubory se seznamem dokumentů ve podsložce složky 7tlačítko pro výběr složky, ve které chcete vypsat názvy souborů;

B: Určete typ souboru, který chcete vypsat z Typ souboru sekce;

C: Vyberte jednu jednotku velikosti souboru, kterou chcete zobrazit z Jednotka velikosti souboru sekce.

Poznámka: Chcete-li zobrazit seznam souborů z podsložky, zkontrolujte Zahrnout soubory do podadresářů, můžete také zkontrolovat Zahrňte skryté soubory a složky jak potřebujete. Pokud zkontrolujete Vytvořte hypertextové odkazy Tato možnost vytvoří hypertextové odkazy pro každý název souboru a složku.

Stáhněte si a vyzkoušejte zdarma hned teď!

3. Pak klikněte na tlačítko OK Tlačítko, všechny soubory obsažené ve vybrané složce a jejích podsložkách byly zobrazeny s následujícími atributy v novém listu. Viz screenshot:

soubory se seznamem dokumentů ve podsložce složky 8

Klepnutím získáte další informace o tomto nástroji Seznam názvů souborů.

Stáhněte si zdarma zkušební verzi Kutools pro Excel!


Kutools pro Excel: s více než 300 praktickými doplňky aplikace Excel, můžete vyzkoušet bez omezení do 30 dnů. Stáhněte si a vyzkoušejte zdarma hned teď!

Nejlepší kancelářské nástroje produktivity

Kutools pro Excel řeší většinu vašich problémů a zvyšuje vaši produktivitu o 80%

  • Opakované použití: Rychle vložte složité vzorce, grafy a cokoli, co jste dříve používali; Šifrovat buňky s heslem; Vytvořte seznam adresátů a posílat e-maily ...
  • Super Formula Bar (snadno upravit více řádků textu a vzorce); Rozložení pro čtení (snadno číst a upravovat velké množství buněk); Vložit do filtrovaného rozsahu...
  • Sloučit buňky / řádky / sloupce bez ztráty dat; Rozdělit obsah buněk; Zkombinujte duplicitní řádky / sloupce... Zabraňte duplicitním buňkám; Porovnat rozsahy...
  • Vyberte možnost Duplikovat nebo Jedinečný Řádky; Vyberte prázdné řádky (všechny buňky jsou prázdné); Super hledání a fuzzy hledání v mnoha sešitech; Náhodný výběr ...
  • Přesná kopie Více buněk beze změny odkazu na vzorec; Automaticky vytvářet reference do více listů; Vložte odrážky, Zaškrtávací políčka a další ...
  • Extrahujte text, Přidat text, Odebrat podle pozice, Odebrat mezeru; Vytváření a tisk mezisoučtů stránkování; Převod mezi obsahem buněk a komentáři...
  • Super filtr (uložit a použít schémata filtrů na jiné listy); Rozšířené řazení podle měsíce / týdne / dne, frekvence a dalších; Speciální filtr tučnou kurzívou ...
  • Kombinujte sešity a pracovní listy; Sloučit tabulky na základě klíčových sloupců; Rozdělte data do více listů; Dávkový převod xls, xlsx a PDF...
  • Více než 300 výkonných funkcí. Podporuje Office / Excel 2007-2021 a 365. Podporuje všechny jazyky. Snadné nasazení ve vašem podniku nebo organizaci. Plné funkce 30denní bezplatná zkušební verze. 60denní záruka vrácení peněz.
karta kte 201905

Office Tab přináší do Office rozhraní s kartami a usnadňuje vám práci

  • Povolte úpravy a čtení na kartách ve Wordu, Excelu, PowerPointu, Publisher, Access, Visio a Project.
  • Otevřete a vytvořte více dokumentů na nových kartách ve stejném okně, nikoli v nových oknech.
  • Zvyšuje vaši produktivitu o 50%a snižuje stovky kliknutí myší každý den!
officetab dno
Komentáře (20)
Zatím žádné hodnocení. Buďte první, kdo ohodnotí!
Tento komentář byl moderátorem webu minimalizován
Dobrý článek Díky :D
Tento komentář byl moderátorem webu minimalizován
drahá, díky za tuto úžasnou pomůcku.....!!! anilkumar
Tento komentář byl moderátorem webu minimalizován
JAK ZAPOJÍT TENTO DOTAZ, ABY ZÍSKAL VÝPIS NÁZVŮ SOUBORŮ Z buňky B2 namísto A2?
Tento komentář byl moderátorem webu minimalizován
Ahoj, Satish,
Následující kód vám může pomoci vložit názvy souborů do libovolné buňky, kterou jste vybrali, zkuste to:

Sub MainList()
On Error Resume Next
Set xRg = Application.InputBox("Vyberte prosím buňku, do které chcete vložit názvy souborů:", "KuTools For Excel", Selection.Address, , , , , 8)
Pokud xRg není nic, pak Exit Sub
Nastavit xRg = xRg(1)
Nastavit složku = Application.FileDialog(msoFileDialogFolderPicker)
Pokud Folder.Show <> -1 Pak Exit Sub
xDir = Folder.SelectedItems(1)
Call ListFilesInFolder(xRg, xDir, True)
End Sub
Sub ListFilesInFolder(ByVal xRg As Range, ByVal xFolderName as String, ByVal xIsSubfolders As Boolean)
Dim xFileSystemObject jako objekt
Dim xFolder jako objekt
Dim xSubFolder jako objekt
Dim xfile jako objekt
Ztlumit řádekIndex jako dlouhý
Nastavit xFileSystemObject = CreateObject("Scripting.FileSystemObject")
Set xFolder = xFileSystemObject.GetFolder(xFolderName)
rowIndex = 1
Pro každý xFile v xFolder.Files
xRg.Formula = xFile.Name
Nastavit xRg = xRg.Offset(rowIndex)
rowIndex = 1
Další soubor x
If xIsSubfolders Then
Pro každý xSubFolder V xFolder.SubFolders
ListFilesInFolder xRg, xSubFolder.Path, True
Další xSubFolder
End If
Nastavit xFile = nic
Nastavit xFolder = nic
Nastavte xFileSystemObject = Nic
End Sub
Tento komentář byl moderátorem webu minimalizován
skvělý!!! miluji to, díky
Tento komentář byl moderátorem webu minimalizován
Nejsem si jistý, ale bere v úvahu dlouhé složky. Napsal jsem podobný kód a selže tam, kde cesta ke složce/souboru přesahuje 256 znaků? Myšlenky prosím?
Tento komentář byl moderátorem webu minimalizován
Děkuji mnohokrát za užitečný článek!
Jak mohu automaticky aktualizovat seznam a zjistit změny?
Tento komentář byl moderátorem webu minimalizován
To mi pomohlo převést můj kód, abych získal rekurzivní volání, ale zajímalo by mě, jak používáte objekty. Dávám přednost definování svých objektů tak, jak jsou, ať už jsou to sešity, listy nebo objekty systému souborů. (dim wbDest jako excel.workbook, dim wsDest jako excel.worksheet například. Tímto způsobem se nikdy nemusím starat o to, co je aktivní list.

Také mě napadlo použití .show - if.show <>-1 a nemohu se ubránit pocitu, že pro lidi by bylo snazší pochopit, kdybyste místo toho použili if.show = false.

A pokud jde o psaní na místo určení, cítil jsem, že použití buněk a vzorce se zdá být běh na dlouhou trať

Takže ve svém kódu mám např.
wsDest.Range("B" & CurRow) = fil.name
(CurRow = aktuální řádek)

Nekritizuji, jen by mě zajímalo, jestli to takhle děláte z jiného důvodu, než je osobní preference. - Vždy ochotný se učit


Ale jinak díky za pomoc
Tento komentář byl moderátorem webu minimalizován
Děkuji za tento kód, který mi pomohl s žádostí o práci, nyní jsem schopen importovat tyto výsledky do Accessu pro další transformaci. Oceňuji to.
Tento komentář byl moderátorem webu minimalizován
Sub "GetFileOwner()" v kódu výše není použit.
Tento komentář byl moderátorem webu minimalizován
Ahoj, jumpjacku,
Výše uvedený kód funguje dobře v mém Excelu, kterou verzi Excelu používáte?
Tento komentář byl moderátorem webu minimalizován
Extremamente elegante is codigo!
Tento komentář byl moderátorem webu minimalizován
Jaký byl účel parametru ByVal xIsSubfolders As Boolean?
Tento komentář byl moderátorem webu minimalizován
Můj VBA říká, že složka proměnné není definována. Ví někdo, proč tomu tak je?
Tento komentář byl moderátorem webu minimalizován
Opravdu nový VBA. jak mohu použít výše uvedený kód, ale mám v něm zabudovanou cestu k souboru, abych jej nemusel pokaždé hledat?
Tento komentář byl moderátorem webu minimalizován
Ahoj, takže pokud musím z celého seznamu extrahovat rozšíření, kde bych měl provést změny?
Tento komentář byl moderátorem webu minimalizován
Funguje to i na MAC?
Tento komentář byl moderátorem webu minimalizován
Upravil jsem váš kód, aby se recykloval a znovu spouštěl dialog složky nepřetržitě, dokud nestisknete tlačítko Zrušit. Bohužel to generuje nějaké chyby.1. Pokud se do vybrané složky zapojí podsložky, další vybraná složka nebude v číselném pořadí.2. Pokud se do vybrané složky zapojí podsložky, tlačítko Storno se musí opakovat a opakovat v závislosti na tom, kolik složek jste přidali.
Kód:
Sub MainList()
'Aktualizovat Extendoffice
Nastavit složku = Application.FileDialog(msoFileDialogFolderPicker)
If folder.Show <> -1 Potom Exit Sub
xDir = folder.SelectedItems(1)
Call ListFilesInFolder(xDir, True)
End SubSub ListFilesInFolder(ByVal xFolderName as String, ByVal xIsSubfolders as Boolean)
Dim xFileSystemObject jako objekt
Dim xFolder jako objekt
Dim xSubFolder jako objekt
Dim xfile jako objekt
Ztlumit řádekIndex jako dlouhý
Nastavit xFileSystemObject = CreateObject("Scripting.FileSystemObject")
Set xFolder = xFileSystemObject.GetFolder(xFolderName)
rowIndex = Application.ActiveSheet.Range("A65536").End(xlUp).Row + 1
Pro každý xFile v xFolder.Files
Application.ActiveSheet.Cells(rowIndex, 1).Formula = xFile.Name
rowIndex = rowIndex + 1
Další soubor x
If xIsSubfolders Then
Pro každý xSubFolder V xFolder.SubFolders
ListFilesInFolder xSubFolder.Path, True
Další xSubFolder
End If
Nastavit xFile = nic
Nastavit xFolder = nic
Nastavte xFileSystemObject = Nic
End Sub

nějaké nápady ?
Tento komentář byl moderátorem webu minimalizován
Promiňte... dal jsem vám špatný kód (níže), zde je kód, který jsem upravil.
Kód:
Sub MainList()
On Error Resume Next
Dim xFileSystemObject jako objekt
Dim xFolder jako objekt
Dim xSubFolder jako objekt
Dim xfile jako objekt
Ztlumit řádekIndex jako dlouhý
Tlumená odpověď jako varianta
odpověď = nepravda
S Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Vyberte složku"
.AllowMultiSelect = False
Nastavit složku = Application.FileDialog(msoFileDialogFolderPicker)
If folder.Show = -1 Then
xDir = folder.SelectedItems(1)
Jiný
Konec Sub
End If
Konec s

Call ListFilesInFolder(xDir, True)
End Sub

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

' Do listu přidejte mezeru a poté Název složky
rowIndex = rowIndex + 1
S Application.ActiveSheet.Cells(rowIndex, 1)
.Value = xFolder.Name
.Velikost písma = 12
.Font.FontStyle = "Tučná kurzíva"
Konec s
rowIndex = rowIndex + 1

Pro každý xFile v xFolder.Files
Application.ActiveSheet.Cells(rowIndex, 1).Formula = xFile.Name
rowIndex = rowIndex + 1
Další soubor x
If xIsSubfolders Then
Pro každý xSubFolder V xFolder.SubFolders
ListFilesInFolder xSubFolder.Path, True
Další xSubFolder
rowIndex = rowIndex + 1
End If

Nastavit xFile = nic
Nastavit xFolder = nic
Nastavte xFileSystemObject = Nic

Zavolejte MainList
End Sub


Tento komentář byl moderátorem webu minimalizován
Krásná práce, přesně to, co jsem se snažil vytvořit. Ale tohle je o 1000% lepší.
Zatím zde nejsou žádné komentáře
Zanechat své připomínky
Odesílání jako host
×
Ohodnoťte tento příspěvek:
0   Postavy
Doporučená umístění

Sociální sítě

Copyright © 2009 - www.extendoffice.com. | Všechna práva vyhrazena. Poháněno ExtendOffice. | |. | Sitemap
Microsoft a logo Office jsou ochranné známky nebo registrované ochranné známky společnosti Microsoft Corporation ve Spojených státech a / nebo jiných zemích.
Chráněno Sectigo SSL