Сохранение листов книги как отдельных файлов
Про сборку листов из нескольких книг в одну текущую я уже писал здесь. Теперь разберем решение обратной задачи: есть одна книга Excel, которую нужно «разобрать», т.е. сохранить каждый лист как отдельный файл для дальнейшего использования.

Примеров подобного из реальной жизни можно привести массу. Например, файл-отчет с листами-филиалами нужно разделить на отдельные книги по листам, чтобы передать затем данные в каждый филиал и т.д.
Если делать эту процедуру вручную, то придется для каждого листа выполнить немаленькую цепочку действий (выбрать лист, правой кнопкой по ярлычку листа, выбрать Копировать, указать отдельный предварительно созданный пустой файл и т.д.) Гораздо проще использовать короткий макрос, автоматизирующий эти действия.
Способ 1. Простое разделение
Нажмите сочетание Alt+F11 или выберите в меню Сервис — Макрос — Редактор Visual Basic (Tools — Macro — Visual Basic Editor) , вставьте новый модуль через меню Insert — Module и скопируйте туда текст этого макроса:
Если теперь выйти из редактора Visual Basic и вернуться в Excel, а затем запустить наш макрос (Alt+F8), то все листы из текущей книги будут разбиты по отдельным новым созданным книгам.
Способ 2. Разделение с сохранением
При необходимости, можно созданные книги сразу же сохранять под именами листов. Для этого макрос придется немного изменить, добавив команду сохранения в цикл:
Этот макрос сохраняет новые книги-листы в ту же папку, где лежал исходный файл. При необходимости сохранения в другое место, замените wb.Path на свой путь в кавычках, например «D:\Отчеты\2012» и т.п.
Если нужно сохранять файлы не в стандартном формате книги Excel (xlsx), а в других (xls, xlsm, xlsb, txt и т.д.), то кроме очевидного изменения расширения на нужное, потребуется добавить еще и уточнение формата файла — параметр FileFormat:
Для основных типов файлов значения параметра FileFormat следующие:
- XLSX = 51
- XLSM = 52
- XLSB = 50
- XLS = 56
- TXT = 42
Способ 3. Сохранение в новые книги только выделенных листов
Если вы хотите раскидать по файлам не все листы в вашей книге, а только некоторые, то макрос придется немного изменить. Выделите нужные вам листы в книге, удерживая на клавиатуре клавишу Ctrl или Shift и запустите приведенный ниже макрос:
Создавать новое окно и копировать через него, а не напрямую, приходится потому, что Excel не умеет копировать группу листов, если среди них есть листы с умными таблицами. Копирование через новое окно позволяет такую проблему обойти.
Способ 4. Сохранение только выделенных листов в новый файл
Во всех описанных выше способах каждый лист сохранялся в свой отдельный файл. Если же вы хотите сохранить в отдельный новый файл сразу группу выделенных предварительно листов, то нам потребуется слегка видоизменить наш макрос:
Способ 5. Сохранение листов как отдельных PDF-файлов
- для этого используется уже другой метод (ExportAsFixedFormat а не Copy)
- листы выводятся в PDF с параметрами печати, настроенными на вкладке Разметка страницы (Page Layout)
- книга должна быть сохранена на момент экспорта
Нужный нам код будет выглядеть следующим образом:
Способ 6. Готовый макрос из надстройки PLEX
Если лень или нет времени внедрять все вышеописанное, то можно воспользоваться готовым макросом из моей надстройки PLEX:
Ссылки по теме


Решение классное, но перевод в значения целого листа занимает время, у меня лист с небольшим объемом данных.
В связи с этим, возник вопрос: как преобразовать данную формулу, чтобы она не весь лист считала, а только диапазон. В моем случае A1:F67.
И сразу на будущее спрошу, как записать два диапазона? (вдруг понадобится такое)


А можете подсказать еще такой нюанс.
Как сохранить книгу созданную. Выдает ошибку
С одной вкладкой срабатывает (Способ 2), а с несколькими нет (Способ 4)



Добрый день.
Для полного счастья в 3 способе не хватает возможности «разорвать связи» в новых листах. Вроде задача простая, а сообразить не могу


Большое спасибо за очень полезную информацию!
Сработали все 3 способа (первый не пробовала), за исключением 2 моментов:
при способе №2 из 40 с лишним вкладок открылось только 25 шт в новых документах с сохранением названия вкладки, как и должно было быть. Остальные вкладки даже не показались, мб есть какое-то ограничение по кол-ву вкладок?
Второй момент: Подскажите пожалуйста,как нужно дописать макрос, чтобы способ номер 3 сохранял вкладки в документы с названием вкладок, как в способе 2?


Нужно было создать 370 файлов из вкладок, комп заругался что его ресурсов на это не хватает (при выполнении макроса открывается еще одно окно Excel с данными. И так по каждой вкладке). Чтобы всего хватало и не приходилось закрывать созданные файлы добавил строчку. Может кому пригодится. Взял макрос из примера 2.




Добрый день! Спасибо за Ваши подсказки в макросах )
Я редко пользуюсь VBA, поэтому туплю чуток я не могу понять, как правильно допилить этот код под 3 способ.
Мне нужно, чтобы лист сохранялся только значениями с названием из ячейки М1 и закрывался. Ругается на
говорит, что объект не поддерживает этот способ и метод .
Помогите пожалуйста его привести в рабочий вид :"-(


