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

Hvordan vises alle filer i mappe og undermapper i et regneark?

Har du nogensinde prøvet at liste alle filnavne fra en mappe til et regneark, inklusive filerne i undermapperne? Faktisk er der ingen direkte måde for os at liste filnavnene fra en mappe og dens undermappe i Excel, men i dag vil jeg introducere nogle hurtige tricks til at løse dette job.

Liste over alle filnavne i mappe og undermappe med VBA-kode

Liste over alle filnavne i mappe og undermappe hurtigt og nemt med Kutools til Excel


Normalt har Excel ingen indbyggingsfunktion til at håndtere denne opgave, men du kan anvende følgende VBA-kode for at fuldføre dette problem.

1. Aktivér et nyt regneark, der viser filnavne.

2. Hold nede ALT + F11 nøgler i Excel, og det åbner Microsoft Visual Basic til applikationer vindue.

3. Klik indsatte > Moduler, og indsæt følgende kode i Modul vindue.

VBA-kode: Liste over alle filnavne i mappe og undermappe

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. Når du har indsat koden i modulet, skal du trykke på F5 nøgle til at køre denne kode, og en Makroer dialogboksen vises, skal du vælge Hovedliste makronavn, og klik derefter på Kør knap, se skærmbillede:

doc liste filer i mappe undermappe 1

5. Og i Gennemse vindue, skal du vælge den mappe, hvor du vil liste alle filnavne inklusive undermapper, se skærmbillede:

doc liste filer i mappe undermappe 2

6. Når du har angivet mappen, skal du klikke på OK knap, og alle filnavne i mappen og dens undermapper er blevet vist i det aktuelle regneark fra celle A2, se skærmbilleder:

doc liste filer i mappe undermappe 3
1
doc liste filer i mappe undermappe 4

Med ovenstående kode kan du bare liste filnavne, nogle gange skal du liste andre attributter, såsom filstørrelse, filtype, oprettet tid, indeholdende mappe og så. Kutools til Excel indeholder en nyttig funktion - Liste over filnavne, med denne funktion kan du hurtigt liste alle eller specifikke typer filnavne i en mappe og dens undermapper.

Kutools til Excel : med mere end 300 praktiske Excel-tilføjelsesprogrammer, gratis at prøve uden begrænsning på 30 dage.

Efter installation Kutools til Excelskal du gøre med følgende trin:

1. Klik Enterprise > Import Eksport > Liste over filnavne, se skærmbillede:

2. I Liste over filnavne i dialogboksen, skal du udføre følgende handlinger:

A: Klik doc liste filer i mappe undermappe 7knappen for at vælge den mappe, som du vil vise filnavnene;

B: Angiv den filtype, du vil liste fra Filtype afsnit;

C: Vælg en filstørrelsesenhed, du vil have vist på Filstørrelsesenhed sektion.

Bemærk: Hvis du vil liste filnavnene fra undermappen, skal du kontrollere Inkluder filer i underkataloger, kan du også kontrollere Inkluder skjulte filer og mapper som du har brug for. Hvis du tjekker Opret hyperlinks valgmulighed, opretter den hyperlinks til hvert filnavn og mappe.

Download og gratis prøveversion nu!

3. Klik derefter på OK knappen, er alle filerne i den valgte mappe og dens undermapper vist med følgende attributter i et nyt regneark. Se skærmbillede:

doc liste filer i mappe undermappe 8

Klik for at få flere oplysninger om dette værktøj til filnavneliste.

Download og gratis prøveversion Kutools til Excel nu!


Kutools til Excel: med mere end 300 praktiske Excel-tilføjelsesprogrammer, gratis at prøve uden begrænsning på 30 dage. Download og gratis prøveversion nu!

De bedste Office-produktivitetsværktøjer

