Прескочи на основното съдържание

Как да изброя всички файлове в папка и подпапки в работен лист?

Автор: Xiaoyang Последна промяна: 2020-04-28

Опитвали ли сте някога да изброите всички имена на файлове от папка в работен лист, включително файловете, разположени в нейните подпапки? Всъщност няма директен начин да изброим имената на файловете от папка и нейната подпапка в Excel, но днес ще представя някои бързи трикове за решаване на тази задача.

Избройте всички имена на файлове в папка и подпапка с VBA код

Избройте всички имена на файлове в папка и подпапка бързо и лесно с Kutools за Excel


Обикновено Excel няма вградена функция за справяне с тази задача, но можете да приложите следния VBA код, за да разрешите този проблем.

1. Активирайте нов работен лист, който ще изброи имената на файловете.

2. Задръжте натиснат ALT + F11 клавиши в Excel и отваря Microsoft Visual Basic за приложения прозорец.

3. Щракнете Поставете > Модулии поставете следния код в Прозорец на модула.

VBA код: Избройте всички имена на файлове в папка и подпапка

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. След като поставите кода в модула, натиснете F5 ключ за изпълнение на този код и a Макроси изскача диалогов прозорец, изберете Основен списък име на макрос и след това щракнете бягане бутон, вижте екранната снимка:

файлове със списък на документи в папка подпапка 1

5, И в паса прозорец, моля, изберете папката, в която искате да изброите всички имена на файлове, включително подпапките, вижте екранната снимка:

файлове със списък на документи в папка подпапка 2

6. След като посочите папката, щракнете OK и всички имена на файлове в папката и нейните подпапки са изброени в текущия работен лист от клетка A2, вижте екранните снимки:

файлове със списък на документи в папка подпапка 3
1
файлове със списък на документи в папка подпапка 4

С горния код можете просто да изброите имената на файловете, понякога трябва да изброите други атрибути, като размер на файла, тип файл, време на създаване, съдържаща папка и т.н. Kutools за Excel съдържа полезна функция – Списък с имена на файлове, с тази функция можете бързо да изброите всички или конкретни типове имена на файлове в папка и нейните подпапки.

Kutools за Excel : с повече от 300 удобни добавки за Excel, безплатни за изпробване без ограничение за 30 дни.

След инсталиране Kutools за Excel, моля, направете следните стъпки:

1. Щракнете Enterprise > Внос износ > Списък с имена на файлове, вижте екранна снимка:

2. В Списък с имена на файлове диалогов прозорец, направете следните операции:

A: Щракнете файлове със списък на документи в папка подпапка 7бутон, за да изберете папката, в която искате да изведете имената на файловете;

B: Посочете типа файл, който искате да посочите от Тип файлове раздел;

C: Изберете една единица за размер на файла, която искате да покажете от Единица за размер на файла раздел.

Забележка: За да изброите имената на файловете от подпапката, моля, проверете Включете файлове в поддиректории, можете също да проверите Включете скрити файлове и папки както ви трябва. Ако проверите Създайте хипервръзки опция, тя ще създаде хипервръзки за всяко име на файл и папка.

Изтеглете и изпробвайте безплатно сега!

3, След това кликнете OK всички файлове, съдържащи се в избраната папка и нейните подпапки, са показани със следните атрибути в нов работен лист. Вижте екранна снимка:

файлове със списък на документи в папка подпапка 8

Щракнете, за да научите повече подробности за тази помощна програма Filename List.

Изтеглете и изпробвайте безплатно Kutools за Excel сега!


Kutools за Excel: с повече от 300 удобни добавки за Excel, безплатни за изпробване без ограничение за 30 дни. Изтеглете и изпробвайте безплатно сега!

Най-добрите инструменти за продуктивност в офиса

🤖 Kutools AI помощник: Революционизирайте анализа на данни въз основа на: Интелигентно изпълнение   |  Генериране на код  |  Създаване на персонализирани формули  |  Анализирайте данни и генерирайте диаграми  |  Извикване на функциите на Kutools...
Популярни функции: Намерете, маркирайте или идентифицирайте дубликати   |  Изтриване на празни редове   |  Комбинирайте колони или клетки без загуба на данни   |   Кръг без формула ...
Супер търсене: VLookup с множество критерии    VLookup с множество стойности  |   VLookup в няколко листа   |   Размито търсене ....
Разширен падащ списък: Бързо създаване на падащ списък   |  Зависим падащ списък   |  Падащ списък с множество избори ....
Мениджър на колони: Добавете конкретен брой колони  |  Преместване на колони  |  Превключване на състоянието на видимост на скритите колони  |  Сравнете диапазони и колони ...
Препоръчани функции: Мрежов фокус   |  Изглед на дизайна   |   Голям формула бар    Мениджър на работни книги и листове   |  Библиотека с ресурси (Автоматичен текст)   |  Избор на дата   |  Комбинирайте работни листове   |  Шифроване/декриптиране на клетки    Изпращайте имейли по списък   |  Супер филтър   |   Специален филтър (филтър получер/курсив/зачертано...) ...
Топ 15 комплекта инструменти12 Текст Инструменти (добавяне на текст, Премахване на символи, ...)   |   50 + Графика Видове (диаграма на Гант, ...)   |   40+ Практичен формули (Изчислете възрастта въз основа на рождения ден, ...)   |   19 вмъкване Инструменти (Въведете QR код, Вмъкване на картина от пътя, ...)   |   12 Конверсия Инструменти (Числа към думи, Валутен обмен, ...)   |   7 Обединяване и разделяне Инструменти (Разширено комбиниране на редове, Разделени клетки, ...)   |   ... и още

