Список файлов в папке
Получить список файлов в папке excel
Список файлов в папке, а точнее, его получение является наиболее распространенной задачей в сфере написания макросов. Давайте представим, что у Вас имеется локальное хранилище выгрузок данных за несколько лет или кварталов и Вам нужно собрать аналитику за какой-то конкретный период. Или же файлы в папке имеют разный формат хранения и Вам необходимо выбрать однотипные по части имени(возможно, это дата сохранения) или расширения. Данная задача является одной из базовых основ создания любого крупного проекта обработки данных. Именно от навыка решения таких подзадач и зависит конечный уровень сложности системы, которую Вы сможете выстроить в последствии.
На данном занятии я расскажу, как получить список файлов в папке с помощью процедуры (а точнее двух: сама процедура и ее вызов), написанной на vba в Microsoft Excel. В статье Вы сможете найти пример кода, скопировать его в модуль или лист Excel и запустить самостоятельно, что я настоятельно и рекомендую.
Итак, зададим первоначальные условия.
Дано: путь к папке, которая содержит произвольное количество файлов любого типа.
Задача: вывести список файлов папки в столбец «А» рабочего листа excel.
Данную задачу можно решить с помощью следующей простой процедуры «GetFiles», код которой приведен ниже:
Sub GetFiles(ByVal path As String, ByRef TempArr() As String)
Dim FName As String
Dim i As Integer
i = 1
FName = Dir(path, vbNormal)
Do While FName <> ""
ReDim Preserve TempArr(1 To i) As String
TempArr(i) = FName
FName = Dir
i = i + 1
Loop
End Sub
Процедура имеет две входные переменные: path — аргумент, передаваемый по значению ByVAl, через который мы задаем путь к целевой папке и TempArr() — массив, который мы передаем по ссылке ByRef, чтобы получить заветный список файлов в папке.
. Получать список мы будем с помощью функции Dir с параметром vbNormal, которая и отвечает за перебор файлов. Запускать ее мы будем в цикле Do While, который выполняется пока Dir не вернет пустое значение — знак того, что файлы в папке закончились. Также, каждый проход мы расширяем размерность массива TempArr на 1, чтобы записать путь вновь найденного файла. Проверить работу процедуры можно с помощью следующего вызова:
Sub Call_GetFiles()
Dim TempArr() As String
Dim path As String
Dim ind As Integer, max_ind As Integer
path = Range("A1").Value
Call GetFiles(path, TempArr)
On Error Resume Next
max_ind = UBound(TempArr)
If Err.Number = 0 Then
For ind = 1 To max_ind
Range("A" & ind + 1).Value = TempArr(ind)
Next ind
Else
Range("A2").Value = "Папка пуста!"
Err.Clear
End If
On Error GoTo 0
End Sub
В процедуре «Call_GetFiles» происходит вызов «GetFiles» с передачей обоих параметров. Путь к папке берется из ячейки «A1» рабочего листа excel. После возвращения процедурой «GetFiles» результирующего массива TempArr, его содержимое выводится на рабочий лист excel, начиная с ячейки «B1».
Запустите процедуру самостоятельно, посмотрите на результат и еще раз осознанно проанализируйте ее код. Я намерено опустил описание некоторых фрагментов, чтобы Вы постарались разобраться в них самостоятельно для лучшего усвоения и запоминания примера.
Также Вы можете скачать и посмотреть пример большого сложного проекта, выполненного мной на VBA: Табель учета рабочего времени в excel