Список файлов из папки в excel

Получение списка файлов в папке

Список файлов из папки в excel

Кошки – это очень характерные домашние животные, которые любят всё делать по-своему. Из-за этого хозяева сталкиваются с такими проблемами, как уничтоженные цветы, разбитые статуэтки и перегрызенные провода.

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

Вот почему так важно вовремя понять, как отучить кота грызть провода.

В нашем adoption-центре не раз сталкивались с этой проблемой, поэтому выработали несколько советов, которые помогут отучить кошку или кота от вредной привычки.

1. Провода – это не игрушки

Любой кот, независимо от того, котёнок он или взрослая особь, очень любит играть. А провода, особенно от наушников, напоминают ему очень интересные и весёлые игрушки. Поэтому, чтобы отучить кошек грызть провода, стоит постараться сделать так, чтобы они не напоминали верёвочки и ленточки, с которыми так интересно играть, кусая и царапая коготками.

Чаще всего коты обращают внимание на те провода, которые просто болтаются. Они смотрят на них и видят потенциальную игрушку, с которой можно поразвлечься.

Поэтому чтобы отбить у котёнка подобное желание, нужно сразу же, как только он появился в доме, постараться их максимально скрыть. Для этого все провода, которые идут вдоль стен закрывают мебелью.

Если же речь идёт о компьютерных проводах, то их стоит закрепить так, чтобы они перестали быть настолько привлекательными для игр и покусывания.

2. Не бросайте повода на видном месте

Хозяевам придётся смириться с тем, что всё тонкое, напоминающее верёвки и ленточки вызывает у животного желание играть. Коты ведь хищники, которые реагируют на движущиеся объекты. К тому же, владельцы сами приучают их играться с верёвочками, а кошкам сложно понять, что наушники – это совсем не верёвочка, которая предназначена для забав.

Поэтому, если нет желания постоянно покупать новые наушники, наиболее правильным решением будет просто их спрятать. То же самое касается кабелей для зарядки. Чем меньше раздражителей будет в доме, тем меньше и поводов наказывать котёнка, который случайно перегрыз зарядку или любимые наушники.

3. Специальная оболочка – лучшая защита

Когда котёнок хочет грызть провода, за ним сложно уследить. Поэтому, чтобы не тратить время, нервы и силы на постоянный тотальный контроль над животным, можно использовать специальные защитные оболочки.

Причём не обязательно покупать что-то дорогостоящее. Например, для защиты кабелей отлично подходят шланги, применяемые в аэрации аквариумов.

Ну а те хозяйки, которые любят заниматься рукоделием, вообще могут поступить очень креативно – пошить на все провода специальные чехлы.

Если же у владельцев нет времени и возможности придумывать и покупать специальную защиту, можно выбрать самый простой вариант – изоленту. Несколько слоёв этой клейкой ленты станут хорошей защитой от коготков кота. Правда, если для животного желание перегрызть провод становится идеей фикс, изолента не продержится долгое время и всё же придется искать альтернативные варианты.

4. Коты не едят то, что для них пахнет плохо

Для котов очень важны запахи и вкусы. Поэтому, если провод источает аромат, который раздражает животное, оно не станет его грызть и кусать. Существует много вариантов, которые можно найти в магазинах и аптеках.

Более подробно о них расскажем далее. Главное – выбрать то, что не навредит животному и не станет раздражать всех, кто находится в помещении.

Так как у котов более чувствительный нюх, для них подойдут даже те запахи, которые люди попросту не замечают.

5. Рефлексы – это важно

Как и у любых животных, у котов есть рефлексы, и если их правильно выработать, то можно избавиться от хлопот раз и навсегда. Главное – помнить о том, что животное ни в чём не виновато, и его нельзя ругать. Криками на животное вы от него ничего не добьётесь.

В нашем adoption-центре работники давно поняли, что коты просто не понимают, почему им запрещают трогать провода. Даже самое умное животное не способно осознать, что своими действиями оно портит технику и создаёт реальную угрозу. Поэтому крики тут ничем не помогут. Вместо этого у животных должна выработаться взаимосвязь между их действиями и негативными последствиями.

В этом случае очень хорошо помогает пульверизатор, так как вода – это один из самых главных врагов кошек. Каждый раз, когда хозяин замечает, что котик начинает тянуться к проводам, его нужно легонько побрызгать из пульверизатора.

Животное от этого не пострадает, но со временем у него разовьётся рефлекс: дотронусь до провода – буду мокрым. Благодаря такому нехитрому способу можно отучить кота грызть провода, не нанося ему никакого физического ущерба.

А это очень важно, ведь хороший хозяин никогда незахочет обидеть и сделать больно своему любимцу.

Средства для защиты проводов

Теперь подробнее поговорим о средствах, которые применяют для обработки проводов.

Это могут быть:

– алоэ;

– горчица;

– эфирные масла;

– лимонные корки;

– специальные средства (спреи типа “Антигрызин”).

Лимон – это самый быстрый, но недолговременный способ, поскольку запах быстро выветривается. Его можно применять в том случае, когда срочно нужно оставить кошку наедине с проводами, и есть риск, что по возвращению хозяева обнаружат настоящую катастрофу. То же самое касается и горчицы.

Эфирные масла держатся дольше, поэтому их можно использовать в тех случаях, когда сильный запах не раздражает самих хозяев.

Наиболее удобные варианты – это алоэ и спрей.

Плюсы спреев состоят в следующем:

