Файлы в директории в Excel VBA
Ниже мы рассмотрим программу в Excel VBA, которая перебирает все замкнутые рабочие книги и листы в каталоге, и отображает все имена.
Скачать Book1.xlsx, Book2.xlsx, Book3.xlsx, Book4.xlsx и Book5.xlsx и добавить их в «C: \ Test \»
Ситуация:
Добавьте следующие строки кода к командной кнопке:
-
Во-первых, мы объявляем две переменные типа String, объект Worksheet и две переменные типа Integer.
Dim directory As String, fileName As String, sheet As Worksheet, i As Integer, j As Integer
-
Для того, чтобы избежать мерцания экрана, отключить обновление экрана.
Application.ScreenUpdating = False
-
Инициализировать переменный каталог. Мы используем функцию Dir, чтобы найти первый .XL ?? Файл хранится в этом каталоге.
directory = "c:\test\" fileName = Dir(directory & ".xl??")
Примечание: (?) Функция Dir поддерживает использование множественного характера (*) и одного символа подстановочных знаков для поиска всех различных типов файлов Excel.
-
Переменная имя_файла теперь держит имя первого файла Excel находится в каталоге. Добавить Do While Loop.
Do While fileName <> "" Loop
Добавьте следующие строки кода (при 5, 6, 7, 8 и 9) к петле.
-
Инициализировать переменные типа Integer и добавить имя файла Excel в первом столбце строки я.
i = i + 1 j = 2 Cells(i, 1) = fileName
-
Там нет простого способа извлечения данных (или имена листов) из закрытых файлов Excel. Поэтому мы открываем файл Excel.
Workbooks.Open (directory & fileName)
-
Добавьте все имена листов из файла Excel в других столбцах строки I.
For Each sheet In Workbooks(fileName).Worksheets Workbooks("files-in-a-directory.xlsm").Worksheets(1).Cells(i, j).Value = sheet.Name j = j + 1 Next sheet
-
Закройте файл Excel.
Workbooks(fileName).Close
-
Функция Dir специальная функция. Для того, чтобы получить другие файлы Excel, вы можете использовать функцию Dir снова без аргументов.
fileName = Dir()
Примечание: если не больше имен файлов не совпадают, то функция Dir возвращает нулевой длины строки ( «»). В результате, Excel VBA оставит делать во время цикла.
-
Включите экран обновления снова (вне цикла).
Application.ScreenUpdating = True
-
Тест программы.
Результат: