Сборка листов из разных книг в одну
Предположим, имеется куча книг Excel, все листы из которых надо объединить в один файл. Копировать руками долго и мучительно, поэтому имеет смысл использовать несложный макрос.
Открываем книгу, куда хотим собрать листы из других файлов, входим в редактор Visual Basic сочетанием клавиш Alt+F11 одноименной кнопкой на вкладке Разработчик (Developer - Visual Basic), добавляем новый пустой модуль (в меню Insert - Module) и копируем туда текст вот такого макроса:
Sub CombineWorkbooks() Dim FilesToOpen Dim x As Integer Application.ScreenUpdating = False 'отключаем обновление экрана для скорости 'вызываем диалог выбора файлов для импорта FilesToOpen = Application.GetOpenFilename _ (FileFilter:="All files (*.*), *.*", _ MultiSelect:=True, Title:="Files to Merge") If TypeName(FilesToOpen) = "Boolean" Then MsgBox "Не выбрано ни одного файла!" Exit Sub End If 'проходим по всем выбранным файлам x = 1 While x <= UBound(FilesToOpen) Set importWB = Workbooks.Open(Filename:=FilesToOpen(x)) Sheets().Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) importWB.Close savechanges:=False x = x + 1 Wend Application.ScreenUpdating = True End Sub
После этого можно вернуться в Excel и запустить созданный макрос на вкладке Разработчик кнопкой Макросы (Developer - Macros) или нажав Alt+F8. Отобразится диалоговое окно открытия файла, где необходимо указать один или несколько (удерживая Ctrl или Shift) файлов, листы из которых надо добавить к текущей книге - и задача решена!
Ссылки по теме
- Что такое макросы, куда вставлять код макроса на Visual Basic
- Автоматическая сборка заданных листов из заданных книг с помощью надстройки PLEX
- Автоматическая сборка данных с нескольких листов на один итоговый лист с помощью надстройки PLEX
Пока правда других способов не знаю.
Спасибо.
У меня при копировании листов с книг разных версий екселя работает только Ваш макрос, однако когда я хочу скопировать только первый лист с разных книг, я указал следующий код:
wbk2.Sheets().Move After:=wbk.Sheets(wbk.Sheets.Count)открываются все книги, из которых эти листы копировались.
Вопрос: можно ли изменить код таким образом, чтобы всё работало по прежней схеме, но при этом куча книг не открывалась и я указывал номер листа какой хочу?
поменял девятую строку из макроса в оригинальном посте - файлы появились, работает
Set shTarget = wbTarget.Sheets.Add(after:=wbTarget.Sheets(wbTarget.Sheets.Count))
Что делать?
заменил Sheets() на Sheets(1), теперь собирает только первый лист из файлов. Почему то при наличии скрытых и очень скрытых листов в собираемых книгах Эксель упорно вылетал с ошибкой... после замены всё ОК стало.
Обращаюсь к вам со следующим вопросом. Мне необходимо скопировать из книги не все листы, а только некоторые. Порядковые номера этих листов прописанны в определенных ячейках основной книги. Т.е., копируются только те листы, номера которых указаны в ячейках. Количество копируемых листов строго ограничено - 5шт.
Каким образом видоизменится макрос?
Заранее благодарю за помощь.
С уважением, Владислав!
Подразумевается, что номера листов, которые надо копировать, лежат в ячейках А1, А2 и А3 на листе Лист1 основной книги.
в вашей надстройке PLEX также есть возможность собирать в одну книгу листы из разных книг. Всё работало хорошо до вчерашнего дня. сейчас же, при попытке собрать листы в одну книгу процесс идет до какого то момента и отваливается либо просто по ошибке Экселя либо по ошибке Run-Time Error -2147417848 (80010108) Automation error и Эксель закрывается. Если успеть перед ошибкой сохранить документ то при открытии выскакивает ошибка "слишком много различных форматов ячеек". причем даже не получается собрать те данные которые неделей раньше с успехом собирались. Подскажите, пожалуйста, что нужно в коде поменять чтобы собирались только данные с листов, без форматов или может быть подскажите что в экселе изменилось, что он не хочет корректно работать. Спасибо вам за помощь.
Советую посмотреть (взять) код прямо в PLEX.
Правильно я понимаю, что файлы должны быть в старом формате «Книга Excel 97-2003» .. ?
Когда мне предлагается выбрать файлы для объединения, то файлы в формате «Excel» и в формате с поддержкой макросов даже не отображаются..
Если так, то очень жаль – потому что при переводе файлов в формат «Книга Excel 97-2003» сильно портится форматирование ..
Последним из предложенных методов у меня даже получилось объединить.. но.. со ссылками на исходные файлы.. Это никуда не годится.
Что можно сделать .. пож-та посоветуйте .. !
У меня есть книга (отчет).
В этот отчет нужно добавлять информацию из 36 разных книг, т.е. существует 36 файлов exсel.
я делал старым - бабаевским методом просто давал ссылку на каждый из 36 файлов ячейку,
но информация не обновляется, нужно как бы открыть 36 файлов, только после этого информация обновляется
я решил использовать данный макрос, но проблема в том, что каждый месяц у меня разные данные в 36 файлах
и если я добавляю еще файлы то они добавляются к существующим 36. если я удаляю старые 36 и добавляю новые 36, то ссылки бьются, т.е. больше не ссылаются...
что посоветуйте сделать?
Формат таблиц на всех листах одинаковый.
1. Почему то вставляет только пустые листы..(
2. Поддержу Александра с вопросом о копировании таблиц в одну и по возможности копирование разных столбцов из разных книг в одну таблицу, в данный момент очень нужно в работе, помогите пожалуйста!
заранее спасибо
Крутой макрос) Спасибо!
У меня макрос отказывается работать.
Я запускаю макрос из эксельки, и пытаюсь собрать туда листы из csv файлов.
Количество столбцов в csv намного превышает этот показатель в эксель файле (в котором я запускаю макрос). Получается ошибка:
Рекомендую перейти уже на Excel 2007 хотя бы - там не 255 столбцов, а 16 тысяч
Данная ошибка меня не удивляет, просто обращаю ваше внимание, что обработка подобного рода проблем не предусмотрена в вашем макросе.
А столбцов в экселе мало - потому что он сохранён в 97-2003 - там к макросам более лояльное отношение
Спасибо.
Новые форматы файлов (XLSX, XLSM и XLSB) сильно лучше почти по всем параметрам старого XLS. Хотя, это вопрос привычки, конечно.
Я с вами абсолютно согласен, всех защит от дураков не сделаешь, да и смысла мало. Просто запустил его - ошибка вылезает. Растерялся, поделился тут скрином)
За код большое спасибо - мне он оказался очень полезным.
Пожалуйста, помогите оптимизировать следующую задачу.
Каждый день приходят в одну папку файлы с предложениями по ценам на товар (Количество исходных файлов до 50 штук). Старые файлы при этом удаляются.
Возможно ли создать сводную таблицу, которая будет автоматически собирать данные и обновлять их со всех файлов на один лист с названием файла в каждой строке сводной таблицы.
С условием, что путь к папке мы указываем один раз.
Подскажите, можно ли при сборке вышеуказанным макросом листов с разных книг одновременно и разрывать связи, которые там присутствуют?
Буду очень признателен, если поделитесь необходимым для этого макросом
Спасибо!
1. Мне нужно создать новую книгу (обозначу ее как - книга (2)), в которой первая вкладка должна быть такой же, как у другой подобной книги (книга (1)) , мало того, эта вкладка в книге (1) с течением времени обновляется (туда добавляются строки, причем не только в конец листа, но и в середине) и необходимо, что бы дубликат этой вкладки в книге (2) автоматически синхронизировался с ней и информация на обоих этих вкладках (книги (1) и книги(2)) была одинаковой.
2. Загвоздка заключается еще и вот в чем: на этой вкладке книги (1) в определенной графе имеется ряд гиперссылок на листы этой же книги, тоже самое предполагается сделать с дубликатом этой же вкладки в книге (2), но только гиперссылки уже на листы книги (2). Подскажите пожалуйста, можно ли это сделать и если можно, то как? есть ли подобные макросы или необходимо воспользоваться некой формулой?