1. Они обладают цитрусовым запахом, приятным для людей и раздражающим для котов;

2. Продаются во всех ветеринарных аптеках и зоомагазинах;

3. Подходят как для кабелей, так и для ковров и обоев.

Такой спрей – это универсальное средство, которое помогает не только отучить грызть провода, но и гадить на коврах, рвать обои.

Не менее эффективным является и сок алоэ. Он очень горький, поэтому попробовав “на вкус” провода, обработанные соком алоэ, питомцы очень долго не захотят подходить к ним снова.

Мы считаем важным предупредить владельцев, что способ обработки проводов при помощи сока алоэ является достаточно жёстким. Коту или кошке будет очень неприятно. К тому же, у него может начаться сильное слюноотделение, в этом случае ротовую полость животного необходимо прополоскать водой.

Какой бы метод не был выбран, нужно помнить о том, что животное не виновато, и им движут рефлексы, так что придётся набраться терпения и постараться не слишком злиться на домашнего любимца. Однако никакие сложности адаптации не сравнятся с радостью, которую испытывает человек при появлении кошки в доме.

Источник: https://pikabu.ru/story/poluchenie_spiska_faylov_v_papke_7014186

Список файлов в папке

Список файлов из папки в excel
23080 06.10.2012 Скачать пример

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

  • перечислить в приложении к договору на проведение тренинга список файлов из раздаточных материалов для особо щепетильных юристов в некоторых компаниях
  • создать список файлов для ТЗ проекта
  • сравнить содержимое папок (оригинал и бэкап, например)

Для реализации подобной задачи можно использовать несколько способов.

Способ 1. Скелет из шкафа – функция ФАЙЛЫ

Этот способ использует древнюю функцию ФАЙЛЫ (FILES), оставшуюся в Microsoft Excel с далеких девяностых. Вы не найдете эту функцию в общем списке функций, но для совместимости, она всё ещё остаётся внутри движка Excel, и мы вполне можем её использовать.

Механизм таков:

1. В любую ячейку листа (например, в А1) введём путь к папке, список файлов из которой мы хотим получить.

Обратите внимание, что путь должен оканчиваться шаблоном со звездочками:

  • *.* – любые файлы
  • *.xlsx – книги Excel (только с расширением xlsx)
  • *.xl* – любые файлы Excel
  • *отчет* – файлы, содержащие слово отчет в названии

и т.д.

2. Создадим именованный диапазон с помощью вкладки Формулы – далее кнопка Диспетчер имен – Создать (Formulas – Names Manger – Create). В открывшемся окне введем любое имя без пробелов (например Мои_файлы) и в поле диапазона выражение:

=ФАЙЛЫ(Лист1!$A$1)

После нажатия на ОК будет создан именованный диапазон с именем Мои_файлы, где хранится список всех файлов из указанной в А1 папки. Останется их оттуда только извлечь.

3. Чтобы извлечь имена отдельных файлов из созданной переменной, используем функцию ИНДЕКС (INDEX), которая в Excel вытаскивает данные из массива по их номеру:

Если лениво делать отдельный столбец с нумерацией, то можно воспользоваться костылем в виде функции СТРОКИ (ROWS), которая будет подсчитывать количество заполненных строк с начала списка автоматически:

=ИНДЕКС(Мои_файлы; ЧСТРОК($B$3:B3))

Ну, и скрыть ошибки #ССЫЛКА! в конце списка (если вы протягиваете формулу с запасом) можно стандартной функцией ЕСЛИОШИБКА (IFERROR):

=ЕСЛИОШИБКА(ИНДЕКС(Мои_файлы; ЧСТРОК($B$3:B3)); “”)

Важное примечание: формально функция ФАЙЛЫ относится к макро-функциям, поэтому необходимо будет сохранить ваш файл в формате с поддержкой макросов (xlsm или xlsb).

Способ 2. Готовый макрос для ленивых

Если вы знакомы с макросами (не в смысле их программирования, а в смысле копипастинга готовых кодов на VBA), то вам, возможно, отлично зайдёт небольшой макрос, добавляющий в текущую книгу новый пустой лист и выводящий на него список всех файлов с их параметрами из заданной пользователем папки.

Для добавления макроса в вашу книгу нажмите сочетание клавиш Alt+F11, или кнопку Visual Basic на вкладке Разработчик (Developer), в открывшемся окне редактора Visual Basic вставьте новый модуль через меню Insert – Module и скопируйте туда текст этого макроса:

Sub FileList() Dim V As String Dim BrowseFolder As String 'открываем диалоговое окно выбора папки With Application.FileDialog(msoFileDialogFolderPicker) .Title = “Выберите папку или диск” .Show On Error Resume Next Err.Clear V = .SelectedItems(1) If Err.Number 0 Then MsgBox “Вы ничего не выбрали!” Exit Sub End If End With BrowseFolder = CStr(V) 'добавляем лист и выводим на него шапку таблицы ActiveWorkbook.Sheets.Add With Range(“A1:E1”) .Font.Bold = True .Font.Size = 12 End With Range(“A1”).Value = “Имя файла” Range(“B1”).Value = “Путь” Range(“C1”).Value = “Размер” Range(“D1”).Value = “Дата создания” Range(“E1”).Value = “Дата изменения” 'вызываем процедуру вывода списка файлов 'измените True на False, если не нужно выводить файлы из вложенных папок ListFilesInFolder BrowseFolder, True End Sub Private Sub ListFilesInFolder(ByVal SourceFolderName As String, ByVal IncludeSubfolders As Boolean) Dim FSO As Object Dim SourceFolder As Object Dim SubFolder As Object Dim FileItem As Object Dim r As Long Set FSO = CreateObject(“Scripting.FileSystemObject”) Set SourceFolder = FSO.getfolder(SourceFolderName) r = Range(“A65536”).End(xlUp).Row + 1 'находим первую пустую строку 'выводим данные по файлу For Each FileItem In SourceFolder.Files Cells(r, 1).Formula = FileItem.Name Cells(r, 2).Formula = FileItem.Path Cells(r, 3).Formula = FileItem.Size Cells(r, 4).Formula = FileItem.DateCreated Cells(r, 5).Formula = FileItem.DateLastModified r = r + 1 X = SourceFolder.Path Next FileItem 'вызываем процедуру повторно для каждой вложенной папки If IncludeSubfolders Then For Each SubFolder In SourceFolder.SubFolders ListFilesInFolder SubFolder.Path, True Next SubFolder End If Columns(“A:E”).AutoFit Set FileItem = Nothing Set SourceFolder = Nothing Set FSO = Nothing End Sub

Для запуска макроса нажмите сочетание клавиш Alt+F8,или кнопку Макросы (Macros) на вкладке Разработчик (Developer), выберите наш макрос FileList и нажмите кнопку Выполнить (Run). В диалоговом окне выберите любую папку или диск и – вуаля!

Если захотите, чтобы вместо пути к файлу в столбце B выводилась живая гиперссылка, то замените 52-ю строку

Cells(r, 2).Formula = FileItem.Path

на

Cells(r, 2).Formula = “=HYPERLINK(“”” & FileItem.Path & “””)”

Способ 3. Мощь и красота – надстройка Power Query

Power Query – это очень мощная и при этом бесплатная надстройка для Excel от Microsoft, упрощающая множество задач по загрузке и трансформации данных. В нашей ситуации она тоже может здорово помочь.

Если у вас Excel 2016 или новее, то Power Query уже встроена в Excel по умолчанию, поэтому просто на вкладке Данные выберите команду Создать запрос / Получить данные – Из файла – Из папки(Create Query / Get Data – From file – From folder).

Если у вас Excel 2010-2013, то Power Query нужно будет скачать с сайта Microsoft и установить как отдельную надстройку и она появится у вас в Excel в виде отдельной вкладки Power Query.

На ней будет аналогичная кнопка Из файла – Из папки (From file – From folder).

В открывшемся окне нужно будет указать папку, содержимое которой мы хотим получить. После нажатия на ОК Power Query обшарит указанную папку и все вложенные подпапки и выдаст на экран окно с предварительным просмотром результатов:

Если внешний вид списка вас устраивает, то можно смело жать внизу кнопку Загрузить (Load), чтобы залить эти данные на новый лист. Если же хочется дополнительно обработать список (удалить лишние столбцы, отобрать только нужные файлы и т.п.), то нужно выбрать команду Изменить / Преобразовать данные (Edit / Transform Data).

Поверх окна Excel откроется окно редактора Power Query, где мы увидим список всех наших файлов в виде таблицы:

Дальше возможны несколько вариантов:

  • Если нужны только файлы определенного типа, то их можно легко отобрать с помощью фильтра по столбцу Extension:
  • Аналогичным образом фильтрами по столбцам Date accessed, Date modified или Date created можно отобрать файлы за нужный период (например, созданные только за последний месяц и т.п.):
  • Если нужно получить данные не из всех папок, то фильтруем по столбцу Folder Path, чтобы оставить только те строки, где путь содержит/не содержит нужные имена папок:
  • Там же можно выполнить сортировку файлов по любому столбцу, если требуется.

После того, как необходимые файлы отобраны, можно смело удалить ненужные столбцы, щелкнув по заголовку столбца правой кнопкой мыши и выбрав команду Удалить (Remove column). Это, кстати, уже никак не повлияет на фильтрацию или сортировку нашего списка:

Если в будущем планируется подсчитывать количество файлов в каждой папке (например, для контроля поступивших заявок или подсчета статистики по заявкам), то имеет смысл дополнительно сделать ещё пару действий:

  • Щелкните правой кнопкой мыши по столбцу Folder Path и выберите команду Дублировать столбец (Duplicate Column).
  • Выделите скопированный столбец и на вкладке Преобразование (Transform) выберите Разделить столбец – По разделителю (Split Column – By delimiter)

Мы получим рядом с нашими данными еще несколько столбцов, где будут продублированы имена вложенных папок – это пригодится нам чуть позже для подсчета статистики с помощью сводной таблицы:

Получившиеся столбцы можно переименовать (Диск, Папка1, Папка2 и т.д.), просто щёлкнув дважды по заголовку каждого.

И, наконец, когда список готов, то его можно выгрузить на лист с помощью команды – Закрыть и загрузить – Закрыть и загрузить в… (Home – Close & Load – Close & Load to…):

И, само-собой, теперь можно построить по нашей таблице сводную (вкладка Вставка – Сводная таблица), чтобы легко подсчитать количество файлов в каждой папке:

Дополнительным бонусом можно сделать еще один столбец с функцией ГИПЕРССЫЛКА (HYPERLINK), которая создаст красивые стрелочки-ссылки для моментального перехода к каждому файлу:

Мелочь, а приятно 🙂