Усъвършенствайте уменията си за Excel с Kutools за Excel и изпитайте ефективност, както никога досега. Kutools за Excel предлага над 300 разширени функции за повишаване на производителността и спестяване на време.  Щракнете тук, за да получите функцията, от която се нуждаете най-много...

Описание


Раздел Office Внася интерфейс с раздели в Office и прави работата ви много по-лесна

  • Разрешете редактиране и четене с раздели в Word, Excel, PowerPoint, Publisher, Access, Visio и Project.
  • Отваряйте и създавайте множество документи в нови раздели на един и същ прозорец, а не в нови прозорци.
  • Увеличава вашата производителност с 50% и намалява стотици кликвания на мишката за вас всеки ден!
Comments (22)
No ratings yet. Be the first to rate!
This comment was minimized by the moderator on the site
Is it possible to combine this with your other VBA to include hyperlinks?

e.g. hyperlinks to all files in a folder including subfolders?
This comment was minimized by the moderator on the site
Hello, Johnny,
To list all filenames in a folder and subfolders, and create hyperlinks to these files in an Excel worksheet, please apply the following code:
Sub ListFilesAndCreateHyperlinks()
    Dim FolderPath As String
    Dim OutputRow As Integer
    Dim FileSystem As Object
    Dim TargetFolder As Object
    Dim File As Object
    
    ' Set the path to the folder from which to list files
    FolderPath = "C:\Your\Folder\Path"  ' Change this to the desired folder path
    
    ' Create an instance of the FileSystemObject
    Set FileSystem = CreateObject("Scripting.FileSystemObject")
    Set TargetFolder = FileSystem.GetFolder(FolderPath)
    
    ' Initialize the row for output in Excel
    OutputRow = 1
    
    ' Call the recursive procedure to list files and create hyperlinks
    ListFiles TargetFolder, OutputRow
    
    ' Clean up
    Set File = Nothing
    Set TargetFolder = Nothing
    Set FileSystem = Nothing
End Sub

Sub ListFiles(ByVal Folder As Object, ByRef Row As Integer)
    Dim SubFolder As Object
    Dim File As Object
    
    ' List all files in the folder
    For Each File In Folder.Files
        ' Insert the file name
        With ActiveSheet
            .Cells(Row, 1).Value = File.Name
            .Hyperlinks.Add Anchor:=.Cells(Row, 1), Address:=File.Path, TextToDisplay:=File.Name
        End With
        Row = Row + 1  ' Move to the next row
    Next File
    
    ' Recursively list files in subfolders
    For Each SubFolder In Folder.SubFolders
        ListFiles SubFolder, Row
    Next SubFolder
End Sub


Note: Replace "C:\Your\Folder\Path" in the code with the path of the folder from which you want to list files.

Please have a try, hope it can help you!
This comment was minimized by the moderator on the site
Nice work, exactly what I was trying to create. But this is 1000% better.
This comment was minimized by the moderator on the site
Sorry... I gave you the wrong code (below), here is the code I modified..
Code:
Sub MainList()
On Error Resume Next
Dim xFileSystemObject As Object
Dim xFolder As Object
Dim xSubFolder As Object
Dim xFile As Object
Dim rowIndex As Long
Dim answer As Variant
answer = False
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Select a Folder"
.AllowMultiSelect = False
Set folder = Application.FileDialog(msoFileDialogFolderPicker)
If folder.Show = -1 Then
xDir = folder.SelectedItems(1)
Else
Exit Sub
End If
End With

Call ListFilesInFolder(xDir, True)
End Sub

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

' Add a space then the Folder Name to the Worksheet
rowIndex = rowIndex + 1
With Application.ActiveSheet.Cells(rowIndex, 1)
.Value = xFolder.Name
.Font.Size = 12
.Font.FontStyle = "Bold Italic"
End With
rowIndex = rowIndex + 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
rowIndex = rowIndex + 1
End If

Set xFile = Nothing
Set xFolder = Nothing
Set xFileSystemObject = Nothing

Call MainList
End Sub


This comment was minimized by the moderator on the site
I have modified your code to make it recycle and re-run the folder dialog continuously until you press Cancel.Unfornatually it generates some errors.1. If subfolders become involved in a folder selected then the next folder selected becomes out of numerical order.2. If subfolders become involved in a folder selected the Cancel button has to be repeated and repeated depending on how many folders you have added.
Code:
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 SubSub 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

any ideas ?
This comment was minimized by the moderator on the site
Does it work on MAC too?
This comment was minimized by the moderator on the site
Hey, so if I have to just extract an extension from the whole list, where should I make changes?
This comment was minimized by the moderator on the site
Really new to VBA. how do i use the above code but have the file path built into it so i don't have to search for it every time?
This comment was minimized by the moderator on the site
My VBA is saying that the variable folder is not defined. Anyone know why this is?
This comment was minimized by the moderator on the site
What was the purpose of the parameter ByVal xIsSubfolders As Boolean?
This comment was minimized by the moderator on the site
Extremamente elegante este código!
There are no comments posted here yet
Load More
Please leave your comments in English
Posting as Guest
×
Rate this post:
0   Characters
Suggested Locations