Николай, добрый вечер!
У меня вопрос почти такой же, как у Юлии, но только про формат .pdf. Пробовал в Способе 2 менять расширение на ".pdf" — конечно, файлы создавались, но не открывались, затем пробовал прикрутить в код такую строку:

Николай, спасибо за Вашу помощь и Ваш сайт. Я немного модифицировал макрос, чтоб он сохранял только выделенные листы. Но вышло если я выделяю один лист, он его сохраняет, а если два и больше то тогда под разными названиями сохраняет каждый раз все выделенные листы. Подскажите пожалуйста, что мне изменить, чтоб они сохранялись раздельно. Спасибо.
Sub SplitSheets5()
ActiveWorkbook.RefreshAll
Dim s As Worksheet
For Each s In ActiveWindow.SelectedSheets
s.ExportAsFixedFormat Filename:=»C:\doc\» & «\» & s.Name & «.pdf», Type:=xlTypePDF
Next
End Sub

Подскажите как при сохранении листа в PDF здесь задать имя файла «Имя файла, имя листа»
Sub SplitSheets5()
Dim s As Worksheet
For Each s In ActiveWorkbook.Worksheets
s.ExportAsFixedFormat Filename:=ThisWorkbook.Path & «\» & s.Name & «.pdf», Type:=xlTypePDF
Next
End Sub

Очень интересная статья, спасибо автору.
У меня ситуация, что нужно сохранить файл в формате (Tab delimited) *.txt
в таком случае каким будет значение File Format: ?
или примерно так:
ActiveWorkbook.SaveAs Filename:= p & «\Лист2.txt», FileFormat:= .