И вдвойне приятно, что в будущем, при изменении содержимого исходной папки, достаточно будет просто щелкнуть мышью по нашей таблице и выбрать команду Обновить (Refresh) – и Power Query выполнит всю цепочку запрограммированных нами единожды действий уже автоматически, отобразив все изменения в составе папки.

Ссылки по теме

Источник: https://www.planetaexcel.ru/techniques/3/45/

Как получить список файлов в Excel с помощью VBA

Список файлов из папки в excel

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

Давайте рассмотрим несколько способов получения списка файлов.

Способ 1. Использование функции Dir

Этот способ хорош тем, что в данном случае мы не подключаем дополнительных библиотек, а пользуемся только предустановленным функционалом. Способ подойдет, если вам необходимо просто получить список файлов в папке и не нужно выводить их размер, определять тип файла, дату его создания/изменения и т.п. Тут мы получаем только наименования файлов и больше ничего.

Вот там код данной функции, который выводит на лист 1 перечень файлов.

'************************************************************** ' Sub : ExampleOne ' Author : Алексей Желтов ' Date : 15.06.2020 ' Purpose : Вывод всех файлов в папке на лист '************************************************************** Sub ExampleOne() Dim Sh As Worksheet Dim Folder As String Dim FileName As String Dim i As Long Set Sh = ThisWorkbook.Sheets(1) Folder = Sh.Cells(3, 2) ' Проверка корректности введенных данных If PathExists(Folder) = False Then MsgBox “Указанной папки не существует”, 16, “Ошибка исходных данных” Exit Sub End If ' Удаляем содержимое Sh.Rows(“7:” & Sh.Range(“A7”).End(xlDown).Row).Delete Shift:=xlUp i = 7 FileName = Dir(Folder & “/”, vbNormal) Do While FileName “” Sh.Cells(i, 1) = i – 6 Sh.Cells(i, 2) = FileName i = i + 1 ' переход к следующему файлу FileName = Dir Loop End Sub

Тут мы проверяем существование папки с помощью дополнительной функции. Опять таки не используем сторонних библиотек, а используем туже функцию Dir.

'************************************************************** ' Function : PathExists ' Author : Алексей Желтов ' Date : 15.06.2020 ' Purpose : Возвращает ИСТИНА если путь pname существует '************************************************************** Private Function PathExists(pname As String) As Boolean On Error Resume Next If Dir(pname, vbDirectory) = “” Then PathExists = False Else PathExists = (GetAttr(pname) And vbDirectory) = vbDirectory End If End Function

Вот так выглядит результат работы функции. Программа записала список файлов на текущий лист Excel.

Здесь мы не делали проверку на тип файла и вывели все файлы которые у нас были. 

Если же необходимо отобрать только определенные типы файлов, например Excel файлы, то в нашем коде необходимо сделать дополнительную проверку:
Do While FileName “” If LCase(FileName) “*xls*” Then Sh.Cells(i, 1) = i – 6 Sh.Cells(i, 2) = FileName i = i + 1 End If ' переход к следующему файлу FileName = Dir Loop

Знак “*” означает любой набор символов. Таким образом, мы учли различные версии файлов Excel (xls, xlsx, xlsm).

Способ 2. Используем объект FileSystemObject

В данном случае мы будем не просто получать названия файлов, но также определять тип файла, получать его размер и дату создания. Для этого нам потребуется использовать объект FileSystemObject. Он предоставляет нам сведения о файловой системе компьютера.

Однако, чтобы начать его использовать придется подключить одну библиотеку. Не пугайтесь, она есть на всех компьютерах с Windows, потому скачивать ничего не придется. Чтобы подключить ее необходимо:

  1. Открыть пункт меню Tools и выбрать пункт References.
  2. Выбрать ссылку на библиотеку Microsoft Scripting Runtime
  3. Нажать Ок.

Теперь перейдем к коду. Он немного упростился:

'************************************************************** ' Sub : ExampleTwo ' Author : Алексей Желтов ' Date : 15.06.2020 ' Purpose : Вывод всех файлов в папке на лист '************************************************************** Sub ExampleTwo() Dim Sh As Worksheet Dim FSO As New FileSystemObject Dim FolderPath As String Dim MyFolder As Folder Dim iFile As File Dim i As Long Set Sh = ThisWorkbook.Sheets(2) FolderPath = Sh.Cells(3, 2) ' Проверка корректности введенных данных If Not FSO.FolderExists(FolderPath) Then MsgBox “Указанной папки не существует”, 16, “Ошибка исходных данных” Exit Sub End If ' Удаляем содержимое Sh.Rows(“7:” & Sh.Range(“A7”).End(xlDown).Row).Delete Shift:=xlUp Set MyFolder = FSO.GetFolder(FolderPath) i = 7 For Each iFile In MyFolder.Files Sh.Cells(i, 1) = i – 6 Sh.Cells(i, 2) = iFile.Name Sh.Cells(i, 3) = iFile.Type Sh.Cells(i, 4) = iFile.DateCreated Sh.Cells(i, 5) = iFile.Size i = i + 1 Next End Sub

Обратите внимание на переменные. Переменная FSO – это новый экземпляр объекта FileSystemObject. Тут мы его объявляем и сразу создаем. Директива New очень важна, многие тут допускают ошибку. Также создаем объекты MyFolder и iFile – это тоже объекты FileSystemObject

