Хитрости »
20 Июль 2012 137512 просмотров
Просмотреть все файлы в папке
Иногда необходимо проделать однотипные операции с несколькими файлами, расположенными в одной папке. Можно открывать каждый по очереди:
Workbooks.Open «C:Новая папкаКнига1.xlsx»
Workbooks.Open «C:Новая папкаКнига2.xlsx»
и т.д.
Но если файлов много и все с разными именами, то это не очень практично и совсем лишено гибкости. При помощи Visual Basic for Application можно решить проблему. При этом файлы можно просматривать как в одной папке, так и включая вложенные «подпапки».
- Все файлы в папке
- Все файлы включая подпапки
- Просмотреть все диски
Все файлы в папке
Ниже приведен код, который перебирает все файлы в папке, открывает их и на первом листе каждого файла записывает текст
«www.excel-vba.ru»
в ячейку
A1
:
Sub Get_All_File_from_Folder() Dim sFolder As String, sFiles As String Dim wb As Workbook 'диалог запроса выбора папки с файлами With Application.FileDialog(msoFileDialogFolderPicker) If .Show = False Then Exit Sub sFolder = .SelectedItems(1) End With sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator) 'отключаем обновление экрана, чтобы наши действия не мелькали Application.ScreenUpdating = False sFiles = Dir(sFolder & "*.xls*") Do While sFiles <> "" 'открываем книгу Set wb = Application.Workbooks.Open(sFolder & sFiles) 'действия с файлом 'Запишем на первый лист книги в ячейку А1 - www.excel-vba.ru wb.Sheets(1).Range("A1").Value = "www.excel-vba.ru" 'Закрываем книгу с сохранением изменений wb.Close True 'если поставить False - книга будет закрыта без сохранения sFiles = Dir Loop 'возвращаем ранее отключенное обновление экрана Application.ScreenUpdating = True End Sub
sFiles = Dir(sFolder & «*.xls*») — Строка отвечает за тип перебираемых файлов. В примере будут просмотрены любые файлы Excel. Звездочка на конце означает любой символ или набор символов. Т.е. если указать без неё — «*.xls», то будут просмотрены только файлы с расширением xls, а если указать xlsx — то файлы с расширением xlsx и никакие другие.
Если хотите перебрать файлы других форматов, а не Excel, то просто замените «*.xls» на нужное расширение. Например «*.doc». Также, если хотите собрать только файлы с определенными символами/словами в имени, то можно указать так: sFiles = Dir(sFolder & «*отчет*.xls*»). Будут просмотрены все файлы, содержащие в имени слово «отчет»(например «отчет за июнь.xls», «отчет за июль.xls», «сводный отчет.xls» и т.п.).
Все файлы включая подпапки
В коде выше есть одна проблема: что если необходимо открыть файлы не только в указанной папке, но и во всех её подпапках? В версиях Excel 2003 и младше это решалось с помощью метода
.FileSearch
, но в старших версиях данный метод по каким-то причинам был заблокирован разработчиками Microsoft. И осталось действовать только через рекурсивный метод перебора папок. Ниже приведен код, который открывает все файлы Excel в указанной папке, включая все подпапки.
Для этого используется встроенная в офис библиотека
File System Object
:
Option Explicit Dim objFSO As Object, objFolder As Object, objFile As Object Sub Get_All_File_from_SubFolders() Dim sFolder As String With Application.FileDialog(msoFileDialogFolderPicker) If .Show = False Then Exit Sub sFolder = .SelectedItems(1) End With sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator) Application.ScreenUpdating = False Set objFSO = CreateObject("Scripting.FileSystemObject") GetSubFolders sFolder Set objFolder = Nothing Set objFSO = Nothing Application.ScreenUpdating = True End Sub Private Sub GetSubFolders(sPath) Dim sPathSeparator As String, sObjName As String Dim wb As Workbook Set objFolder = objFSO.GetFolder(sPath) For Each objFile In objFolder.Files If Replace(objFile.Name, objFSO.GetBaseName(objFile), "") Like ".xls*" Then 'открываем книгу Set wb = Application.Workbooks.Open(sPath & objFile.Name) 'действия с файлом 'Запишем на первый лист книги в ячейку А1 - www.excel-vba.ru wb.Sheets(1).Range("A1").Value = "www.excel-vba.ru" wb.Close True 'wb.Close False '- если в коде надо будет закрывать книгу без сохранения End If Next For Each objFolder In objFolder.SubFolders GetSubFolders objFolder.Path & Application.PathSeparator Next End Sub
Код делает тоже самое, что и первый, но открывает и изменяет ячейку A1 первого листа для всех файлов Excel в выбранной папке и всех её подпапках(включая все вложенные до последнего уровня).
If Replace(objFile.Name, objFSO.GetBaseName(objFile), "") Like ".xls*" Then
Строка отвечает за тип перебираемых файлов. В примере будут просмотрены любые файлы Excel. Звездочка на конце означает любой символ или набор символов. Т.е. если указать без неё — «*.xls», то будут просмотрены только файлы с расширением xls, а если указать xlsx — то файлы с расширением xlsx и никакие другие.
Если добавить условие: If objFSO.GetBaseName(objFile) Like «*книга*» Then
то будут обработаны файлы, которые в имени содержат слово «книга». При этом регистр букв имеет значение. Т.е. если файл содержит в имени слово «Книга», то он не будет обработан.
Думаю теперь Вы легко сможете проделать необходимые операции с множеством файлов.
Скачать пример:
Все файлы в папке и подпапках.xls (61,5 KiB, 8 202 скачиваний)
В примере я закомментировал строки, открывающие файл и вносящие изменения в ячейку
A1
и заменил это созданием списка имен всех файлов в папках и подпапках. По окончании работы кода имена всех файлов записываются в столбец «А» нового листа(лист создается автоматически). Сделано для того, чтобы при тестировании кода случайно не повредить информацию в файлах.
Просмотреть все файлы на всех дисках
В последнее время участились вопросы как просмотреть еще и все диски на ПК. Ниже выкладываю код, который просматривает все подключенные диски и просматривает все файлы во всех папках дисков:
Sub Get_All_drives() Dim objDrives As Object, objDrive As Object Set objFSO = CreateObject("Scripting.FileSystemObject") Set objDrives = objFSO.Drives For Each objDrive In objDrives If objDrive.IsReady Then GetSubFolders objDrive.DriveLetter & ":" End If Next objDrive End Sub
Для работы кода необходимо разместить его в том же модуле, что и код просмотра файлов в подпапках. Без него код просмотра дисков работать не будет, т.к. обращается к процедуре GetSubFolders(которая и приведена в коде перебора файлов в подпапках).
Скачать пример:
Все файлы в папке и подпапках.xls (61,5 KiB, 8 202 скачиваний)
В примере код сканирует все диски и выводит в столбец А нового листа(лист создается автоматически) пути ко всем файлам.
Так же см.:
Как средствами VBA переименовать/переместить/скопировать файл
Как сменить формат сразу для нескольких файлов Excel
Как удалить папку или все файлы из папки через VBA
Собрать и просуммировать данные из разных файлов при помощи PowerQuery
Статья помогла? Поделись ссылкой с друзьями!
Видеоуроки
Поиск по меткам
Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика
nt_dmn 0 / 0 / 0 Регистрация: 28.04.2011 Сообщений: 60 |
||||
1 |
||||
Открытие по очереди всех файлов из каталога04.10.2011, 17:07. Показов 26264. Ответов 7 Метки нет (Все метки)
Здравствуйте, подскажите как правильно написать строку Application.Workbooks.Open («c:Âõîäÿùèå3.xls»), что бы в имени файла была переменная. В моем случае s
0 |
Казанский 15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
||||||||
04.10.2011, 17:35 |
2 |
|||||||
Если номера идут по очереди, без пропусков, то так:
Добавлено через 4 минуты
2 |
0 / 0 / 0 Регистрация: 28.04.2011 Сообщений: 60 |
|
04.10.2011, 17:37 [ТС] |
3 |
Спасибо!
0 |
Казанский 15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
||||
04.10.2011, 18:00 |
4 |
|||
Тогда еше проще.
1 |
nt_dmn 0 / 0 / 0 Регистрация: 28.04.2011 Сообщений: 60 |
||||
04.10.2011, 19:03 [ТС] |
5 |
|||
Сейчас попробую Добавлено через 8 минут Добавлено через 46 минут
что бы документ закрывался без сохранения? Спасибо!
0 |
Казанский 15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
||||
04.10.2011, 21:39 |
6 |
|||
Можно открыть файл для чтения (на всякий случай) и закрыть без сохранения:
Добавлено через 4 минуты
2 |
0 / 0 / 0 Регистрация: 28.04.2011 Сообщений: 60 |
|
05.10.2011, 10:19 [ТС] |
7 |
Спасибо огромное!
0 |
NikolayHAOS -3 / 2 / 0 Регистрация: 29.10.2013 Сообщений: 178 |
||||||||
08.10.2017, 11:02 |
8 |
|||||||
Казанский,
Нужно отрыть файлы содержащие в названии символ № Добавлено через 23 минуты
0 |
Друзья, добрый день. Помогите пожалуйста доработать макрос. На текущий момент он работает неправильно. Задача следующая: 1. Необходимо по очереди открыть все файлы в папке с разрешением html. В папке будет много файлов с разными названиями 2. Скопировать содержимое каждого отдельного файла html 3. Создать вкладку в файле «Макрос» и вставить содержимое html в отдельную вкладку 3. Закрыть файлы с разрешением html. Прикрепленные файлы
Изменено: Maksimelyan — 05.08.2018 08:09:29 |
|
Мотя Пользователь Сообщений: 3218 |
См. вариант: макрос. Изменено: Мотя — 05.08.2018 22:14:10 |
RAN Пользователь Сообщений: 7091 |
#3 05.08.2018 20:49:37
|
||
RAN,Спасибо,супер Ваш вариант работает. Небольшое уточнение, а можно сделать так чтоб информация копировалась как значения? |
|
Мотя, у меня выдаёт ошибку. НАзвание папки имеет значение? Прикрепленные файлы
|
|
Мотя Пользователь Сообщений: 3218 |
#6 06.08.2018 08:15:22
Разумеется, НЕТ! |
||
Мотя Пользователь Сообщений: 3218 |
#7 06.08.2018 08:33:04
Разумеется, можно!
на:
Изменено: Мотя — 06.08.2018 08:34:18 |
||||||
Nordheim Пользователь Сообщений: 3154 |
По моему в файле Мотя, в папке должны содержаться только файлы «HTML», потому, что массив обрабатывает все файлы в папке независимо от расширения. Хотя навряд ли в этом ошибка. Уважаемая Мотя, позвольте полюбопытствовать, почему Вы в макросах упорно продолжаете использовать «Select» и «Activate»,хотя не раз на форуме упоминалось о вреде использования данных методов? Изменено: Nordheim — 06.08.2018 09:09:22 «Все гениальное просто, а все простое гениально!!!» |
Dost1369 Пользователь Сообщений: 76 |
#9 06.08.2018 09:27:45
А можно ссылочку на обсуждения? Буду повышать свой уровень знаний. |
||
Дмитрий(The_Prist) Щербаков Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#10 06.08.2018 09:28:37
Select и Activate — зачем нужны и нужны ли? Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
Dost1369 Пользователь Сообщений: 76 |
|
Мотя Пользователь Сообщений: 3218 |
#12 06.08.2018 10:07:39
Уважаемый Nordheim ! |
||
Юрий М Модератор Сообщений: 60575 Контакты см. в профиле |
#13 06.08.2018 20:53:42
Но Вы же показываете плохой пример другим ) |
||
Мотя, Разобрался, действительно файлы переименовал и файл с макросом убрал из папки где лежат html. Все сработало. извините что напрягаю, но хорошая мысля приходит опосля, и у меня такой вопрос. 1. Как прописать вариант чтобы не нужно было выбирать папку а положил в папку с файлами и обработка шла в этой папке? 2. Как прописать вариант чтобы макрос при выборе основной папке обрабатывал файлы которые лежат в отдельных папках основной папки. Изменено: Maksimelyan — 06.08.2018 21:57:55 |
|
Nordheim Пользователь Сообщений: 3154 |
#15 06.08.2018 21:39:46
На счет «Тривиальности» можно поспорить, у вас настолько оригинальные макросы, что ходу сложно понять что откуда берется . Изменено: Nordheim — 06.08.2018 21:43:31 «Все гениальное просто, а все простое гениально!!!» |
||
Мотя Пользователь Сообщений: 3218 |
#16 06.08.2018 21:53:54
Результат: вновь созданные листы (кроме листа «111») в файле Maksimelyan.xlsb с именами — Dir(FILE). |
||
Maksimelyan Пользователь Сообщений: 25 |
#17 06.08.2018 22:01:49
Да,всё работает спасибо. Мотя а уточните какую роль играет вкладка 111 -она всегда должна быть? |
||
RAN Пользователь Сообщений: 7091 |
#18 06.08.2018 22:05:58
В книге должен быть хотя-бы 1 лист. Все остальное, связанное с 111 — от
Моти |
||
Мотя Пользователь Сообщений: 3218 |
#19 06.08.2018 22:06:09
Один лист в файле всегда должен присутствовать.
|
||||
Мотя Пользователь Сообщений: 3218 |
Макрос я писала почти «от Балды», поэтому умнее «изменения» названия листа — не придумала! |
RAN, уточните пожалуйста как в Вашем варианте прописать чтобы информация копировалась как значение? Изменено: Maksimelyan — 06.08.2018 22:20:11 |
|
Мотя Пользователь Сообщений: 3218 |
#22 06.08.2018 22:17:34
Макросный файл, по умолчанию, не должен лежать в папке html-файлов. |
||
RAN Пользователь Сообщений: 7091 |
#23 06.08.2018 22:20:35
Лично мне не удалось найти ни одной формулы. Если я суслика не вижу, а он есть, его нужно показать. |
||
Мотя Пользователь Сообщений: 3218 |
#24 06.08.2018 22:21:32
Для этого надо в макросе жестко задать имя этой папки: но это же неудобно! |
||
Мотя Пользователь Сообщений: 3218 |
#25 06.08.2018 22:26:55
Над этим надо думать, а это иногда бывает — ОЧЕНЬ ЛЕНИВО… |
||
Nordheim Пользователь Сообщений: 3154 |
#26 06.08.2018 22:26:56
Путь к папке в которой находится книга с макросом.
«Все гениальное просто, а все простое гениально!!!» |
||||
Nordheim Пользователь Сообщений: 3154 |
#27 06.08.2018 22:28:48
Тут нужно воспользоваться FileSystemObject. но это уже совсем другая история. Хотя можно и через Dir Изменено: Nordheim — 06.08.2018 22:29:43 «Все гениальное просто, а все простое гениально!!!» |
||
Maksimelyan Пользователь Сообщений: 25 |
#28 06.08.2018 22:34:18
Формул действительно нет, но я потом планирую как раз использовать формулы ВПР для обработки данных и так как там есть ячейки объединенные и мне нужны от туда данные, то хотел чтобы информация была вставлена как значение |
||
RAN Пользователь Сообщений: 7091 |
#29 06.08.2018 22:36:31
А это будет интересно. |
||
Maksimelyan Пользователь Сообщений: 25 |
#30 06.08.2018 22:37:00
Ваш Вариант работает,мне это было не под силу. Так что для меня Вы профессионал. Спасибо что уделили время, вы мне очень помогли. |
||
Skip to content
Как открыть все рабочие книги в папке
На чтение 2 мин. Просмотров 3.5k.
Что делает макрос: Представьте, вы написали классный макрос, который автоматизирует работу одного Excel- файла. Теперь проблема заключается в том, что вам нужно перейти в папку, открыть каждую
книгу, запустить макрос, сохранить изменения, закрыть книгу, а затем открыть следующую.
Открытие каждой рабочей книги в папке, как правило, ручной процесс, который отнимает много времени.
Этот макрос решает проблему, как открыть все рабочие книги папки.
Содержание
- Как макрос работает
- Код макроса
- Как работает этот код
- Как использовать
Как макрос работает
В этом макросе, мы используем функцию Dir. Функция Dir возвращает строку, которая представляет собой имя файла. С её помощью в указанной папке мы возьмём имя каждого файла (с расширением “.xlsx”), затем будем открывать каждый файл, запускать макрос и, наконец, закрывать файл после сохранения.
Код макроса
Sub OtkritVseKnigi() 'Шаг 1:Объявляем переменные Dim MyFiles As String 'Шаг 2: Укажите нужную папку MyFiles = Dir("C:Temp*.xlsx") Do While MyFiles <> “” 'Шаг 3: Открываем файлы один за другим Workbooks.Open "C:Temp" & MyFiles 'Код макроса с действиями MsgBox ActiveWorkbook.Name ActiveWorkbook.Close SaveChanges:=True 'Шаг 4: Следующий файл в папке MyFiles = Dir Loop End Sub
Как работает этот код
- Объявляем переменную MyFiles (тип строчный), которая будет фиксировать имя каждого файла.
- В шаге 2, макрос использует функцию DIR, чтобы указать Тип файла и адрес папки. Обратите внимание, что код ищет файлы в формате xlsx. Это означает, что только .xlsx файлы будут передаваться. Если вы ищете .xls файлы, вам необходимо изменить расширение.
- Открываем файл, делаем некоторые действия (вы должны поместить в код макроса требуемые действия), а затем мы сохраняем и закрываем файл. В этом простом примере, мы вызываем окно с сообщением, чтобы показать имя каждого файла.
- Ищем снова по кругу, чтобы найти больше файлов. Если нет файлов, переменная MyFiles пустая.
Если это так, то цикл и макрос завершается.
Как использовать
Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:
- Активируйте редактор Visual Basic, нажав ALT + F11.
- Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
- Выберите Insert➜Module.
- Введите или вставьте код во вновь созданном модуле.
В этой статье я представляю макрос для открытия всех книг из определенной папки.
Откройте все книги в папке с VBA
Перечислите все имена файлов одной конкретной папки с помощью Kutools for Excel
Откройте все книги в папке с VBA
1. Нажмите Alt + F11 ключи для открытия Microsoft Visual Basic для приложений окно.
2. Нажмите Вставить > Модулии вставьте в скрипт приведенный ниже код.
VBA: открыть все файлы Excel в папке
Sub OpenFiles()
'UpdateByExtendoffice20160623
Dim xStrPath As String
Dim xFileDialog As FileDialog
Dim xFile As String
On Error Resume Next
Set xFileDialog = Application.FileDialog(msoFileDialogFolderPicker)
xFileDialog.AllowMultiSelect = False
xFileDialog.Title = "Select a folder [Kutools for Excel]"
If xFileDialog.Show = -1 Then
xStrPath = xFileDialog.SelectedItems(1)
End If
If xStrPath = "" Then Exit Sub
xFile = Dir(xStrPath & "*.xlsx")
Do While xFile <> ""
Workbooks.Open xStrPath & "" & xFile
xFile = Dir
Loop
End Sub
3. Нажмите F5 , появится диалоговое окно для выбора папки, в которой вы хотите открыть все книги в ней. Смотрите скриншот:
4. Нажмите OK, и все книги в конкретной папке были открыты.
Перечислите все имена файлов одной конкретной папки с помощью Kutools for Excel
За исключением открытия файлов в папке, пробовали ли вы когда-нибудь перечислить все имена файлов в одной конкретной папке? С участием Kutools for ExcelАвтора Список имен файлов Утилита, вы можете быстро перечислить все типы или один определенный тип файлов в одной папке.
После бесплатная установка Kutools for Excel, пожалуйста, сделайте следующее:
1. Нажмите Кутулс Плюс > Импорт Экспорт > Список имен файлов. Смотрите скриншот:
2. в Список имен файлов В диалоговом окне выберите папку, из которой вы хотите вывести список файлов, укажите тип файла, который вы хотите перечислить, а затем укажите единицы измерения размера файла, которые вам нужны. Если хотите, вы можете создать гиперссылки на имена файлов, которые будут перечислены. Смотрите скриншот:
3. Нажмите Ok, и все файлы в определенной папке были перечислены на новом листе активной книги. Смотрите скриншот:
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Комментарии (0)
Оценок пока нет. Оцените первым!