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

Как перечислить все файлы в папке и подпапках на листе?

Вы когда-нибудь пытались перечислить все имена файлов из папки на листе, включая файлы, расположенные в ее подпапках? Фактически, у нас нет прямого способа перечислить имена файлов из папки и ее подпапок в Excel, однако сегодня я представлю несколько быстрых приемов для решения этой задачи.

Список всех имен файлов в папке и подпапке с кодом VBA

Список всех имен файлов в папке и подпапке быстро и легко с помощью Kutools for 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 ключ для запуска этого кода и Макрос появится диалоговое окно, выберите Основной список имя макроса, а затем щелкните Run кнопку, см. снимок экрана:

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

5. И в Приложения В окне выберите папку, в которой вы хотите отобразить все имена файлов, включая подпапки, см. снимок экрана:

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

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

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

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

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

После установки Kutools for Excel, выполните следующие действия:

1. Нажмите Предприятие > Импорт Экспорт > Список имен файлов, см. снимок экрана:

2. В Список имен файлов диалоговом окне выполните следующие операции:

A: Нажмите файлы списка документов в подпапке 7кнопка для выбора папки, в которой вы хотите перечислить имена файлов;

B: Укажите тип файла, который вы хотите отобразить в Тип файлов раздел;

C: Выберите один размер файла, который вы хотите отобразить, из Единица размера файла .

Внимание: Чтобы вывести список имен файлов из подпапки, установите флажок Включить файлы в подкаталоги, вы также можете проверить Включать скрытые файлы и папки как вам нужно. Если вы проверите Создать гиперссылки вариант, он создаст гиперссылки для каждого имени файла и папки.

Загрузите и бесплатную пробную версию прямо сейчас!

3. Затем нажмите OK Кнопка, все файлы, содержащиеся в выбранной папке и ее подпапках, были отображены со следующими атрибутами на новом листе. Смотрите скриншот:

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

Нажмите, чтобы узнать больше об этой утилите «Список имен файлов».

Загрузите бесплатную пробную версию Kutools for Excel прямо сейчас!


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

Лучшие инструменты для работы в офисе

Kutools for Excel решает большинство ваших проблем и увеличивает вашу производительность на 80%

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

Вкладка Office: интерфейс с вкладками в Office и упрощение работы

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

