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

Hur listar jag alla filer i mapp och undermappar i ett kalkylblad?

Har du någonsin försökt att lista alla filnamn från en mapp till ett kalkylblad inklusive filerna i dess undermappar? Det finns faktiskt inget direkt sätt för oss att lista filnamnen från en mapp och dess undermapp i Excel, men i dag kommer jag att introducera några snabba knep för att lösa detta jobb.

Lista alla filnamn i mapp och undermapp med VBA-kod

Lista alla filnamn i mapp och undermapp snabbt och enkelt med Kutools för Excel


Normalt har Excel ingen inbyggd funktion för att hantera den här uppgiften, men du kan använda följande VBA-kod för att slutföra detta problem.

1. Aktivera ett nytt kalkylblad som visar filnamnen.

2. Håll ner ALT + F11 nycklar i Excel, och det öppnar Microsoft Visual Basic för applikationer fönster.

3. Klicka Insert > Modulernaoch klistra in följande kod i Modulfönster.

VBA-kod: Lista alla filnamn i mapp och undermapp

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 klistrat in koden i modulen trycker du på F5 nyckel för att köra den här koden och en Makron dialogrutan dyker upp, välj Huvudlista makronamn och klicka sedan på run knapp, se skärmdump:

doc-lista filer i mappmapp 1

5. Och i Bläddra fönster, välj den mapp som du vill lista alla filnamn inklusive undermappar, se skärmdump:

doc-lista filer i mappmapp 2

6. När du har angett mappen klickar du sedan på OK -knappen och alla filnamn i mappen och dess undermappar har listats i aktuellt kalkylblad från cell A2, se skärmdumpar:

doc-lista filer i mappmapp 3
1
doc-lista filer i mappmapp 4

Med ovanstående kod kan du bara lista filnamnen, ibland måste du lista andra attribut, såsom filstorlek, filtyp, skapad tid, innehållande mapp och så. Kutools för Excel innehåller en användbar funktion - Lista över filnamn, med den här funktionen kan du snabbt lista alla eller specifika typer av filnamn i en mapp och dess undermappar.

Kutools för Excel : med mer än 300 praktiska Excel-tillägg, gratis att prova utan begränsning på 30 dagar.

När du har installerat Kutools för Excel, gör med följande steg:

1. Klicka Företag > Import Export > Lista över filnamn, se skärmdump:

2. I Lista över filnamn dialogrutan, gör följande:

A: Klicka på doc-lista filer i mappmapp 7knappen för att välja den mapp som du vill lista filnamnen;

B: Ange den filtyp som du vill lista från Filtyp sektion;

C: Välj en filstorleksenhet som du vill visa från Enhet för filstorlek sektion.

Anmärkningar: För att lista filnamnen från undermappen, kontrollera Inkludera filer i underkatalogerkan du också kontrollera Inkludera dolda filer och mappar som du behöver. Om du kollar Skapa hyperlänkar alternativ skapas hyperlänkar för varje filnamn och mappar.

Ladda ner och testa gratis nu!

3. Klicka sedan OK -knappen, alla filer i den valda mappen och dess undermappar har visats med följande attribut i ett nytt kalkylblad. Se skärmdump:

doc-lista filer i mappmapp 8

Klicka för att få mer information om detta filnamnlistverktyg.

Ladda ner och testa gratis Kutools för Excel nu!


Kutools för Excel: med mer än 300 praktiska Excel-tillägg, gratis att prova utan begränsning på 30 dagar. Ladda ner och testa gratis nu!

De bästa Office-produktivitetsverktygen

Kutools för Excel löser de flesta av dina problem och ökar din produktivitet med 80%

  • återanvändning: Sätt snabbt i komplexa formler, diagram och allt som du har använt tidigare; Kryptera celler med lösenord; Skapa e-postlista och skicka e-post ...
  • Super Formula Bar (enkelt redigera flera rader med text och formel); Läslayout (enkelt läsa och redigera ett stort antal celler); Klistra in i filtrerat intervall...
  • Sammanfoga celler / rader / kolumner utan att förlora data; Delat cellinnehåll; Kombinera duplicerade rader / kolumner... Förhindra duplicerade celler; Jämför intervall...
  • Välj Duplicera eller Unikt Rader; Välj tomma rader (alla celler är tomma); Super Find och Fuzzy Find i många arbetsböcker; Slumpmässigt val ...
  • Exakt kopia Flera celler utan att ändra formelreferens; Skapa referenser automatiskt till flera ark; Sätt in kulor, Kryssrutor och mer ...
  • Extrahera text, Lägg till text, ta bort efter position, Ta bort mellanslag; Skapa och skriva ut personsökningstalsatser; Konvertera mellan celler innehåll och kommentarer...
  • Superfilter (spara och tillämpa filterscheman på andra ark); Avancerad sortering efter månad / vecka / dag, frekvens och mer; Specialfilter av fet, kursiv ...
  • Kombinera arbetsböcker och arbetsblad; Sammanfoga tabeller baserat på nyckelkolumner; Dela data i flera ark; Batchkonvertera xls, xlsx och PDF...
  • Mer än 300 kraftfulla funktioner. Stöder Office / Excel 2007-2021 och 365. Stöder alla språk. Enkel implementering i ditt företag eller organisation. Fullständiga funktioner 30 dagars gratis provperiod. 60 dagars pengarna tillbaka-garanti.