Dim Sh As Worksheet Dim FSO As New FileSystemObject ' объявляем и создаем новый экземпляр объекта Dim FolderPath As String Dim MyFolder As Folder Dim iFile As File Dim i As Long

Далее делаем проверку на существование папки. В данном случае нам не нужна дополнительная функция , мы пользуемся методом FolderExists объекта (класса) FileSystemObject.

Ну и остается аналогично перебрать все файлы в директории. Тут удобно использовать цикл For Each – Next.

For Each iFile In MyFolder.Files Sh.Cells(i, 1) = i – 6 Sh.Cells(i, 2) = iFile.Name ' название файла Sh.Cells(i, 3) = iFile.Type ' тип файла Sh.Cells(i, 4) = iFile.DateCreated ' дата создания Sh.Cells(i, 5) = iFile.Size ' размер i = i + 1 Next

Результат работы программы следующий:

Способ 3. Создаем функцию, которая возвращает файлы в папке и подпапках

Напоследок разберем функцию, которая будет возвращать нам все файлы в текущей папке и во вложенных папках. Вообще это универсальная функция, которая подойдет на все случаи жизни. Смело копируйте ее в свой проект! 

Итак перейдем к коду:

'************************************************************** ' Function : GetFiles ' Author : Алексей Желтов ' Date : 15.06.2020 ' Purpose : Получение файлов из папок и подпапок '************************************************************** Public Function GetFiles(ByVal Path As String, Optional ByVal Filter As String = “*”, Optional ByVal Nesting As Long = 100) As Collection Dim MainFolder As Folder Dim iFolder As Folder Dim iFile As File Dim FSO As New FileSystemObject Dim MainColl As New Collection Dim iColl As Collection Dim spltFilter() As String Dim i As Long Set MainFolder = FSO.GetFolder(Path) If MainFolder Is Nothing Then Exit Function spltFilter = Split(Filter, “,”) ' Перебираем файлы For Each iFile In MainFolder.Files ' Игнорируем временные файлы If InStr(1, iFile.Name, “~”) = 0 Then ' Проверяем фильтры файлов For i = 0 To UBound(spltFilter) If LCase(iFile.Name) “*” & LCase(spltFilter(i)) Then MainColl.Add iFile, iFile.Path End If Next End If Next ' Перебираем вложенные папки If Nesting > 0 Then For Each iFolder In MainFolder.SubFolders ' рекурсивный вызов функции Set iColl = GetFiles(iFolder.Path, Filter, Nesting – 1) 'добавляем файлы из вложенных папок For i = 1 To iColl.Count MainColl.Add iColl(i), iColl(i).Path Next Next End If Set GetFiles = MainColl End Function

Разберем основные моменты этой функции. На вход она принимает один обязательный аргумент – это путь к папке Path. Также может принимать два необязательных параметра:

  • Filter – перечисление списка файлов, которые мы хотим получить. Перечислять необходимо через запятую, например “doc, xls*”. Вы можете использовать символ “*” чтобы включить сравнение по шаблону. По умолчанию фильтр отсутствует и возвращаются все типы файлов.
  • Nesting – вложенность. Это максимальное число вложенных папок в которые “проваливается” алгоритм. По умолчанию равно 100.

В целом по алгоритму комментарии лишние, все должно быть понятно. Основной момент хочу обратить на строку 38.

For Each iFolder In MainFolder.SubFolders ' рекурсивный вызов функции Set iColl = GetFiles(iFolder.Path, Filter, Nesting – 1) 'добавляем файлы из вложенных папок For i = 1 To iColl.Count MainColl.Add iColl(i), iColl(i).Path Next Next

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

Теперь когда наша функция готова, просто используем ее где нам требуется вот так:

'************************************************************** ' Sub : ExampleThree ' Author : Алексей Желтов ' Date : 15.06.2020 ' Purpose : Вывод всех файлов в папке на лист '************************************************************** Sub ExampleThree() Dim Sh As Worksheet Dim FolderPath As String Dim iFile As File Dim i As Long Dim Coll As Collection Dim FSO As New FileSystemObject Set Sh = ThisWorkbook.Sheets(3) FolderPath = Sh.Cells(3, 2) Set Coll = GetFiles(FolderPath) For i = 1 To Coll.Count Set iFile = Coll(i) Sh.Cells(i + 6, 1) = i Sh.Cells(i + 6, 2) = iFile.Name Sh.Cells(i + 6, 3) = FSO.GetFolder(iFile.ParentFolder).Name Sh.Cells(i + 6, 4) = iFile.Type Sh.Cells(i + 6, 5) = iFile.DateCreated Sh.Cells(i + 6, 6) = iFile.Size Next End Sub

Функция нам возвращает коллекцию файлов в папке и подпапках. Вот так:

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

Скачать

Источник: https://micro-solution.ru/excel/vba/get-files-in-folder

Получение списка файлов в папке и подпапках средствами VBA

Список файлов из папки в excel

Функция FilenamesCollection предназначена для получения списка файлов из папки, с учётом выбранной глубины поиска в подпапках.

Используется рекурсивный перебор папок, до заданного уровня вложенности.
В процессе перебора папок, пути у найденным файлам помещаются в коллекцию (объект типа Collection) для последующего перебора.

К статье прикреплено 2 примера файла с макросами на основе этой функции:

  • Пример в файле FilenamesCollection.xls выводит список файлов на чистый лист новой книги (формируя заголовки) 
  • Пример в файле FilenamesCollectionEx.xls более функционален – он, помимо списка файлов из папки, отображает размер файла, и дату его создания, а также формирует в ячейках гиперссылки на найденные файлы.Вывод списка производится на лист запуска, параметры поиска файлов задаются в ячейках листа (см. скриншот)