Подосновной список()
On Error Resume Next
Set xRg = Application.InputBox("Пожалуйста, выберите ячейку для ввода имен файлов:", "KuTools For Excel", Selection.Address, , , , , 8)
Если xRg ничего не значит, выйдите из Sub
Установите xRg = xRg (1)
Установить папку = Application.FileDialog (msoFileDialogFolderPicker)
Если Folder.Show <> -1, то выйдите из Sub
xDir = Папка.SelectedItems(1)
Вызов ListFilesInFolder(xRg, xDir, True)
End Sub
Sub ListFilesInFolder (ByVal xRg As Range, ByVal xFolderName As String, ByVal xIsSubfolders As Boolean)
Dim xFileSystemObject как объект
Dim xFolder как объект
Dim 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 символов? Пожалуйста, мысли?
Этот комментарий был сведен к минимуму модератором на сайте
Большое спасибо за полезную статью!
Как я могу автоматически обновлять список и отслеживать изменения?
Этот комментарий был сведен к минимуму модератором на сайте
Это помогло мне преобразовать мой код для получения рекурсивного вызова, но мне интересно, как вы используете объекты. Я предпочитаю определять свои объекты как то, чем они являются, будь то рабочие книги, рабочие листы или объекты файловой системы. (например, затемните wbDest как excel.workbook, затемните wsDest как excel.worksheet. Таким образом, мне никогда не придется беспокоиться о том, что такое активный лист.

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

И с точки зрения записи в пункт назначения, я чувствовал, что использование ячеек и формул, казалось, было долгим путем.

Итак, в моем коде у меня есть, например,
wsDest.Range("B" & CurRow) = fil.name
(CurRow = текущая строка)

Я не критикую, просто интересно, делаете ли вы это по какой-либо причине, кроме личных предпочтений. - Всегда готов учиться


Но кроме этого спасибо за помощь
Этот комментарий был сведен к минимуму модератором на сайте
Спасибо за этот код, он помог мне с запросом на работу, теперь я могу импортировать эти результаты в Access для дальнейшего преобразования. Ценю это.
Этот комментарий был сведен к минимуму модератором на сайте
Sub "GetFileOwner()" в приведенном выше коде не используется.
Этот комментарий был сведен к минимуму модератором на сайте
Здравствуй, прыгун,
Приведенный выше код хорошо работает в моем Excel. Какую версию Excel вы используете?
Этот комментарий был сведен к минимуму модератором на сайте
Extremamente Elegante este código!
Этот комментарий был сведен к минимуму модератором на сайте
Какова цель параметра ByVal xIsSubfolders As Boolean?
Этот комментарий был сведен к минимуму модератором на сайте
Мой VBA говорит, что папка переменных не определена. Кто-нибудь знает, почему это так?
Этот комментарий был сведен к минимуму модератором на сайте
Действительно новичок в VBA. как мне использовать приведенный выше код, но иметь встроенный в него путь к файлу, чтобы мне не приходилось его искать каждый раз?
Этот комментарий был сведен к минимуму модератором на сайте
Эй, так что, если мне нужно просто извлечь расширение из всего списка, где я должен внести изменения?
Этот комментарий был сведен к минимуму модератором на сайте
На MAC тоже работает?
Этот комментарий был сведен к минимуму модератором на сайте
Я изменил ваш код, чтобы он постоянно перезапускал и повторно запускал диалоговое окно папки, пока вы не нажмете «Отмена». К сожалению, он генерирует некоторые ошибки. 1. Если в выбранной папке участвуют подпапки, то следующая выбранная папка становится не в порядке нумерации.2. Если в выбранной папке появляются подпапки, кнопку «Отмена» необходимо повторять и повторять в зависимости от того, сколько папок вы добавили.
Код:
Подосновной список()
'Обновить Extendoffice
Установить папку = Application.FileDialog (msoFileDialogFolderPicker)
Если folder.Show <> -1, то выйдите из Sub
xDir = папка.SelectedItems(1)
Вызов ListFilesInFolder(xDir, True)
End SubSub ListFilesInFolder (ByVal xFolderName As String, ByVal xIsSubfolders As Boolean)
Dim xFileSystemObject как объект
Dim xFolder как объект
Dim 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

есть идеи?
Этот комментарий был сведен к минимуму модератором на сайте
Извините... Я дал вам неправильный код (ниже), вот код, который я изменил..
Код:
Подосновной список()
On Error Resume Next
Dim xFileSystemObject как объект
Dim xFolder как объект
Dim xSubFolder как объект
Dim xFile как объект
Dim rowIndex As Long
Тусклый ответ как вариант
ответ = ложь
С Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Выберите папку"
.AllowMultiSelect = Ложь
Установить папку = Application.FileDialog (msoFileDialogFolderPicker)
Если папка.Показать = -1 Тогда
xDir = папка.SelectedItems(1)
Еще
Exit Sub
End If
Конец с

Вызов ListFilesInFolder(xDir, True)
End Sub

Sub ListFilesInFolder (ByVal xFolderName As String, ByVal xIsSubfolders As Boolean)
Установить xFileSystemObject = CreateObject("Scripting.FileSystemObject")
Установить xFolder = xFileSystemObject.GetFolder(xFolderName)
rowIndex = Application.ActiveSheet.Range("A65536").End(xlUp).Row + 1

' Добавьте пробел, а затем имя папки на рабочий лист
индекс_строки = индекс_строки + 1
С Application.ActiveSheet.Cells(rowIndex, 1)
.Value = 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 = Ничего

Вызов основного списка
End Sub


Этот комментарий был сведен к минимуму модератором на сайте
Хорошая работа, именно то, что я пытался создать. Но это на 1000% лучше.
Здесь еще нет комментариев
Оставляйте свои комментарии
Публикация как гость
×
Оценить этот пост:
0   Характеристики
Предлагаемые места

Подписывайтесь на Нас

Copyright © 2009 - www.extendoffice.ком. | Все права защищены. Питаться от ExtendOffice, | Карта сайта
Microsoft и логотип Office являются товарными знаками или зарегистрированными товарными знаками Microsoft Corporation в США и / или других странах.
Защищено Sectigo SSL