Kutools til Excel løser de fleste af dine problemer og øger din produktivitet med 80%

  • Genbruge: Indsæt hurtigt komplekse formler, diagrammer og alt, hvad du har brugt før; Krypter celler med adgangskode Opret postliste og send e-mails ...
  • Super formel bar (let redigere flere linjer med tekst og formel); Læsning Layout (let at læse og redigere et stort antal celler); Indsæt til filtreret rækkevidde...
  • Flet celler / rækker / kolonner uden at miste data; Split celler indhold; Kombiner duplikerede rækker / kolonner... Forhindre duplikerede celler; Sammenlign områder...
  • Vælg Duplicate eller Unique Rækker; Vælg tomme rækker (alle celler er tomme); Super Find og Fuzzy Find i mange arbejdsbøger; Tilfældig valg ...
  • Præcis kopi Flere celler uden at ændre formelreference; Auto Opret referencer til flere ark; Indsæt kugler, Afkrydsningsfelter og mere ...
  • Uddrag tekst, Tilføj tekst, Fjern efter position, Fjern mellemrum; Opret og udskriv personsøgningssubtotaler; Konverter mellem celler indhold og kommentarer...
  • Superfilter (gem og anvend filterskemaer på andre ark); Avanceret sortering efter måned / uge / dag, hyppighed og mere; Specielt filter af fed, kursiv ...
  • Kombiner arbejdsbøger og arbejdsark; Fletabeller baseret på nøglekolonner; Opdel data i flere ark; Batch Konverter xls, xlsx og PDF...
  • Mere end 300 kraftfulde funktioner. Understøtter Office / Excel 2007-2021 og 365. Understøtter alle sprog. Nem implementering i din virksomhed eller organisation. Fuld funktioner 30-dages gratis prøveperiode. 60 dages pengene tilbage garanti.
kte-fane 201905

Fanen Office bringer en grænseflade til et kontor med Office, og gør dit arbejde meget lettere

  • Aktiver redigering og læsning af faner i Word, Excel, PowerPoint, Publisher, Access, Visio og Project.
  • Åbn og opret flere dokumenter i nye faner i det samme vindue snarere end i nye vinduer.
  • Øger din produktivitet med 50 % og reducerer hundredvis af museklik for dig hver dag!
officetab bund
Sorter kommentarer efter
Kommentarer (20)
Ingen vurderinger endnu. Vær den første til at bedømme!
Denne kommentar blev minimeret af moderatoren på webstedet
God artikel tak :D
Denne kommentar blev minimeret af moderatoren på webstedet
kære, Tak for dette vidunderlige værktøj.....!!! anilkumar
Denne kommentar blev minimeret af moderatoren på webstedet
HVORDAN FÅR DENNE FORESPØRGSEL TIL AT VIRKE FOR AT FÅ FILNAVNENE LISTE FRA B2-celle i stedet for A2?
Denne kommentar blev minimeret af moderatoren på webstedet
Hej Satish,
Følgende kode kan hjælpe dig med at sætte filnavnene til en hvilken som helst celle, du har valgt, prøv det venligst:

