Блог Работа с файлами и папками в excel

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

maxim goryaninov
23 Янв 2015

Получить список файлов в папке excel

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

На данном занятии я расскажу, как получить список файлов в папке с помощью процедуры (а точнее двух: сама процедура и ее вызов), написанной на vba в Microsoft Excel. В статье Вы сможете найти пример кода, скопировать его в модуль или лист 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

Оставить комментарий