Макрос FolderStructure выводит в таблицу Excel список файлов и подпапок с отображением структуры (вложенности файлов и подпапок)

ПРИМЕЧАНИЕ: Если вы выводите на лист список имен файлов картинок (изображений), то при помощи этой надстройки вы сможете вставить сами картинки в ячейки соседнего столбца (или в примечания к этим ячейкам)

Внимание: если требуется, чтобы поиск не зависел от регистра символов в маске файла
(к примеру, обнаруживались не только файлы .txt, но и .TXT и .Txt),
поставьте первой строкой в модуле директиву Option Compare Text

Function FilenamesCollection(ByVal FolderPath As String, Optional ByVal Mask As String = “”, _ Optional ByVal SearchDeep As Long = 999) As Collection ' © EducatedFool excelvba.

ru/code/FilenamesCollection ' Получает в качестве параметра путь к папке FolderPath, ' маску имени искомых файлов Mask (будут отобраны только файлы с такой маской/расширением) ' и глубину поиска SearchDeep в подпапках (если SearchDeep=1, то подпапки не просматриваются).

' Возвращает коллекцию, содержащую полные пути найденных файлов ' (применяется рекурсивный вызов процедуры GetAllFileNamesUsingFSO) Set FilenamesCollection = New Collection ' создаём пустую коллекцию Set FSO = CreateObject(“Scripting.

FileSystemObject”) ' создаём экземпляр FileSystemObject GetAllFileNamesUsingFSO FolderPath, Mask, FSO, FilenamesCollection, SearchDeep ' поиск Set FSO = Nothing: Application.

StatusBar = False ' очистка строки состояния ExcelEnd Function Function GetAllFileNamesUsingFSO(ByVal FolderPath As String, ByVal Mask As String, ByRef FSO, _ ByRef FileNamesColl As Collection, ByVal SearchDeep As Long) ' перебирает все файлы и подпапки в папке FolderPath, используя объект FSO ' перебор папок осуществляется в том случае, если SearchDeep > 1 ' добавляет пути найденных файлов в коллекцию FileNamesColl On Error Resume Next: Set curfold = FSO.GetFolder(FolderPath) If Not curfold Is Nothing Then ' если удалось получить доступ к папке ' раскомментируйте эту строку для вывода пути к просматриваемой ' в текущий момент папке в строку состояния Excel ' Application.StatusBar = “Поиск в папке: ” & FolderPath For Each fil In curfold.Files ' перебираем все файлы в папке FolderPath If fil.Name “*” & Mask Then FileNamesColl.Add fil.Path Next SearchDeep = SearchDeep – 1 ' уменьшаем глубину поиска в подпапках If SearchDeep Then ' если надо искать глубже For Each sfol In curfold.SubFolders ' перебираем все подпапки в папке FolderPath GetAllFileNamesUsingFSO sfol.Path, Mask, FSO, FileNamesColl, SearchDeep Next End If Set fil = Nothing: Set curfold = Nothing ' очищаем переменные End IfEnd Function

' Пример использования функции в макросе:

Sub ОбработкаФайловИзПапки() On Error Resume Next Dim folder$, coll As Collection  folder$ = ThisWorkbook.Path & “\Платежи\” If Dir(folder$, vbDirectory) = “” Then MsgBox “Не найдена папка «” & folder$ & “»”, vbCritical, “Нет папки ПЛАТЕЖИ” Exit Sub ' выход, если папка не найдена End If  Set coll = FilenamesCollection(folder$, “*.

xls”) ' получаем список файлов XLS из папки If coll.Count = 0 Then MsgBox “В папке «” & Split(folder$, “\”)(UBound(Split(folder$, “\”)) – 1) & “» нет ни одного подходящего файла!”, _ vbCritical, “Файлы для обработки не найдены” Exit Sub ' выход, если нет файлов End If  ' перебираем все найденные файлы For Each file In coll Debug.

Print file ' выводим имя файла в окно Immediate NextEnd Sub

Этот код позволяет осуществить поиск нужных файлов в выбранной папке (включая подпапки), и выводит полученный список файлов на лист книги Excel:

Sub ПримерИспользованияФункции_FilenamesCollection() ' Ищем на рабочем столе все файлы TXT, и выводим на лист список их имён. ' Просматриваются папки с глубиной вложения не более трёх.

Dim coll As Collection, ПутьКПапке As String ' получаем путь к папке РАБОЧИЙ СТОЛ ПутьКПапке = CreateObject(“WScript.Shell”).SpecialFolders(“Desktop”) ' считываем в колекцию coll нужные имена файлов Set coll = FilenamesCollection(ПутьКПапке, “.txt”, 3)  Application.

ScreenUpdating = False ' отключаем обновление экрана ' создаём новую книгу Dim sh As Worksheet: Set sh = Workbooks.Add.Worksheets(1) ' формируем заголовки таблицы With sh.Range(“a1”).Resize(, 3) .Value = Array(“№”, “Имя файла”, “Полный путь”) .Font.Bold = True: .Interior.

ColorIndex = 17 End With  ' выводим результаты на лист For i = 1 To coll.Count ' перебираем все элементы коллекции, содержащей пути к файлам sh.Range(“a” & sh.Rows.Count).End(xlUp).Offset(1).Resize(, 3).