Underhovedliste()
On Error Resume Next
Indstil xRg = Application.InputBox("Vælg venligst en celle for at sætte filnavnene:", "KuTools For Excel", Selection.Address, , , , , 8)
Hvis xRg ikke er noget, skal du afslutte Sub
Indstil xRg = xRg(1)
Set Folder = Application.FileDialog(msoFileDialogFolderPicker)
Hvis Folder.Show <> -1 Afslut 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 As Object
Dim xFolder som objekt
Dim xSubFolder som objekt
Dim xFile som objekt
Dim rowIndex As Long
Indstil xFileSystemObject = CreateObject("Scripting.FileSystemObject")
Indstil xFolder = xFileSystemObject.GetFolder(xFolderName)
rækkeindeks = 1
For hver xFile I xFolder.Files
xRg.Formula = xFile.Name
Indstil xRg = xRg.Offset(rowIndex)
rækkeindeks = 1
Næste xFile
Hvis xIsUndermapper Så
For hver xSubFolder I xFolder.SubFolders
ListFilesInFolder xRg, xSubFolder.Path, True
Næste xSubFolder
End If
Indstil xFile = Intet
Indstil xFolder = Intet
Indstil xFileSystemObject = Intet
End Sub
Denne kommentar blev minimeret af moderatoren på webstedet
store!!! elsker det, tak
Denne kommentar blev minimeret af moderatoren på webstedet
Ikke sikker.. men overvejer det lange mapper. jeg skrev en lignende kode, og den mislykkes, hvor mappen/filstien overstiger 256 tegn? Tanker venligst?
Denne kommentar blev minimeret af moderatoren på webstedet
Mange tak for den nyttige artikel!
Hvordan kan jeg automatisk opdatere listen og få øje på ændringerne?
Denne kommentar blev minimeret af moderatoren på webstedet
Dette hjalp mig med at konvertere min kode for at få det rekursive kald, men jeg undrer mig over den måde, du bruger objekter på. Jeg foretrækker at definere mine objekter som hvad de er, hvad enten det er projektmapper, regneark eller filsystemobjekter. (dim wbDest som excel.workbook, dim wsDest som excel.worksheet for eksempel. På denne måde behøver jeg aldrig at bekymre mig om, hvad det aktive ark er.

Jeg undrede mig også over brugen af ​​.show - if.show <>-1, og kan ikke lade være med at føle, at det ville være lettere for folk at forstå, hvis du i stedet brugte if.show = false.

Og med hensyn til at skrive til destinationen, følte jeg, at brugen af ​​celler og formler syntes at være en lang vej rundt

Så i min kode har jeg f.eks.
wsDest.Range("B" & CurRow) = fil.navn
(CurRow = Current Row)

Jeg kritiserer ikke, jeg spekulerer bare på, om du gør det sådan af andre årsager end personlige præferencer. - Altid villig til at lære


Men bortset fra det tak for hjælpen
Denne kommentar blev minimeret af moderatoren på webstedet
Tak for denne kode, den har hjulpet mig med en anmodning om et arbejde. Jeg er nu i stand til at importere disse resultater til Access for yderligere transformation. Sætter pris på det.
Denne kommentar blev minimeret af moderatoren på webstedet
Sub "GetFileOwner()" i koden ovenfor bruges ikke.
Denne kommentar blev minimeret af moderatoren på webstedet
Hej jumpjack,
Ovenstående kode fungerer godt i min Excel, hvilken Excel-version bruger du?
Denne kommentar blev minimeret af moderatoren på webstedet
Extremamente elegante este código!
Denne kommentar blev minimeret af moderatoren på webstedet
Hvad var formålet med parameteren ByVal xIsSubfolders As Boolean?
Denne kommentar blev minimeret af moderatoren på webstedet
Min VBA siger, at den variable mappe ikke er defineret. Nogen der ved hvorfor dette er?
Denne kommentar blev minimeret af moderatoren på webstedet
Virkelig ny i VBA. hvordan bruger jeg ovenstående kode, men har filstien indbygget i den, så jeg ikke behøver at søge efter den hver gang?
Denne kommentar blev minimeret af moderatoren på webstedet
Hej, så hvis jeg bare skal udtrække en udvidelse fra hele listen, hvor skal jeg så lave ændringer?
Denne kommentar blev minimeret af moderatoren på webstedet
Virker det også på MAC?
Denne kommentar blev minimeret af moderatoren på webstedet
Jeg har ændret din kode for at få den til at genbruge og køre mappedialogen igen, indtil du trykker på Annuller. Uheldigvis genererer det nogle fejl.1. Hvis undermapper bliver involveret i en valgt mappe, bliver den næste valgte mappe ude af numerisk rækkefølge.2. Hvis undermapper bliver involveret i en valgt mappe, skal Annuller-knappen gentages og gentages afhængigt af hvor mange mapper du har tilføjet.
Kode:
Underhovedliste()
'Opdatering af Extendoffice
Indstil mappe = Application.FileDialog(msoFileDialogFolderPicker)
Hvis mappe. Vis <> -1 Afslut Sub
xDir = folder.SelectedItems(1)
Call ListFilesInFolder(xDir, True)
End SubSub ListFilesInFolder(ByVal xFolderName As String, ByVal xIsSubfolders As Boolean)
Dim xFileSystemObject As Object
Dim xFolder som objekt
Dim xSubFolder som objekt
Dim xFile som objekt
Dim rowIndex As Long
Indstil xFileSystemObject = CreateObject("Scripting.FileSystemObject")
Indstil xFolder = xFileSystemObject.GetFolder(xFolderName)
rowIndex = Application.ActiveSheet.Range("A65536").End(xlUp).Række + 1
For hver xFile I xFolder.Files
Application.ActiveSheet.Cells(rowIndex, 1).Formel = xFile.Name
rowIndex = rowIndex + 1
Næste xFile
Hvis xIsUndermapper Så
For hver xSubFolder I xFolder.SubFolders
ListFilesInFolder xSubFolder.Path, True
Næste xSubFolder
End If
Indstil xFile = Intet
Indstil xFolder = Intet
Indstil xFileSystemObject = Intet
End Sub

nogle ideer ?
Denne kommentar blev minimeret af moderatoren på webstedet
Beklager... jeg gav dig den forkerte kode (nedenfor), her er koden, jeg ændrede..
Kode:
Underhovedliste()
On Error Resume Next
Dim xFileSystemObject As Object
Dim xFolder som objekt
Dim xSubFolder som objekt
Dim xFile som objekt
Dim rowIndex As Long
Dim svar som variant
svar = falsk
Med Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Vælg en mappe"
.AllowMultiSelect = Falsk
Indstil mappe = Application.FileDialog(msoFileDialogFolderPicker)
Hvis mappe.Vis = -1 Så
xDir = folder.SelectedItems(1)
Else
Exit Sub
End If
Slut med

Call ListFilesInFolder(xDir, True)
End Sub

Sub ListFilesInFolder(ByVal xFolderName As String, ByVal xIsSubfolders As Boolean)
Indstil xFileSystemObject = CreateObject("Scripting.FileSystemObject")
Indstil xFolder = xFileSystemObject.GetFolder(xFolderName)
rowIndex = Application.ActiveSheet.Range("A65536").End(xlUp).Række + 1

' Tilføj et mellemrum og derefter mappenavnet til regnearket
rowIndex = rowIndex + 1
Med Application.ActiveSheet.Cells(rowIndex, 1)
.Value = xFolder.Name
.Skriftstørrelse = 12
.Font.FontStyle = "Fed kursiv"
Slut med
rowIndex = rowIndex + 1

For hver xFile I xFolder.Files
Application.ActiveSheet.Cells(rowIndex, 1).Formel = xFile.Name
rowIndex = rowIndex + 1
Næste xFile
Hvis xIsUndermapper Så
For hver xSubFolder I xFolder.SubFolders
ListFilesInFolder xSubFolder.Path, True
Næste xSubFolder
rowIndex = rowIndex + 1
End If

Indstil xFile = Intet
Indstil xFolder = Intet
Indstil xFileSystemObject = Intet

Ring til hovedlisten
End Sub


Denne kommentar blev minimeret af moderatoren på webstedet
Flot arbejde, præcis hvad jeg prøvede at skabe. Men det er 1000% bedre.
Der er endnu ingen kommentarer her
Efterlad dine kommentarer
Sender som gæst
×
Bedøm dette indlæg:
0   Tegn
Foreslåede steder

Følg os

Copyright © 2009 - www.extendoffice.com. | Alle rettigheder forbeholdes. Drevet af ExtendOffice. | | Sitemap
Microsoft og Office-logoet er varemærker eller registrerede varemærker tilhørende Microsoft Corporation i USA og / eller andre lande.
Beskyttet af Sectigo SSL