kte-flik 201905

Fliken Office ger ett flikgränssnitt till Office och gör ditt arbete mycket enklare

  • Aktivera flikredigering och läsning i Word, Excel, PowerPoint, Publisher, Access, Visio och Project.
  • Öppna och skapa flera dokument i nya flikar i samma fönster, snarare än i nya fönster.
  • Ökar din produktivitet med 50 % och minskar hundratals musklick för dig varje dag!
officetab botten
Sortera kommentarer efter
Kommentarer (20)
Inga betyg än. Bli först med att betygsätta!
Denna kommentar minimerades av moderatoren på webbplatsen
Bra artikel Tack :D
Denna kommentar minimerades av moderatoren på webbplatsen
kära, Tack för detta underbara verktyg.....!!! anilkumar
Denna kommentar minimerades av moderatoren på webbplatsen
HUR FÅR DENNA FRÅGA ATT FUNGERA FÖR ATT FÅ FILNAMNEN LISTA FRÅN B2-cell istället för A2?
Denna kommentar minimerades av moderatoren på webbplatsen
Hej Satish,
Följande kod kan hjälpa dig att placera filnamnen i valfri cell du valt, försök det:

Sub MainList()
On Error Resume Next
Set xRg = Application.InputBox("Välj en cell för att sätta filnamnen:", "KuTools For Excel", Selection.Address, , , , , 8)
Om xRg är ingenting, avsluta Sub
Ställ in xRg = xRg(1)
Set Folder = Application.FileDialog(msoFileDialogFolderPicker)
Om Folder.Show <> -1 Avsluta 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
Ställ in xFileSystemObject = CreateObject("Scripting.FileSystemObject")
Ställ in xFolder = xFileSystemObject.GetFolder(xFolderName)
radindex = 1
För varje xFile I xFolder.Files
xRg.Formula = xFile.Name
Ställ in xRg = xRg.Offset(rowIndex)
radindex = 1
Nästa xFile
Om xIsSubfolders Då
För varje xSubFolder i xFolder.SubFolders
ListFilesInFolder xRg, xSubFolder.Path, True
Nästa xSubFolder
End If
Ställ in xFile = Ingenting
Ställ in xFolder = Ingenting
Ställ in xFileSystemObject = Ingenting
End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
bra!!! älskar det, tack
Denna kommentar minimerades av moderatoren på webbplatsen
Inte säker.. men överväger det långa mappar. Jag skrev en liknande kod och den misslyckas där mapp-/filsökvägen överstiger 256 tecken? Tankar snälla?
Denna kommentar minimerades av moderatoren på webbplatsen
Tack så mycket för den användbara artikeln!
Hur kan jag uppdatera listan automatiskt och upptäcka ändringarna?
Denna kommentar minimerades av moderatoren på webbplatsen
Detta hjälpte mig att konvertera min kod för att få det rekursiva anropet, men jag undrar över hur du använder objekt. Jag föredrar att definiera mina objekt som vad de är, vare sig det är arbetsböcker, kalkylblad eller filsystemobjekt. (dim wbDest som excel.workbook, dim wsDest som excel.worksheet till exempel. På så sätt behöver jag aldrig oroa mig för vad det aktiva arket är.

Jag undrade också över användningen av .show - if.show <>-1, och kan inte låta bli att känna att det skulle vara lättare för folk att förstå om du istället använde if.show = false.

Och när det gäller att skriva till destinationen kände jag att det verkade vara en lång väg att använda celler och formel

Så i min kod har jag t.ex.
wsDest.Range("B" & CurRow) = fil.namn
(CurRow = Aktuell rad)

Jag kritiserar inte, jag undrar bara om du gör det så här av någon annan anledning än personlig preferens. – Alltid villig att lära


Men förutom det tack för hjälpen
Denna kommentar minimerades av moderatoren på webbplatsen
Tack för den här koden, den har hjälpt mig med en begäran om ett arbete, jag kan nu importera dessa resultat till Access för ytterligare transformation. Uppskattar det.
Denna kommentar minimerades av moderatoren på webbplatsen
Sub "GetFileOwner()" i koden ovan används inte.
Denna kommentar minimerades av moderatoren på webbplatsen
Hej, jumpjack,
Ovanstående kod fungerar bra i min Excel, vilken Excel-version använder du?
Denna kommentar minimerades av moderatoren på webbplatsen
Extrema elegante este código!
Denna kommentar minimerades av moderatoren på webbplatsen
Vad var syftet med parametern ByVal xIsSubfolders As Boolean?
Denna kommentar minimerades av moderatoren på webbplatsen
Min VBA säger att variabelmappen inte är definierad. Någon som vet varför detta är?
Denna kommentar minimerades av moderatoren på webbplatsen
Riktigt ny på VBA. hur använder jag ovanstående kod men har filsökvägen inbyggd i den så att jag inte behöver söka efter den varje gång?
Denna kommentar minimerades av moderatoren på webbplatsen
Hej, så om jag bara måste extrahera ett tillägg från hela listan, var ska jag göra ändringar?
Denna kommentar minimerades av moderatoren på webbplatsen
Fungerar det på MAC också?
Denna kommentar minimerades av moderatoren på webbplatsen
Jag har modifierat din kod så att den återvinns och kör mappdialogrutan igen kontinuerligt tills du trycker på Avbryt. Tyvärr genererar det några fel.1. Om undermappar blir inblandade i en vald mapp blir nästa mapp ur numerisk ordning.2. Om undermappar blir involverade i en vald mapp måste knappen Avbryt upprepas och upprepas beroende på hur många mappar du har lagt till.
Koda:
Sub MainList()
'Uppdatering av Extendoffice
Set folder = Application.FileDialog(msoFileDialogFolderPicker)
Om mappen.Visa <> -1 Avsluta 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
Ställ in xFileSystemObject = CreateObject("Scripting.FileSystemObject")
Ställ in xFolder = xFileSystemObject.GetFolder(xFolderName)
rowIndex = Application.ActiveSheet.Range("A65536").End(xlUp).Row + 1
För varje xFile I xFolder.Files
Application.ActiveSheet.Cells(rowIndex, 1).Formel = xFile.Name
rowIndex = rowIndex + 1
Nästa xFile
Om xIsSubfolders Då
För varje xSubFolder i xFolder.SubFolders
ListFilesInFolder xSubFolder.Path, True
Nästa xSubFolder
End If
Ställ in xFile = Ingenting
Ställ in xFolder = Ingenting
Ställ in xFileSystemObject = Ingenting
End Sub

några idéer ?
Denna kommentar minimerades av moderatoren på webbplatsen
Förlåt... Jag gav dig fel kod (nedan), här är koden jag ändrade..
Koda:
Sub MainList()
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 = falskt
Med Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Välj en mapp"
.AllowMultiSelect = Falskt
Set folder = Application.FileDialog(msoFileDialogFolderPicker)
Om folder.Show = -1 Då
xDir = folder.SelectedItems(1)
annars
Exit Sub
End If
Sluta med

Call ListFilesInFolder(xDir, True)
End Sub

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

' Lägg till ett mellanslag och sedan mappnamnet i arbetsbladet
rowIndex = rowIndex + 1
Med Application.ActiveSheet.Cells(rowIndex, 1)
.Value = xFolder.Name
.Teckensnittsstorlek = 12
.Font.FontStyle = "Fet kursiv"
Sluta med
rowIndex = rowIndex + 1

För varje xFile I xFolder.Files
Application.ActiveSheet.Cells(rowIndex, 1).Formel = xFile.Name
rowIndex = rowIndex + 1
Nästa xFile
Om xIsSubfolders Då
För varje xSubFolder i xFolder.SubFolders
ListFilesInFolder xSubFolder.Path, True
Nästa xSubFolder
rowIndex = rowIndex + 1
End If

Ställ in xFile = Ingenting
Ställ in xFolder = Ingenting
Ställ in xFileSystemObject = Ingenting

Ring MainList
End Sub


Denna kommentar minimerades av moderatoren på webbplatsen
Bra jobbat, precis vad jag försökte skapa. Men det här är 1000% bättre.
Det finns inga kommentarer här ännu
Lämna dina kommentarer
Postar som gäst
×
Betygsätt detta inlägg:
0   Tecken
Föreslagna platser

Följ oss

Copyright © 2009 - www.extendoffice.com. | Alla rättigheter förbehållna. Drivs av ExtendOffice. | | Sitemap
Microsoft och Office-logotypen är varumärken eller registrerade varumärken som tillhör Microsoft Corporation i USA och / eller andra länder.
Skyddad av Sectigo SSL