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

Як перерахувати всі файли в папці та підпапках на робочий аркуш?

Ви коли-небудь пробували перерахувати всі імена файлів з папки на робочий аркуш, включаючи файли, що знаходяться в його підпапках? Насправді у нас немає прямого способу перерахування імен файлів з папки та її підпапки в Excel, однак сьогодні я представив кілька швидких прийомів для вирішення цієї роботи.

Перелічіть усі імена файлів у папці та підпапці з кодом VBA

Перелічіть усі імена файлів у папці та підпапці швидко та легко за допомогою Kutools для Excel


Як правило, Excel не має вбудованої функції для вирішення цього завдання, але для завершення цієї проблеми ви можете застосувати наступний код VBA.

1. Активуйте новий аркуш, де буде вказано назви файлів.

2. Утримуйте клавішу ALT + F11 клавіші в Excel, і він відкриває Microsoft Visual Basic для додатків вікна.

3. Клацання Insert > Модуліта вставте наступний код у Вікно модуля.

Код 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 і всі імена файлів у папці та її підпапках були перераховані на поточному аркуші з комірки А2, див. скріншоти:

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

За допомогою наведеного вище коду ви можете просто перерахувати імена файлів, іноді вам потрібно вказати інші атрибути, такі як розмір файлу, тип файлу, час створення, що містить папку тощо. Kutools для Excel містить корисну функцію - Список імен файлів, за допомогою цієї функції ви можете швидко перерахувати всі або конкретні типи імен файлів у папці та її підпапках.

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

після установки Kutools для Excel, виконайте такі дії:

1. Клацання підприємство > Імпорт-експорт > Список імен файлів, див. скріншот:

2, в Список імен файлів у діалоговому вікні виконайте такі операції:

A: Натисніть файли списку документів у підпапці папки 7кнопку, щоб вибрати папку, до якої потрібно вказати імена файлів;

B: Укажіть тип файлу, який ви хочете внести в список Тип файлів розділ;

C: Виберіть одну одиницю розміру файлу, яку ви хочете відобразити, із Одиниця розміру файлу .

примітки: Щоб перерахувати імена файлів із вкладеної папки, перевірте Включити файли в підкаталоги, Ви також можете перевірити Включіть приховані файли та папки як вам потрібно. Якщо ви перевірите Створюйте гіперпосилання параметр, він створить гіперпосилання для кожного імені файлу та папки.

Завантажте та безкоштовну пробну версію зараз!

3. Потім натисніть OK кнопки, усі файли, що містяться у вибраній папці та її вкладених папках, відображаються з наступними атрибутами на новому аркуші. Дивіться знімок екрана:

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

Клацніть, щоб дізнатись більше про цю утиліту Список імен файлів.

Завантажте та безкоштовну пробну версію Kutools для Excel зараз!


Kutools для Excel: з більш ніж 300 зручними надбудовами Excel, спробуйте безкоштовно без обмежень протягом 30 днів. Завантажте та безкоштовно пробну версію зараз!

Найкращі інструменти для підвищення продуктивності офісу

Kutools для Excel вирішує більшість ваших проблем і збільшує продуктивність на 80%

  • Повторне використання: Швидко вставте складні формули, діаграми і все, що ви використовували раніше; Шифрувати комірки з паролем; Створити список розсилки та надсилати електронні листи ...
  • Супер формула бар (легко редагувати кілька рядків тексту та формули); Макет читання (легко читати та редагувати велику кількість комірок); Вставте у відфільтрований діапазон...
  • Об’єднати клітинки / рядки / стовпці без втрати даних; Вміст розділених комірок; Об'єднати повторювані рядки / стовпці... Запобігання дублюючим клітинам; Порівняйте діапазони...
  • Виберіть Повторюваний або Унікальний Рядки; Виберіть Пусті рядки (усі клітинки порожні); Супер знахідка та нечітка знахідка у багатьох робочих зошитах; Випадковий вибір ...
  • Точна копія Кілька клітинок без зміни посилання на формулу; Автоматичне створення посилань на кілька аркушів; Вставте кулі, Прапорці та інше ...
  • Витяг тексту, Додати текст, Видалити за позицією, Видаліть пробіл; Створення та друк проміжних підсумків підкачки; Перетворення вмісту комірок та коментарів...
  • Супер фільтр (зберегти та застосувати схеми фільтрів до інших аркушів); Розширене сортування за місяцем / тижнем / днем, частотою та іншим; Спеціальний фільтр жирним, курсивом ...
  • Поєднайте робочі зошити та робочі аркуші; Об’єднати таблиці на основі ключових стовпців; Розділіть дані на кілька аркушів; Пакетне перетворення xls, xlsx та PDF...
  • Понад 300 потужних функцій. Підтримує Office / Excel 2007-2021 і 365. Підтримує всі мови. Легке розгортання на вашому підприємстві чи в організації. 30-денна безкоштовна пробна версія повних функцій. 60-денна гарантія повернення грошей.
вкладка kte 201905