Value = _ Array(i, Dir(coll(i)), coll(i)) ' выводим на лист очередную строку DoEvents ' временно передаём управление ОС Next sh.Range(“a:c”).EntireColumn.AutoFit ' автоподбор ширины столбцов [a2].Activate: ActiveWindow.FreezePanes = True ' закрепляем первую строку листаEnd Sub

Ещё один пример использования:

Sub ЗагрузкаСпискаФайлов() ' Ищем файлы в заданной папке по заданной маске, ' и выводим на лист список их параметров. ' Просматриваются папки с заданной глубиной вложения.

Dim coll As Collection, ПутьКПапке$, МаскаПоиска$, ГлубинаПоиска%  ПутьКПапке$ = [c1] ' берём из ячейки c1 МаскаПоиска$ = [c2] ' берём из ячейки c2 ГлубинаПоиска% = Val([c3]) ' берём из ячейки c3 If ГлубинаПоиска% = 0 Then ГлубинаПоиска% = 999 ' без ограничения по глубине ' считываем в колекцию coll нужные имена файлов Set coll = FilenamesCollection(ПутьКПапке$, МаскаПоиска$, ГлубинаПоиска%)  Application.ScreenUpdating = False ' отключаем обновление экрана ' выводим результаты (список файлов, и их характеристик) на лист For i = 1 To coll.Count ' перебираем все элементы коллекции, содержащей пути к файлам НомерФайла = i ПутьКФайлу = coll(i) ИмяФайла = Dir(ПутьКФайлу) ДатаСоздания = FileDateTime(ПутьКФайлу) РазмерФайла = FileLen(ПутьКФайлу)  ' выводим на лист очередную строку Range(“a” & Rows.Count).End(xlUp).Offset(1).Resize(, 5).Value = _ Array(НомерФайла, ИмяФайла, ПутьКФайлу, ДатаСоздания, РазмерФайла)  ' если нужна гиперссылка на файл во втором столбце ActiveSheet.Hyperlinks.Add Range(“b” & Rows.Count).End(xlUp), ПутьКФайлу, “”, _ “Открыть файл” & vbNewLine & ИмяФайла  DoEvents ' временно передаём управление ОС NextEnd Sub

PS: Найти подходящие имена файлов в коллекции можно при помощи следующей функции: Function CollectionAutofilter(ByRef coll As Collection, ByVal filter$) As Collection ' Функция перебирает все элементы коллекции coll, ' оставляя лишь те, которые соответствуют маске filter$ (например, filter$=”*некий текст*”) ' Возвращает коллекцию, содержащую только подходящие элементы ' Если элементы не найдены – возвращается пустая коллекция (содержащая 0 элементов) On Error Resume Next: Set CollectionAutofilter = New Collection For Each Item In coll If Item filter$ Then CollectionAutofilter.Add Item NextEnd Function

Вложения:

FilenamesCollection.xls35 КБ
FilenamesCollectionEx.xls56 КБ

Источник: https://ExcelVBA.ru/code/FilenamesCollection

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

Список файлов из папки в excel

У некоторых пользователей, при работе на компьютере, возникает необходимость получить список файлов в папке. Такой список может быть нужен для разных целей: для каталогизации файлов в папках, для сравнения содержимого в папках, для того, чтобы составить список фильмов, музыкальных композиций, электронных книг и т. п.

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

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

Например, у меня на внешних жестких дисках, каждый из которых имеет размер в несколько терабайт, хранится большая коллекция фильмов, которые я собирал несколько лет. Мне, конечно, тяжело запомнить все названия фильмов, которые хранятся на жестких дисках.

https://www.youtube.com/watch?v=eeeqATMq4BA

Встречая в интернете какой-либо фильм, имея у себя список файлов в папке, я могу легко проверить, есть ли такой фильм у меня в коллекции, или я встретил новый фильм. Поэтому я приступил к поиску решения данного вопроса.

В итоге, я нашел несколько простых вариантов решения этой проблемы. Создать список файлов в папке можно разными способами: при помощи командной строки, при помощи файла, который имеет расширение «.bat», при помощи специальных программ, сохранить список в браузере.

Сохранение списка файлов с помощью командной строки

Вначале вам необходимо будет перейти к нужной папке, или диску, если вы хотите получить список файлов, которые находятся на диске. После открытия папки или диска, удерживая на клавиатуре кнопку «Shift», кликните правой кнопкой мыши внутри этой папки. В открывшемся контекстном меню выберите пункт «Открыть окно команд».

После этого откроется окно консоли, в которой уже будет указан путь к нужной директории (в вашем случае, будет к той папке, которую вы откроете). В этом примере, это папка «Программы» на Рабочем столе моего компьютера. В этой папке находятся другие папки, в которых находятся ярлыки программ.

Далее нужно будет ввести одну из этих команд:

dir /b>filelist.txtdir /s>filelist.txtПосле ввода «dir» должен быть пробел. Вместо «filelist» может написать свое название файла, только латинскими буквами. Не забудьте в конце добавить формат «.txt».

Эти команды отличаются друг от друга в использовании дополнительных критериев сохранения списка файлов:

  • /b — обозначает, что будут сохранены только имена файлов.
  • /s — обозначает, что дополнительно в список будут включены все файлы и подкаталоги (подпапки), которые находятся в этой папке.

Затем на клавиатуре нажмите на кнопку «Enter».