Вынужден обратиться за помощью
Sub invoice()
Sheets(Array(«INVOICE Nr. 0200», «Specificatie 0200», «DVI» [IMG] ).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
«G:\KW 5\invoice 200.pdf», Quality:=xlQualityStandard, IncludeDocProperties _
:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
End Sub
1 можна изменить (INVOICE Nr. 0200″, «Specificatie 0200», «DVI» ))на проста (Select Sheet) выделиные листы
2 адрес сохранения вместо (G:\KW 5\invoice 200.pdf» [IMG] в папку где находится книга с названием PDF по ячейки с Sheet XXXX B9.





Помогите пожалуйста, я в макросах ни бум бум, мне нужно чтобы выделенный лист (ы) из книги сохранялись с именем такого вида:
«название листа» № «номер ячейки» от «номер ячейки» (чтобы получилось например счет №23 от 10.04.2017)
в формате PDF и чтобы файл после сохранения не открывался, а просто сохранялся в ту же папку откуда документ?
пытался компоновать макросы в примерах но не получилось((





В том-то и дело — 1 лист. Это я пробовал накладную распечатать. (1 книга = 3 листа, печатается только один.)
В результате получается 1 стр. PDF.
Попробовал на работе — тоже самое. 10 секунд на сохранение файла *.pdf.
Может надо использовать какой-то определённый PDF драйвер/принтер?

win8.1 x64 + Office 2007/2010.
Office без обновлений. Отсутствие обновок Оффиса может до такой степени замедлить работу драйвера PDF?

p.s. Только что заметил — PDF записались в папку, откуда был взят xls файл. А так же копии этих файлов были записаны в папку автостарта, где хранится personal.xlsb . Соответственно, при старте Excel’a он пытается ещё открыть и эти PDF файлы.
Ту миллион долларс (с)





Понятно. Я в свою очередь решил поменять .pdf на .xlsx Принцип тот же практически.




Добрый день. Второй день пытаюсь собственными силами допилить 2 пример, только смысл в том что я хочу что бы макрос сохранял не все листы, а лист/листы с определенным названием. Подскажите пожалуйста как прописать данное действие( Заранее благодарен за помощь!

А можно на примере этого макроса сделать перевод в *pdf одним файлом?
Sub SplitSheets5()
Dim s As Worksheet
For Each s In ActiveWorkbook.Worksheets
s.ExportAsFixedFormat Filename:=ThisWorkbook.Path & «\» & s.Name & «.pdf», Type:=xlTypePDF
Next
End Sub



Также столкнулся с такой проблемой, дописал чтобы пропускало скрытые листы:



Извиняюсь, может не сюда, но мне надо получить из файла с большим кол-вом листов, таблицу из двух колонок:
1. Имя листа;
2. содержимое ячейки A9 каждого листа (это текст, название организации).
Кто может подсказать?
Можно в отдельном файле, можно в том же на новый лист.
или направьте в какой теме спросить.

Что-то я сглазил.
В строке:

Большое спасибо за тему и множество комментариев.
Не нашёл здесь готового решения для такого случая:
Нужно сохранить 2 конкретных листа с определёнными названиями из книги со множеством листов в отдельную книгу и задать ей общее имя.
Также формулы на листах нужно заменить на значения с сохранением формата ячеек.
Plex помог не целиком. Да и хотелось бы сделать кнопку на одном из листов, которая бы выполняла эту процедуру.
Буду чертовски рад комментариям:)

Подскажите, пожалуйста, пробовал по 5 способу добавить макрос.
Теперь при каждом открытии любой книги Excel создаются два файла *.pdf и никак не получается это убрать, уже поудалял все макросы.


Здравствуйте Николай, пытаюсь воспользоваться пятым способом, но вылетает ошибка 1004
Помогите пожалуйта







Скорректированный код для случая присвоения имени из ячейки C1:


Приветствую всех!
Помогите пожалуйста, был написан макрос, но к сожалению теперь утерян :
Сохраниение активного листа в новую книгу, в папку где находится исходный файл, имя файла = название листа
Далее отправка нового файла через Outlook , адрес эл.почты из ячейки A1, тема письма прописана в макросе
Сейчас есть только начало:
Sub SohrList()
Dim CurrentWin As Window
Dim VremWin As Window
Set CurrentWin = ActiveWindow
Set VremWin = ActiveWorkbook.NewWindow
CurrentWin.ActiveSheet.Copy
VremWin.Close
sPath = ThisWorkbook.Path
ThisWorkbook.SaveAs (ThisWorkbook.Path)
End Sub
макрос создает файл с листом, но не берет название и не сохраняет





VBA выдает при использовании любого метода
Compile error: Syntax error
Раньше все работало.

Попробовал Вариант 2, но есть значительные недостатки данного макроса:
1. Обновление экрана не отключено, из-за этого процесс по длительности возрастает в разы, но это только начало сказки.
2. При большом объёме листов в книге, все листы, которые разделяются и сохраняются в файлы не закрываются, а накапливаются открытыми, из-за этого процесс EXCEL только наращивает в памяти и в итоге вообще зависает.
3. В шапке макроса отсутствует Msg бокс для запуска макроса, может запуститься и «повесит» всю работу компьютера.
4. После работы макроса не понятно, какой объём работы выполнил макрос?
После всего выше сказанного, прошу рассмотреть данный вариант:
Sub Splitbook()
Dim msg
msg = MsgBox(«Хотите разделить листы книги на отдельные книги excel?», vbYesNo, «Разделение листов по отдельным книгам!»
If msg = 7 Then Exit Sub
Как автоматически разделить таблицу Excel на несколько книг
Предположим, у нас есть рабочий лист с большим количеством данных, и нам нужно разделить данные на отдельные книги Excel на основе столбца «Категория». Решить данную проблему возможно ручным способом, применяя инструмент фильтрации данных. Однако повторное копирование данных потребует терпения.
Как быстро разделить таблицу Excel на отдельные книги макросом. Пошаговый алгоритм
- Сочетанием клавиш Alt+F11 открываем окно Visual Basic
- Создаем новый модуль Insert -> Module
- Вставляем код
- На второй строке кода, цифру 2 замените на номер столбца, в котором содержится критерий для разбиения
- Сохраните код Ctrl+S
- Сохраните файл Excel, как книгу с поддержкой макросов xlsm
- Выполните макрос Alt+F8
Папка с новыми файлами будет лежать по тому же пути, что и файл, в котором вы запускали макрос
Заключение
С помощью этого руководства и готового кода макроса Вы сможете сэкономить свое время и за несколько минут создать столько книг Excel, сколько уникальных значений в выбранном Вами столбце. Вся остальная информация автоматически перенесется в новые книги.
Разделение листов и просмотр книги Excel в разных окнах
Excel предлагает множество инструментов для управления внешним видом рабочей книги. В прошлом уроке мы уже научились закреплять строки и столбцы. В этом рассмотрим несколько инструментов, которые позволяют разделять лист на несколько частей, а также просматривать документ в разных окнах.
Если книга Excel содержит большое количество данных, могут возникнуть затруднения при сопоставлении различных разделов. Excel содержит дополнительные опции, упрощающие восприятие и сравнение данных. Например, Вы можете открыть книгу в новом окне или разделить лист на отдельные области.
Открытие текущей книги в новом окне
Excel позволяет открывать одну и ту же книгу одновременно в нескольких окнах. В нашем примере мы воспользуемся этой возможностью, чтобы сравнить два различных листа одной книги.
- Откройте вкладку Вид на Ленте, а затем выберите команду Новое окно.

- Откроется новое окно для текущей книги.

- Теперь Вы можете сравнивать листы одной и той же книги в разных окнах. В нашем примере мы выберем отчет по продажам за 2013 год, чтобы сравнить продажи в 2012 и в 2013 годах.

Если у Вас открыто несколько окон, Вы можете воспользоваться командой Упорядочить все для быстрой группировки окон.

Разделение листа на отдельные области
Excel позволяет сравнивать разделы одного листа без создания дополнительных окон. Команда Разделить позволяет разделить лист на отдельные области, которые можно прокручивать независимо друг от друга.
- Выделите ячейку в том месте, где необходимо разделить лист. Если Вы выберите ячейку в первом столбце или первой строке, то лист разделится на 2 части, в противном случае на 4. В нашем примере мы выберем ячейку C7.

- Откройте вкладку Вид на Ленте, а затем нажмите команду Разделить.

- Лист будет разделен на несколько областей. Вы можете прокручивать каждую область отдельно, используя полосы прокрутки. Это позволит Вам сравнивать различные разделы одного и того же листа.

Вы можете перетаскивать вертикальный и горизонтальный разделители, чтобы изменить размер каждого раздела. Чтобы удалить разделение, снова нажмите команду Разделить.
Как листы в эксель разделить на отдельные файлы
Возможно, вам придется разделить большую книгу на отдельные файлы Excel, сохранив каждый рабочий лист книги как отдельный файл Excel. Например, вы можете разделить книгу на несколько отдельных файлов Excel, а затем передать каждый файл другому человеку для обработки. Поступая таким образом, вы можете заставить определенных людей обрабатывать определенные данные и сохранить ваши данные в безопасности. В этой статье будут представлены способы разделения большой книги на отдельные файлы Excel на основе каждого рабочего листа.
- Разделение книги на отдельные файлы Excel с копированием и вставкой
- Разделите книгу на отдельные файлы Excel с помощью функции перемещения или копирования
- Разделить книгу на отдельные файлы Excel с кодом VBA
- Разделите книгу на отдельные файлы Excel / PDF / CSV / TXT с помощью Kutools for Excel легко
Разделение книги на отдельные файлы Excel с копированием и вставкой
Обычно, используя Копировать Команда и Вставить Команда может вручную сохранить книгу как отдельный файл Excel. Во-первых, выберите весь лист, который вы хотите сохранить как отдельный файл, создайте новую книгу, а затем вставьте ее в новую книгу, в конце сохраните ее.
Это простой в использовании способ, если вам нужно разделить всего несколько листов в отдельные файлы. Однако разделение множества листов путем копирования и вставки вручную должно занимать много времени и утомительно.
Разделите книгу на отдельные файлы Excel с помощью функции перемещения или копирования
Этот метод представит функцию перемещения или копирования для перемещения или копирования выбранных листов в новую книгу и сохранения в виде отдельной книги. Пожалуйста, сделайте следующее:
1. Выберите листы на панели вкладок «Лист», щелкните правой кнопкой мыши и выберите Переместить или скопировать из контекстного меню. Смотрите скриншот:

Внимание: Держа Ctrl клавишу, вы можете выбрать несколько несмежных листов, щелкая их один за другим на панели вкладок Лист; держа Shift клавишу, вы можете выбрать несколько соседних листов, щелкнув первый и последний на панели вкладок «Лист».
2. В диалоговом окне «Перемещение или копирование» выберите (новая книга) из Бронировать раскрывающийся список, проверьте Создать копию и нажмите OK кнопка. Смотрите скриншот: 
3. Теперь все выбранные листы копируются в новую книгу. Нажмите Файл > Save. чтобы сохранить новую книгу.
Быстро разбейте книгу на отдельные файлы Excel / PDF / TXT / CSV в Excel
Обычно мы можем разделить книгу на отдельные файлы Excel с помощью Переместить или скопировать функция в Excel. Но Kutools for Excel’s Разделить книгу Утилита может помочь вам легко разделить книгу и сохранить каждый лист как отдельный файл PDF / TEXT / CSV или книгу в Excel.

Kutools for Excel — Включает более 300 удобных инструментов для Excel. Полнофункциональная бесплатная пробная версия 30 -день, кредитная карта не требуется! Get It Now
Разделить книгу на отдельные файлы Excel с кодом VBA
Следующий код VBA может помочь вам быстро разделить несколько листов текущей книги на отдельные файлы Excel, пожалуйста, сделайте следующее:
1. Создайте новую папку для книги, которую вы хотите разделить, так как разделенные файлы Excel останутся в той же папке, что и эта основная книга.
2. Удерживайте ALT + F11 ключи в Excel, и он открывает Microsoft Visual Basic для приложений окно.
3. Нажмите Вставить > Модулии вставьте следующий код в окно модуля.
VBA: разделите книгу на несколько книг и сохраните в одной папке
4, нажмите F5 ключ для запуска этого кода. И книга разделена на отдельные файлы Excel в той же папке, что и исходная книга. Смотрите скриншот: 
Внимание: Если один из листов имеет то же имя, что и книга, этот VBA не может работать.
Разделите книгу на отдельные файлы Excel / PDF / CSV / TXT с помощью Kutools for Excel легко
Если у вас есть Kutools for Excel установлен, его Разделить книгу Инструмент может легко и быстро разделить несколько листов в отдельные файлы Excel всего за несколько кликов.
Kutools for Excel — Включает более 300 удобных инструментов для Excel. Полнофункциональная бесплатная пробная версия 30 -день, кредитная карта не требуется! Get It Now
1. После установки Kutools for Excel, нажмите Кутулс Плюс > Разделить книгу , см. снимок экрана: 
2. В Разделить книгу диалоговом окне выполните следующие операции:
(1) По умолчанию отмечены все имена рабочих листов. Если вы не хотите разделять некоторые рабочие листы, вы можете снять с них отметку;
(2) Проверьте Сохранить тип вариант;
(3) Из Сохранить как в раскрывающемся списке выберите один тип файла, который вы хотите разделить и сохранить.
(4) Затем нажмите Трещина кнопку. 
Внимание: Если вы не хотите разделять скрытые или пустые листы, вы можете проверить Пропустить скрытые листы or Пропускать пустые листы пунктом.
3. В диалоговом окне «Обзор папки» укажите папку назначения для сохранения разделенных отдельных файлов и нажмите кнопку OK кнопку. 
Теперь проверенные листы сохраняются как новые отдельные книги. Каждая новая книга названа в соответствии с именем исходного листа. Смотрите скриншот: 
Kutools for Excel‘s Разделить книгу Инструмент позволяет легко разделить активную книгу на отдельные файлы Excel (один файл содержит один рабочий лист), файлы CSV, файлы TXT или файлы PDF по мере необходимости. Вы можете настроить пропуск всех пустых и скрытых листов. Получите бесплатную пробную версию!
Сохранение листов книги как отдельных файлов
Про сборку листов из нескольких книг в одну текущую я уже писал здесь. Теперь разберем решение обратной задачи: есть одна книга Excel, которую нужно «разобрать», т.е. сохранить каждый лист как отдельный файл для дальнейшего использования.

Примеров подобного из реальной жизни можно привести массу. Например, файл-отчет с листами-филиалами нужно разделить на отдельные книги по листам, чтобы передать затем данные в каждый филиал и т.д.
Если делать эту процедуру вручную, то придется для каждого листа выполнить немаленькую цепочку действий (выбрать лист, правой кнопкой по ярлычку листа, выбрать Копировать, указать отдельный предварительно созданный пустой файл и т.д.) Гораздо проще использовать короткий макрос, автоматизирующий эти действия.
Способ 1. Простое разделение
Нажмите сочетание Alt+F11 или выберите в меню Сервис — Макрос — Редактор Visual Basic (Tools — Macro — Visual Basic Editor) , вставьте новый модуль через меню Insert — Module и скопируйте туда текст этого макроса:
Если теперь выйти из редактора Visual Basic и вернуться в Excel, а затем запустить наш макрос (Alt+F8), то все листы из текущей книги будут разбиты по отдельным новым созданным книгам.
Способ 2. Разделение с сохранением
При необходимости, можно созданные книги сразу же сохранять под именами листов. Для этого макрос придется немного изменить, добавив команду сохранения в цикл:
Этот макрос сохраняет новые книги-листы в ту же папку, где лежал исходный файл. При необходимости сохранения в другое место, замените wb.Path на свой путь в кавычках, например «D:\Отчеты\2012» и т.п.
Если нужно сохранять файлы не в стандартном формате книги Excel (xlsx), а в других (xls, xlsm, xlsb, txt и т.д.), то кроме очевидного изменения расширения на нужное, потребуется добавить еще и уточнение формата файла — параметр FileFormat:
Для основных типов файлов значения параметра FileFormat следующие:
- XLSX = 51
- XLSM = 52
- XLSB = 50
- XLS = 56
- TXT = 42
Способ 3. Сохранение в новые книги только выделенных листов
Если вы хотите раскидать по файлам не все листы в вашей книге, а только некоторые, то макрос придется немного изменить. Выделите нужные вам листы в книге, удерживая на клавиатуре клавишу Ctrl или Shift и запустите приведенный ниже макрос:
Создавать новое окно и копировать через него, а не напрямую, приходится потому, что Excel не умеет копировать группу листов, если среди них есть листы с умными таблицами. Копирование через новое окно позволяет такую проблему обойти.
Способ 4. Сохранение только выделенных листов в новый файл
Во всех описанных выше способах каждый лист сохранялся в свой отдельный файл. Если же вы хотите сохранить в отдельный новый файл сразу группу выделенных предварительно листов, то нам потребуется слегка видоизменить наш макрос:
Способ 5. Сохранение листов как отдельных PDF-файлов
- для этого используется уже другой метод (ExportAsFixedFormat а не Copy)
- листы выводятся в PDF с параметрами печати, настроенными на вкладке Разметка страницы (Page Layout)
- книга должна быть сохранена на момент экспорта
Нужный нам код будет выглядеть следующим образом:
Способ 6. Готовый макрос из надстройки PLEX
Если лень или нет времени внедрять все вышеописанное, то можно воспользоваться готовым макросом из моей надстройки PLEX:

Ссылки по теме


Решение классное, но перевод в значения целого листа занимает время, у меня лист с небольшим объемом данных.
В связи с этим, возник вопрос: как преобразовать данную формулу, чтобы она не весь лист считала, а только диапазон. В моем случае A1:F67.
И сразу на будущее спрошу, как записать два диапазона? (вдруг понадобится такое)


А можете подсказать еще такой нюанс.
Как сохранить книгу созданную. Выдает ошибку
С одной вкладкой срабатывает (Способ 2), а с несколькими нет (Способ 4)



Добрый день.
Для полного счастья в 3 способе не хватает возможности «разорвать связи» в новых листах. Вроде задача простая, а сообразить не могу


Большое спасибо за очень полезную информацию!
Сработали все 3 способа (первый не пробовала), за исключением 2 моментов:
при способе №2 из 40 с лишним вкладок открылось только 25 шт в новых документах с сохранением названия вкладки, как и должно было быть. Остальные вкладки даже не показались, мб есть какое-то ограничение по кол-ву вкладок?
Второй момент: Подскажите пожалуйста,как нужно дописать макрос, чтобы способ номер 3 сохранял вкладки в документы с названием вкладок, как в способе 2?


Нужно было создать 370 файлов из вкладок, комп заругался что его ресурсов на это не хватает (при выполнении макроса открывается еще одно окно Excel с данными. И так по каждой вкладке). Чтобы всего хватало и не приходилось закрывать созданные файлы добавил строчку. Может кому пригодится. Взял макрос из примера 2.




Добрый день! Спасибо за Ваши подсказки в макросах )
Я редко пользуюсь VBA, поэтому туплю чуток я не могу понять, как правильно допилить этот код под 3 способ.
Мне нужно, чтобы лист сохранялся только значениями с названием из ячейки М1 и закрывался. Ругается на
говорит, что объект не поддерживает этот способ и метод .
Помогите пожалуйста его привести в рабочий вид :"-(


Николай, добрый вечер!
У меня вопрос почти такой же, как у Юлии, но только про формат .pdf. Пробовал в Способе 2 менять расширение на ".pdf" — конечно, файлы создавались, но не открывались, затем пробовал прикрутить в код такую строку:

Николай, спасибо за Вашу помощь и Ваш сайт. Я немного модифицировал макрос, чтоб он сохранял только выделенные листы. Но вышло если я выделяю один лист, он его сохраняет, а если два и больше то тогда под разными названиями сохраняет каждый раз все выделенные листы. Подскажите пожалуйста, что мне изменить, чтоб они сохранялись раздельно. Спасибо.
Sub SplitSheets5()
ActiveWorkbook.RefreshAll
Dim s As Worksheet
For Each s In ActiveWindow.SelectedSheets
s.ExportAsFixedFormat Filename:=»C:\doc\» & «\» & s.Name & «.pdf», Type:=xlTypePDF
Next
End Sub

Подскажите как при сохранении листа в PDF здесь задать имя файла «Имя файла, имя листа»
Sub SplitSheets5()
Dim s As Worksheet
For Each s In ActiveWorkbook.Worksheets
s.ExportAsFixedFormat Filename:=ThisWorkbook.Path & «\» & s.Name & «.pdf», Type:=xlTypePDF
Next
End Sub

Очень интересная статья, спасибо автору.
У меня ситуация, что нужно сохранить файл в формате (Tab delimited) *.txt
в таком случае каким будет значение File Format: ?
или примерно так:
ActiveWorkbook.SaveAs Filename:= p & «\Лист2.txt», FileFormat:= .

Вынужден обратиться за помощью
Sub invoice()
Sheets(Array(«INVOICE Nr. 0200», «Specificatie 0200», «DVI» [IMG] ).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
«G:\KW 5\invoice 200.pdf», Quality:=xlQualityStandard, IncludeDocProperties _
:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
End Sub
1 можна изменить (INVOICE Nr. 0200″, «Specificatie 0200», «DVI» ))на проста (Select Sheet) выделиные листы
2 адрес сохранения вместо (G:\KW 5\invoice 200.pdf» [IMG] в папку где находится книга с названием PDF по ячейки с Sheet XXXX B9.





Помогите пожалуйста, я в макросах ни бум бум, мне нужно чтобы выделенный лист (ы) из книги сохранялись с именем такого вида:
«название листа» № «номер ячейки» от «номер ячейки» (чтобы получилось например счет №23 от 10.04.2017)
в формате PDF и чтобы файл после сохранения не открывался, а просто сохранялся в ту же папку откуда документ?
пытался компоновать макросы в примерах но не получилось((





В том-то и дело — 1 лист. Это я пробовал накладную распечатать. (1 книга = 3 листа, печатается только один.)
В результате получается 1 стр. PDF.
Попробовал на работе — тоже самое. 10 секунд на сохранение файла *.pdf.
Может надо использовать какой-то определённый PDF драйвер/принтер?

win8.1 x64 + Office 2007/2010.
Office без обновлений. Отсутствие обновок Оффиса может до такой степени замедлить работу драйвера PDF?

p.s. Только что заметил — PDF записались в папку, откуда был взят xls файл. А так же копии этих файлов были записаны в папку автостарта, где хранится personal.xlsb . Соответственно, при старте Excel’a он пытается ещё открыть и эти PDF файлы.
Ту миллион долларс (с)





Понятно. Я в свою очередь решил поменять .pdf на .xlsx Принцип тот же практически.




Добрый день. Второй день пытаюсь собственными силами допилить 2 пример, только смысл в том что я хочу что бы макрос сохранял не все листы, а лист/листы с определенным названием. Подскажите пожалуйста как прописать данное действие( Заранее благодарен за помощь!

А можно на примере этого макроса сделать перевод в *pdf одним файлом?
Sub SplitSheets5()
Dim s As Worksheet
For Each s In ActiveWorkbook.Worksheets
s.ExportAsFixedFormat Filename:=ThisWorkbook.Path & «\» & s.Name & «.pdf», Type:=xlTypePDF
Next
End Sub



Также столкнулся с такой проблемой, дописал чтобы пропускало скрытые листы:



Извиняюсь, может не сюда, но мне надо получить из файла с большим кол-вом листов, таблицу из двух колонок:
1. Имя листа;
2. содержимое ячейки A9 каждого листа (это текст, название организации).
Кто может подсказать?
Можно в отдельном файле, можно в том же на новый лист.
или направьте в какой теме спросить.

Что-то я сглазил.
В строке:

Большое спасибо за тему и множество комментариев.
Не нашёл здесь готового решения для такого случая:
Нужно сохранить 2 конкретных листа с определёнными названиями из книги со множеством листов в отдельную книгу и задать ей общее имя.
Также формулы на листах нужно заменить на значения с сохранением формата ячеек.
Plex помог не целиком. Да и хотелось бы сделать кнопку на одном из листов, которая бы выполняла эту процедуру.
Буду чертовски рад комментариям:)

Подскажите, пожалуйста, пробовал по 5 способу добавить макрос.
Теперь при каждом открытии любой книги Excel создаются два файла *.pdf и никак не получается это убрать, уже поудалял все макросы.


Здравствуйте Николай, пытаюсь воспользоваться пятым способом, но вылетает ошибка 1004
Помогите пожалуйта







Скорректированный код для случая присвоения имени из ячейки C1:


Приветствую всех!
Помогите пожалуйста, был написан макрос, но к сожалению теперь утерян :
Сохраниение активного листа в новую книгу, в папку где находится исходный файл, имя файла = название листа
Далее отправка нового файла через Outlook , адрес эл.почты из ячейки A1, тема письма прописана в макросе
Сейчас есть только начало:
Sub SohrList()
Dim CurrentWin As Window
Dim VremWin As Window
Set CurrentWin = ActiveWindow
Set VremWin = ActiveWorkbook.NewWindow
CurrentWin.ActiveSheet.Copy
VremWin.Close
sPath = ThisWorkbook.Path
ThisWorkbook.SaveAs (ThisWorkbook.Path)
End Sub
макрос создает файл с листом, но не берет название и не сохраняет





VBA выдает при использовании любого метода
Compile error: Syntax error
Раньше все работало.

Попробовал Вариант 2, но есть значительные недостатки данного макроса:
1. Обновление экрана не отключено, из-за этого процесс по длительности возрастает в разы, но это только начало сказки.
2. При большом объёме листов в книге, все листы, которые разделяются и сохраняются в файлы не закрываются, а накапливаются открытыми, из-за этого процесс EXCEL только наращивает в памяти и в итоге вообще зависает.
3. В шапке макроса отсутствует Msg бокс для запуска макроса, может запуститься и «повесит» всю работу компьютера.
4. После работы макроса не понятно, какой объём работы выполнил макрос?
После всего выше сказанного, прошу рассмотреть данный вариант:
Sub Splitbook()
Dim msg
msg = MsgBox(«Хотите разделить листы книги на отдельные книги excel?», vbYesNo, «Разделение листов по отдельным книгам!»
If msg = 7 Then Exit Sub
Разделение листов и просмотр книги Excel в разных окнах
Excel предлагает множество инструментов для управления внешним видом рабочей книги. В прошлом уроке мы уже научились закреплять строки и столбцы. В этом рассмотрим несколько инструментов, которые позволяют разделять лист на несколько частей, а также просматривать документ в разных окнах.
Если книга Excel содержит большое количество данных, могут возникнуть затруднения при сопоставлении различных разделов. Excel содержит дополнительные опции, упрощающие восприятие и сравнение данных. Например, Вы можете открыть книгу в новом окне или разделить лист на отдельные области.
Открытие текущей книги в новом окне
Excel позволяет открывать одну и ту же книгу одновременно в нескольких окнах. В нашем примере мы воспользуемся этой возможностью, чтобы сравнить два различных листа одной книги.
- Откройте вкладку Вид на Ленте, а затем выберите команду Новое окно.

- Откроется новое окно для текущей книги.

- Теперь Вы можете сравнивать листы одной и той же книги в разных окнах. В нашем примере мы выберем отчет по продажам за 2013 год, чтобы сравнить продажи в 2012 и в 2013 годах.

Если у Вас открыто несколько окон, Вы можете воспользоваться командой Упорядочить все для быстрой группировки окон.

Разделение листа на отдельные области
Excel позволяет сравнивать разделы одного листа без создания дополнительных окон. Команда Разделить позволяет разделить лист на отдельные области, которые можно прокручивать независимо друг от друга.
- Выделите ячейку в том месте, где необходимо разделить лист. Если Вы выберите ячейку в первом столбце или первой строке, то лист разделится на 2 части, в противном случае на 4. В нашем примере мы выберем ячейку C7.

- Откройте вкладку Вид на Ленте, а затем нажмите команду Разделить.

- Лист будет разделен на несколько областей. Вы можете прокручивать каждую область отдельно, используя полосы прокрутки. Это позволит Вам сравнивать различные разделы одного и того же листа.

Вы можете перетаскивать вертикальный и горизонтальный разделители, чтобы изменить размер каждого раздела. Чтобы удалить разделение, снова нажмите команду Разделить.
Разделить каждый лист Excel на отдельные файлы (шаг за шагом)

Если у вас есть книга Excel с большим количеством листов, нет простого способа разделить каждый из этих листов на отдельные файлы Excel и сохранить отдельно.
Это может потребоваться, когда вы составляете листы за разные месяцы или регионы, продукты / клиенты и хотите быстро получить отдельную книгу для каждого листа (в виде файла Excel или PDF).
Хотя существует способ вручную разделить листы на отдельные книги, а затем сохранить их, он неэффективен и подвержен ошибкам.
В этом руководстве я дам вам простой код VBA, который вы можете использовать, чтобы быстро (за несколько секунд) разделить все рабочие листы на отдельные файлы, а затем сохранить их в любой указанной папке.
Разделить каждый лист на отдельный файл Excel
Предположим, у вас есть рабочая тетрадь, как показано ниже, где у вас есть лист на каждый месяц.

Чтобы разделить эти листы в отдельный файл Excel, вы можете использовать приведенный ниже код VBA:
Перед использованием приведенного выше кода VBA необходимо убедиться в нескольких вещах:
- Создайте папку, в которой вы хотите получить все полученные файлы.
- Сохраните основной файл Excel (в котором есть все нужные вам рабочие листы в виде отдельных файлов) в этой папке.
Как только вы это сделаете, вы можете поместить указанный выше код VBA в файл и запустить его.
Приведенный выше код написан таким образом, что он выбирает местоположение папки, используя путь к файлу (в котором выполняется код). Вот почему важно сначала сохранить файл в папке, а затем использовать этот код.
Как работает код VBA — В приведенном выше коде используется простой цикл For Next, который проходит через каждый рабочий лист, создает копию рабочего листа в книге Excel, а затем сохраняет эту книгу Excel в указанной папке (которая совпадает с основным файлом со всеми листов).
Ниже приведены шаги по размещению этого кода VBA в книге Excel (они будут такими же для всех других методов, показанных в этом руководстве):
Куда поставить этот код?
Ниже приведены шаги по размещению кода в редакторе Visual Basic, где он может быть выполнен:
- Щелкните вкладку Разработчик.

- В группе «Код» выберите параметр «Visual Basic». Это откроет редактор VB. [Вы также можете использовать сочетание клавиш — ALT + F11]

- В редакторе VB щелкните правой кнопкой мыши любой объект книги, над которой вы работаете.

- Наведите курсор на опцию Вставить
- Щелкните по модулю. Это вставит новый модуль

- Дважды щелкните объект Module. это откроет окно кода для модуля
- Скопируйте приведенный выше код VBA и вставьте его в окно кода модуля.

- Выберите любую строку в коде и нажмите зеленую кнопку воспроизведения на панели инструментов, чтобы запустить макрокод VBA.

Вышеупомянутые шаги мгновенно разделят рабочие листы на отдельные файлы Excel и сохранят их. Если у вас меньше листов, это займет всего секунду. Если у вас много, это может занять некоторое время.
Имя каждого сохраненного файла совпадает с именем листа в основном файле.

Поскольку вы поместили код VBA в книгу Excel, вам необходимо сохранить его в формате .XLSM (который является форматом с поддержкой макросов). Это гарантирует, что макрос будет сохранен и будет работать, когда вы откроете этот файл в следующий раз.
Обратите внимание, что я использовал строки Application.ScreenUpdating = False и Application.DisplayAlerts = False в коде, чтобы все происходило в серверной части и не видеть, что происходит на вашем экране. Как только код запускается, разделяет листы и сохраняет их, мы возвращаем им значение ИСТИНА.
Рекомендуется создать резервную копию основного файла (в котором есть листы, которые вы хотите разделить). Это гарантирует, что вы не потеряете свои данные в случае, если что-то пойдет не так, или если Excel решит замедлить работу или дать сбой.
Разделить каждый рабочий лист и сохранить как отдельные PDF-файлы
Если вы хотите разделить листы и сохранить их как файлы PDF вместо файлов Excel, вы можете использовать следующий код:
Перед использованием этого кода необходимо убедиться в следующем:
- Создайте папку, в которой вы хотите получить все полученные файлы.
- Сохраните основной файл Excel (в котором есть все нужные вам рабочие листы в виде отдельных файлов) в этой папке.
Приведенный выше код разделяет каждый лист в файле Excel и сохраняет его в формате PDF в той же папке, где вы сохранили основной файл Excel.
Разделите только те рабочие листы, которые содержат слово / фразу, в отдельные файлы Excel
Если у вас много листов в книге, и вы хотите разделить только те листы, в которых есть определенный текст, вы также можете это сделать.
Например, предположим, что у вас есть файл Excel, содержащий данные за несколько лет, и каждый лист в файле имеет номер года в качестве префикса. Что-то вроде того, что показано ниже:
Теперь предположим, что вы хотите разделить все листы на период с 21 по 2022 год и сохранить их в виде отдельных файлов Excel. Для этого вам нужно как-то проверить имя каждого рабочего листа, и только те листы, которые имеют номер 2021-2022, должны быть разделены и сохранены, а остальные должны быть оставлены нетронутыми.
Это можно сделать с помощью следующего макроса VBA:
В приведенном выше коде я использовал переменную TexttoFind, которой изначально было присвоено значение «2020».
Затем код VBA использует цикл For Next в VBA для просмотра каждого рабочего листа, а затем проверяет имя каждой функции INSTR рабочего листа. Эта функция проверяет, есть ли в имени листа слово2021-2022 или нет. Если это так, он вернет номер позиции, в которой он нашел этот текст (в данном случае это 2021-2022 годы).
И если он не находит искомый текст, он возвращает 0.
Это используется с условием IF Then. Поэтому, если имя листа содержит текстовую строку 2021-2022, оно будет разделено и сохранено как отдельный файл. И если у него нет этой текстовой строки, условие IF не будет выполнено, и ничего не произойдет.