Вкладка Office забезпечує інтерфейс з вкладками для Office і значно спрощує вашу роботу

  • Увімкніть редагування та читання на вкладках у Word, Excel, PowerPoint, Publisher, Access, Visio та Project.
  • Відкривайте та створюйте кілька документів на нових вкладках того самого вікна, а не в нових вікнах.
  • Збільшує вашу продуктивність на 50% та зменшує сотні клацань миші для вас щодня!
дно офісної таблиці
Коментарі (20)
Поки немає оцінок. Оцініть першим!
Цей коментар був мінімізований модератором на сайті
Хороша стаття Дякую :D
Цей коментар був мінімізований модератором на сайті
шановний, дякую за цю чудову утиліту.....!!! анілкумар
Цей коментар був мінімізований модератором на сайті
ЯК Змусити ЦЕЙ ЗАПИТ ПРАЦЮВАТИ, ЩО ОТРИМАТИ ІМЕНИ ФАЙЛІВ, ЗАДАЧІ З комірки B2 замість A2?
Цей коментар був мінімізований модератором на сайті
Привіт, Сатіш,
Наведений нижче код може допомогти вам розмістити імена файлів у будь-яку вибрану клітинку, будь ласка, спробуйте:

Підголовний список()
On Error Resume Next
Встановіть xRg = Application.InputBox("Виберіть клітинку для введення назв файлів:", "KuTools For Excel", Selection.Address, , , , , 8)
Якщо xRg — нічого, вийдіть із Sub
Встановити xRg = xRg(1)
Встановити папку = Application.FileDialog(msoFileDialogFolderPicker)
Якщо Folder.Show <> -1, то вийдіть із Sub
xDir = Folder.SelectedItems(1)
Список викликівFilesInFolder(xRg, xDir, True)
End Sub
Sub ListFilesInFolder(ByVal xRg як діапазон, ByVal xFolderName як рядок, ByVal xIsSubfolders як логічне значення)
Змінити xFileSystemObject як об’єкт
Зменшіть xFolder як об’єкт
Заглушити папку xSubFolder як об’єкт
Dim xFile як об’єкт
Dim rowIndex As Long
Встановіть xFileSystemObject = CreateObject("Scripting.FileSystemObject")
Встановити xFolder = xFileSystemObject.GetFolder(xFolderName)
Індекс рядка = 1
Для кожного xFile у xFolder.Files
xRg.Formula = xFile.Name
Встановити xRg = xRg.Offset(rowIndex)
Індекс рядка = 1
Наступний файл xFile
Якщо xIsSubfolders Тоді
Для кожної папки xSubFolder в xFolder.SubFolders
ListFilesInFolder xRg, xSubFolder.Path, True
Наступна папка xSubFolder
End If
Встановіть xFile = Нічого
Встановіть xFolder = Нічого
Встановіть xFileSystemObject = Нічого
End Sub
Цей коментар був мінімізований модератором на сайті
чудово!!! подобається, дякую
Цей коментар був мінімізований модератором на сайті
Не впевнений... але чи враховує довгі папки. я написав подібний код, і він не працює, якщо шлях до папки/файлу перевищує 256 символів? Думки будь ласка?
Цей коментар був мінімізований модератором на сайті
Щиро дякую за корисну статтю!
Як я можу автоматично оновлювати список і помітити зміни?
Цей коментар був мінімізований модератором на сайті
Це допомогло мені перетворити мій код, щоб отримати рекурсивний виклик, але мені цікаво, як ви використовуєте об’єкти. Я вважаю за краще визначати свої об’єкти як те, що вони є, будь то робочі книги, аркуші чи об’єкти файлової системи. (наприклад, dim wbDest як excel.workbook, dim wsDest як excel.worksheet. Таким чином, мені ніколи не доведеться турбуватися про те, який активний аркуш.

Я також цікавився використанням .show - if.show <>-1, і не можу не відчувати, що людям було б легше зрозуміти, якби замість цього ви використали if.show = false.

І з точки зору запису до місця призначення, я відчув, що використання клітинок і формули, здавалося, довгий шлях

Тож у моєму коді я маю, наприклад,
wsDest.Range("B" & CurRow) = ім'я файлу
(CurRow = поточний рядок)

Я не критикую, просто цікаво, чи ви робите це так з будь-якої причини, крім особистих уподобань. - Завжди готовий вчитися


Але крім цього дякую за допомогу
Цей коментар був мінімізований модератором на сайті
Дякую вам за цей код, він допоміг мені зробити запит на роботу. Тепер я можу імпортувати ці результати в Access для подальшого перетворення. Дякуємо.
Цей коментар був мінімізований модератором на сайті
Підрозділ "GetFileOwner()" у коді вище не використовується.
Цей коментар був мінімізований модератором на сайті
Привіт, стрибун,
Наведений вище код добре працює в моєму Excel, яку версію Excel ви використовуєте?
Цей коментар був мінімізований модератором на сайті
Extremamente elegante este codigo!
Цей коментар був мінімізований модератором на сайті
Яка була мета параметра ByVal xIsSubfolders As Boolean?
Цей коментар був мінімізований модератором на сайті
Мій VBA каже, що папка змінних не визначена. Хтось знає, чому це так?
Цей коментар був мінімізований модератором на сайті
Справді новачок у VBA. як мені використовувати наведений вище код, але вбудувати в нього шлях до файлу, щоб мені не доводилося шукати його щоразу?
Цей коментар був мінімізований модератором на сайті
Гей, якщо мені потрібно просто витягти розширення з усього списку, де мені внести зміни?
Цей коментар був мінімізований модератором на сайті
Він також працює на MAC?
Цей коментар був мінімізований модератором на сайті
Я змінив ваш код, щоб зробити його перезавантаженням і повторно запускати діалогове вікно папки безперервно, доки ви не натиснете «Скасувати». На жаль, це генерує деякі помилки.1. Якщо підпапки стають залученими до вибраної папки, то наступна вибрана папка втрачає порядок номерів.2. Якщо підпапки стають залученими до вибраної папки, кнопку «Скасувати» потрібно повторити й повторити залежно від того, скільки папок ви додали.
код:
Підголовний список()
'Оновлення Extendoffice
Встановити папку = Application.FileDialog(msoFileDialogFolderPicker)
Якщо папка. Показати <> -1 Потім Вийти з доп
xDir = папка.SelectedItems(1)
Список викликівFilesInFolder(xDir, True)
End SubSub ListFilesInFolder(ByVal xFolderName як рядок, ByVal xIsSubfolders як Boolean)
Змінити xFileSystemObject як об’єкт
Зменшіть xFolder як об’єкт
Заглушити папку xSubFolder як об’єкт
Dim xFile як об’єкт
Dim rowIndex As Long
Встановіть xFileSystemObject = CreateObject("Scripting.FileSystemObject")
Встановити xFolder = xFileSystemObject.GetFolder(xFolderName)
rowIndex = Application.ActiveSheet.Range("A65536").End(xlUp).Row + 1
Для кожного xFile у xFolder.Files
Application.ActiveSheet.Cells(rowIndex, 1).Formula = xFile.Name
Індекс рядка = Індекс рядка + 1
Наступний файл xFile
Якщо xIsSubfolders Тоді
Для кожної папки xSubFolder в xFolder.SubFolders
ListFilesInFolder xSubFolder.Path, True
Наступна папка xSubFolder
End If
Встановіть xFile = Нічого
Встановіть xFolder = Нічого
Встановіть xFileSystemObject = Нічого
End Sub

any ideas?
Цей коментар був мінімізований модератором на сайті
Вибачте... Я дав вам неправильний код (нижче), ось код, який я змінив..
код:
Підголовний список()
On Error Resume Next
Змінити xFileSystemObject як об’єкт
Зменшіть xFolder як об’єкт
Заглушити папку xSubFolder як об’єкт
Dim xFile як об’єкт
Dim rowIndex As Long
Смутна відповідь як варіант
відповідь = Неправда
З Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Вибрати папку"
.AllowMultiSelect = False
Встановити папку = Application.FileDialog(msoFileDialogFolderPicker)
Якщо folder.Show = -1 Тоді
xDir = папка.SelectedItems(1)
Ще
Exit Sub
End If
Кінець з

Список викликівFilesInFolder(xDir, True)
End Sub

Sub ListFilesInFolder(ByVal xFolderName як рядок, ByVal xIsSubfolders як логічне значення)
Встановіть xFileSystemObject = CreateObject("Scripting.FileSystemObject")
Встановити xFolder = xFileSystemObject.GetFolder(xFolderName)
rowIndex = Application.ActiveSheet.Range("A65536").End(xlUp).Row + 1

' Додайте пробіл, а потім назву папки до робочого аркуша
Індекс рядка = Індекс рядка + 1
З Application.ActiveSheet.Cells(rowIndex, 1)
.Значення = xFolder.Name
.Розмір шрифту = 12
.Font.FontStyle = "Жирний курсив"
Кінець з
Індекс рядка = Індекс рядка + 1

Для кожного xFile у xFolder.Files
Application.ActiveSheet.Cells(rowIndex, 1).Formula = xFile.Name
Індекс рядка = Індекс рядка + 1
Наступний файл xFile
Якщо xIsSubfolders Тоді
Для кожної папки xSubFolder в xFolder.SubFolders
ListFilesInFolder xSubFolder.Path, True
Наступна папка xSubFolder
Індекс рядка = Індекс рядка + 1
End If

Встановіть xFile = Нічого
Встановіть xFolder = Нічого
Встановіть xFileSystemObject = Нічого

Виклик MainList
End Sub


Цей коментар був мінімізований модератором на сайті
Гарна робота, саме те, що я намагався створити. Але це на 1000% краще.
There are no comments posted here yet
Залишайте свої коментарі
Публікація як гість
×
Оцініть цю публікацію:
0   Персонажі
Рекомендовані місця

Слідуй за нами

Copyright © 2009 - WWW.extendoffice.com. | Всі права захищені. На основі ExtendOffice. | Карта сайту
Microsoft та логотип Office є товарними знаками або зареєстрованими товарними знаками Microsoft Corporation у США та / або інших країнах.
Захищений Sectigo SSL