После этого вы можете открыть папку и увидеть, что в папке находится текстовый файл «filelist». Теперь можете открыть этот файл с помощью Блокнота.

Если в данной папке некоторые файлы имели русские имена, то вместо имен этих файлов, вы увидите непонятные символы (крякозябры). Дело в том, что программа Блокнот не понимает кодировку MS-DOS.

Поэтому, открыть созданный файл, можно будет с помощью программы Word. Предполагаю, что у большинства пользователей, на компьютере установлена данная программа.

Кликните по текстовому файлу правой кнопкой мыши, а затем в контекстном меню выберите пункт «Открыть с помощью». Выберите для открытия файла программу Microsoft Office Word. В окне программы Word будет открыто окно «Преобразование текста», в котором нужно будет выбрать кодировку MS-DOS, которая позволит прочитать этот документ.

На образце вы увидите правильное отображение текста.

После нажатия на кнопку «ОК», данный текст будет открыт в программе Word. Вы можете провести редактирование документа, а потом сохранить его на компьютере в нужном формате, в том числе в формате «TXT». Проблем с кодировкой после сохранения файла уже не будет.

Получение списка файлов в папке с помощью bat файла

Один из самых доступных и простых способов получения списка файлов в папке: использование для этого специального bat файла. Существует несколько вариантов создания файла с расширением «.bat», с разным кодом.

Для создания bat файла вам нужно будет открыть Блокнот, а затем вставить туда этот код:

chcp 1251echo %date% %time% >filelist.txtdir /b /d >>filelist.txt

Сохраните этот файл, имя файлу можете дать любое, самому файлу нужно дать расширение «BAT». Параметры сохранения файла в Блокноте будут выглядеть примерно так:

  • Имя файла: filelist.bat
  • Тип файла: Все файлы

После этого нажмите на кнопку «Сохранить».

Далее помещаете созданный файл в ту папку, из которой вы хотите получить, список находящихся там файлов. После этого, запустите файл с расширением «.bat». В данной папке будет создан файл «filelist» в формате «.txt», в котором будет находиться список файлов.

Существует несколько вариантов содержимого файла с расширением «.bat». При использовании этого метода, проблем с кодировкой не возникнет.

Программа DirLister для получения списка файлов

Вы можете создать список файлов расположенных в папке, при помощи бесплатной программы DirLister. Эта крошечная программа не требует установки на компьютер. После загрузки программы на свой компьютер, распакуйте архив с программой.

DirLister скачать

Для запуска программы, откройте папку с программой, а потом кликните по приложению DirLister.

В окне программы DirLister, в разделе «Directory To Scan», при помощи кнопки «Open», вам нужно будет выбрать папку для сканирования.

В разделе «Output File», при помощи кнопки «Save As…», вам необходимо будет выбрать место для сохранения списка файлов.

Вы можете уточнить критерии поиска файлов по маске «*.*», выбрав нужное имя или тип файла («TXT», «Excel», «HTML» и т. д.). После выбора необходимых настроек, нажмите на кнопку «Make List».

После завершения сканирования в левом нижнем углу программы будет выведена информация об успешном завершении создания списка файлов: «All file processed correctly».

Программа DirLister выводит не только список файлов в данной папке, но и дает полную информацию о вложенных в эту папку файлах и папках, в том числе о размере файлов.

Получаем список файлов в Total Commander

Получить список файлов в папке можно при помощи популярного файлового менеджера Total Commander. Для этого, открываете в окне программы нужную папку.

В меню «Выделение», сначала выбираете пункт «Выделить всё». После того, как все файлы были выделены, в этом же меню выбираете пункт «Копировать имена в буфер».

Потом открываете Блокнот или другой текстовый редактор, и вставляете туда список файлов из буфера обмена.

Вы можете в меню «Выделение» выбрать пункт «Сохранить выделение в файл…». В этом случае, вам нужно будет дать имя файлу, а затем сохранить его в формате «TXT».

Сохранение списка файлов в папке в браузере

Получить список файлов в папке можно при помощи браузера. Сначала откройте браузер, а затем перетащите папку в окно браузера. Список файлов будет открыт в окне браузера. Между содержимым можно будет перемещаться как в Проводнике.

Далее можете просто скопировать список файлов в текстовый редактор, сохранить список в HTML файл, или сохранить в PDF при помощи виртуального принтера.

Выводы статьи

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

3 способа получить список файлов в папке (видео)

https://vellisa.ru/5-sposobov-poluchit-spisok-faylovКак сохранить список файлов в папкеhttps://vellisa.ru/wp-content/uploads/2015/02/00.jpghttps://vellisa.ru/wp-content/uploads/2015/02/00-300×231.jpg2021-01-08T22:08:48+03:00ВасилийСоветыУ некоторых пользователей, при работе на компьютере, возникает необходимость получить список файлов в папке. Такой список может быть нужен для разных целей: для каталогизации файлов в папках, для сравнения содержимого в папках, для того, чтобы составить список фильмов, музыкальных композиций, электронных книг и т. п. Во многих случаях, количество файлов…ВасилийВасилий vas468@gmail.comAdministratorАвтор 700+ статей на сайте Vellisa.ru. Опытный пользователь ПК и ИнтернетИнтернет и программы для всех

Источник: https://vellisa.ru/5-sposobov-poluchit-spisok-faylov

Поделиться:
Нет комментариев

    Добавить комментарий

    Ваш e-mail не будет опубликован. Все поля обязательны для заполнения.