Сохранение листов книги как отдельных файлов

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

save-sheets-as-files.png

Примеров подобного из реальной жизни можно привести массу. Например, файл-отчет с листами-филиалами нужно разделить на отдельные книги по листам, чтобы передать затем данные в каждый филиал и т.д.

Если делать эту процедуру вручную, то придется для каждого листа выполнить немаленькую цепочку действий (выбрать лист, правой кнопкой по ярлычку листа, выбрать Копировать, указать отдельный предварительно созданный пустой файл и т.д.) Гораздо проще использовать короткий макрос, автоматизирующий эти действия.

Способ 1. Простое разделение

Нажмите сочетание Alt+F11 или выберите в меню Сервис - Макрос - Редактор Visual Basic (Tools - Macro - Visual Basic Editor), вставьте новый модуль через меню Insert - Module и скопируйте туда текст этого макроса:

Sub SplitSheets1()
    Dim s As Worksheet
    For Each s In ActiveWorkbook.Worksheets    'проходим по всем листам в активной книге
        s.Copy       'копируем каждый лист в новый файл
    Next
End Sub

Если теперь выйти из редактора Visual Basic и вернуться в Excel, а затем запустить наш макрос (Alt+F8), то все листы из текущей книги будут разбиты по отдельным новым созданным книгам.

Способ 2. Разделение с сохранением

При необходимости, можно созданные книги сразу же сохранять под именами листов. Для этого макрос придется немного изменить, добавив команду сохранения в цикл:

Sub SplitSheets2()
    Dim s As Worksheet
    Dim wb as Workbook
    Set wb = ActiveWorkbook
    For Each s In wb.Worksheets                                 'проходим во всем листам активной книги
        s.Copy                                                  'сохраняем лист как новый файл
        ActiveWorkbook.SaveAs wb.Path & "\" & s.Name & ".xlsx"  'сохраняем файл
    Next
End Sub

Этот макрос сохраняет новые книги-листы в ту же папку, где лежал исходный файл. При необходимости сохранения в другое место, замените wb.Path на свой путь в кавычках, например "D:\Отчеты\2012" и т.п.

Если нужно сохранять файлы не в стандартном формате книги Excel (xlsx), а в других (xls, xlsm, xlsb, txt и т.д.), то кроме очевидного изменения расширения на нужное, потребуется добавить еще и уточнение формата файла - параметр FileFormat:

ActiveWorkbook.SaveAs wb.Path & "\" & s.Name & ".xlsb", FileFormat:=50  

Для основных типов файлов значения параметра FileFormat следующие:

  • XLSX = 51
  • XLSM = 52
  • XLSB = 50
  • XLS = 56
  • TXT = 42
Полный список всех вариантов можно посмотреть в справке MSDN.

Способ 3. Сохранение в новые книги только выделенных листов

Если вы хотите раскидать по файлам не все листы в вашей книге, а только некоторые, то макрос придется немного изменить. Выделите нужные вам листы в книге, удерживая на клавиатуре клавишу Ctrl или Shift и запустите приведенный ниже макрос:

Sub SplitSheets3()
    Dim AW As Window
    Set AW = ActiveWindow
    For Each s In AW.SelectedSheets
        Set TempWindow = AW.NewWindow    'создаем отдельное временное окно
        s.Copy                           'копируем туда лист из выделенного диапазона
        TempWindow.Close                 'закрываем временное окно
    Next
End Sub

Создавать новое окно и копировать через него, а не напрямую, приходится потому, что Excel не умеет копировать группу листов, если среди них есть листы с умными таблицами. Копирование через новое окно позволяет такую проблему обойти.

Способ 4. Сохранение только выделенных листов в новый файл

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

Sub SplitSheets4()
    Dim CurW As Window
    Dim TempW As Window
    Set CurW = ActiveWindow
    Set TempW = ActiveWorkbook.NewWindow
    CurW.SelectedSheets.Copy
    TempW.Close
End Sub

Способ 5. Сохранение листов как отдельных PDF-файлов

Этот способ чем-то похож на второй, но листы сохраняются не как отдельные книги Excel, а в формате PDF, что часто требуется, если никто не должен менять документ и увидеть ваши формулы. Обратите внимание, что:
  • для этого используется уже другой метод (ExportAsFixedFormat а не Copy)
  • листы выводятся в PDF с параметрами печати, настроенными на вкладке Разметка страницы (Page Layout)
  • книга должна быть сохранена на момент экспорта

Нужный нам код будет выглядеть следующим образом:

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

Способ 6. Готовый макрос из надстройки PLEX

Если лень или нет времени внедрять все вышеописанное, то можно воспользоваться готовым макросом из моей надстройки PLEX:


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

 


Страницы: 1  2  
Сергей
05.01.2013 16:35:32
А если мне нужно сохранять новые файлы не в ту же папку, где лежал исходный файл?
05.01.2013 16:36:17
Хороший вопрос. Дописал примечание ко второму макросу - посмотрите.
23.09.2018 00:04:59
А как сослаться на ячейку А1, в которой указан путь для сохранения файла
Путь для каждого листа разный
18.01.2013 09:01:47
Почемуто способ 3 не работает, сначала ругался на то что не определена переменная s, потом ругается на неверные типы данных.
20.01.2013 19:27:06
Допишите в код dim s as Worksheet после первой строки.
А еще лучше - скачайте пример в заголовке статьи и посмотрите как все работает вживую.
20.01.2013 21:05:19
Спасибо за проделываемую работу, подошол 4 способ, добавил в код сохранение только значений и готов к отправке хоть кому файл.
22.03.2013 16:04:05
Все здорово работает, но есть один вопрос. Каким образом можно видоизменить 3 способ чтобы в новые листы сохранялись только значения. Само собой, с сохранением форматирования.
15.02.2014 15:00:26
Добавить перед сохранением скопированного листа проход по всем ячейкам с заменой формул на значения. Что-то типа:
For Each cell in ActiveSheet.UsedRange.Cells
   cell.Formula = cell.Value
Next cell
07.04.2015 00:06:58
Скажите, а как это реализовать, если на каждом листе сводная таблица?
31.01.2021 01:47:41
Николай, здравствуйте!

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

Спасибо!  
14.12.2021 15:46:58
Union(Range("A1:F67"), Range("G1:L67")).Select 
For Each cell In Selection.Cells 
   cell.Formula = cell.Value2 
Next cell 
И дальше сохраняйте этот лист
16.03.2022 23:03:28
Иван, спасибо!

А можете подсказать еще такой нюанс.
Как сохранить книгу созданную. Выдает ошибку

Ругается на ActiveWorkbook.SaveAs wb.Path & "\" & s.Range("L2" & ".xlsx"

С одной вкладкой срабатывает (Способ 2), а с несколькими нет (Способ 4)
 Sub м22_Выгрузить_разделы_в_эксель()
' м22_Выгрузить_разделы_в_эксель Макрос

    Call м09_Скрыть_нули_в_смете

    Application.ScreenUpdating = False

    Sheets(Array("Смета", "КС-2", "КС-3", "С-Ф")).Select
    Sheets("Смета").Activate
    
    Dim CurW As Window
    Dim TempW As Window
    Dim wb As Workbook
    Set CurW = ActiveWindow
    Set wb = ActiveWorkbook
    Set TempW = ActiveWorkbook.NewWindow
    CurW.SelectedSheets.Copy
    TempW.Close

    Sheets("Смета").Select
    For Each cell In ActiveSheet.UsedRange.Cells
    cell.Formula = cell.Value
    Next cell
    
    Sheets("КС-2").Select
    For Each cell In ActiveSheet.UsedRange.Cells
    cell.Formula = cell.Value
    Next cell
   
    Sheets("КС-3").Select
    For Each cell In ActiveSheet.UsedRange.Cells
    cell.Formula = cell.Value
    Next cell
   
    Sheets("С-Ф").Select
    For Each cell In ActiveSheet.UsedRange.Cells
    cell.Formula = cell.Value
    Next cell
    
    Sheets("Смета").Select
    ActiveWorkbook.SaveAs wb.Path & "\" & s.Range("L2") & ".xlsx"    'сохраняем файл 
    ActiveWindow.Close False                                        'закрываем созданный файл 
 
    Application.ScreenUpdating = True 
 
End Sub
04.11.2013 20:09:02
Добрый день!
Вопрос собственно такой: как сохранить лист или диапазон ячеек в формате html?
пробовал таким способом - сохраняет в каком-то формате, который не понимает браузер.
ThisWorkbook.Sheets("SHEET3").Copy
ActiveWorkbook.SaveAs "C:\table.htm", fileformat:=44 
ActiveWorkbook.Close
Спасибо!
14.02.2014 17:35:08
Здравствуйте! Подскажите пожалуйста как сделать так чтобы в отдельный файл сохранялся лист с определённым названием, а не все листы книги, чтобы файл сохранялся под названием листа с расширением .csv , в той же папке что и исходная книга и после сохранения остался закрытым
15.02.2014 14:54:56
Советую запустить макрорекордер (вкладка Разработчик - Запись макроса), выполнить сохранение нужного листа в CSV и посмотреть на код. Будет как раз то, что вам нужно, только слегка необходимо будет модифицировать:
    p = ActiveWorkbook.Path
    Sheets("Лист2").Copy
    ActiveWorkbook.SaveAs Filename:= p & "\Лист2.csv", FileFormat:=xlCSV
    ActiveWindow.Close
18.02.2014 23:24:49
Спасибо Николай за совет, очень мне помогли, я как то сам не догадался посмотреть макрос записанный с помощью макрорекодера. У меня получилось сохранить файл так как я и хотел. Но возникла другая проблема. При сохранении CSV файла макросом в качестве разделителя ячеек Excel использует запятую вместо точки с запятой как должно быть в русской версии если сохранять файл вручную. Я почитал этот форум и посмотрел в интернете но решения не нашёл. Может вы или кто другой подскажите возможно ли решить эту проблему, то есть сохранить макросом файл в CSV формате с разделителем ячеек точка запятая. Если такого прямого решения нет то как вариант подскажите возможно ли создание макроса который сразу после сохранения файла в формате CSV открыл бы его в Блокноте и произвёл замену всех запятых на точки с запятыми и закрыл бы файл. такой вариант меня бы устроил так как в данном файле нужных мне запятых нет и все что поставит excel можно заменить.
08.05.2014 10:06:55
Он и должен использовать запятую, ибо CSV - это comma separated values, т.е. значения разделенные запятыми. Может склеивать текст в новый промежуточный файл с помощью функции СЦЕПИТЬ и точки с запятой, а потом уже сохранять его в CSV?
01.02.2018 13:28:53
Добрый день.
Вообще ничего не понимаю в макросах, что я делаю не так из предложенного?
Задача: необходимо Лист2 всегда сохранять в отдельный файл с именем из ячейки A5 именно из Листа2. Как это прописать?
Спасибо.
25.02.2014 12:44:55
Добрый день! А как можно сделать, чтобы способ 4 сохранял еще и скрытые листы помимо выделенных? Заранее спасибо!
04.07.2014 09:36:04
Добавить к нему еще и проход по листам с проверкой на видимость. Что-то типа:
    For Each s In ActiveWorkbook.Worksheets    'проходим по всем листам в активной книге
        if s.Visible = False Then s.Copy       'если лист скрыт, то копируем его в новый файл
    Next
03.07.2014 22:21:59
Добрый день.
Для полного счастья в 3 способе не хватает возможности "разорвать связи" в новых листах. Вроде задача простая, а сообразить не могу :(
04.07.2014 09:27:13
Ирина, чуть выше в комментах уже спрашивали такое - ответил.
04.07.2014 10:27:58
Почти...
Выше речь шла о замене формул на значения... мне как раз формулы необходимо оставить (в рамках листа), а связи с книгой разорвать.
04.07.2014 11:09:45
Понял. Тогда можно попробовать таким кодом:
Set wb = ActiveWorkbook
WorkbookLinks = wb.LinkSources(Type:=xlLinkTypeExcelLinks)
        If IsArray(WorkbookLinks) Then
            For i = LBound(WorkbookLinks) To UBound(WorkbookLinks)
                wb.BreakLink Name:=WorkbookLinks(i), Type:=xlLinkTypeExcelLinks
            Next i
        End If
07.07.2014 18:42:31
Добрый вечер!

Большое спасибо за очень полезную информацию!
Сработали все 3 способа (первый не пробовала), за исключением 2 моментов:

при способе №2 из 40 с лишним вкладок открылось только 25 шт в новых документах с сохранением названия вкладки, как и должно было быть. Остальные вкладки даже не показались, мб есть какое-то ограничение по кол-ву вкладок?

Второй момент:  Подскажите пожалуйста,как нужно дописать макрос, чтобы способ номер 3 сохранял вкладки в документы с названием вкладок, как в способе 2?

Спасибо!
Марина
21.08.2014 16:04:39
Николай, доброго дня.
Подскажите, как реализовать копирование диапазона листа в новую книгу. С листом понятно, но на нём много лишних данных, которые в новой книге не нужны.
С ув., Василий
21.08.2014 18:38:34
Будет что-то вроде:
Range("A1:B2").Copy
Workbooks.Add
ActiveSheet.Paste 
Потом сохранить получившуюся книгу в нужное место.
22.01.2015 12:46:15
Нужно было создать 370 файлов из вкладок, комп заругался что его ресурсов на это не хватает (при выполнении макроса открывается еще одно окно Excel с данными. И так по каждой вкладке). Чтобы всего хватало и не приходилось закрывать созданные файлы добавил строчку. Может кому пригодится. Взял макрос из примера 2.

Sub SplitSheets2()
    Dim s As Worksheet
    Dim wb As Workbook
    Set wb = ActiveWorkbook
    For Each s In wb.Worksheets                                'проходим по всем листам активной книги
        s.Copy                                                 'сохраняем лист как новый файл
        ActiveWorkbook.SaveAs wb.Path & "\" & s.Name & ".xlsx"  'сохраняем файл
        ActiveWorkbook.Close False               'закрываем созданный файл
    Next
    End Sub 
04.03.2015 12:51:42
Спасибо, отличный сайт! Чудеса просто можно делать с вашей помощью!
05.03.2015 11:21:39
Подскажите, сохраняю каждый файл в TXT формате вот этим макросом:
Sub SplitSheets2()
    Dim s As Worksheet
    Dim wb As Workbook
    Set wb = ActiveWorkbook
    For Each s In wb.Worksheets                 
     s.Copy                         
     ActiveWorkbook.SaveAs wb.Path & "\" & s.Name & ".txt" 
    ActiveWorkbook.Close
    Next
End Sub
Создаются как и надо текстовые документы, но при их открытии, там набар символов. Как сделать чтобы сохранялось правильно?
И еще может подскажете, мне нужно чтобы после того как сохранился лист в TXT, он после этого менял своё расширение на HTML, вообщем сайт пишу в XL, каждый лист у меня это страничка, на листах я пишу HTML код в чистом виде, вот мне и нужно чтобы макрос сначало в TXT перегонял без форматирования и формул, потом сохранял как HTML страничку. Надеюсь я понятно описал то что хочу сделать, спасибо)
Дописал:
FileFormat:=xlText 
Сохраняет, но там где формула ставит - #VALUE!
16.04.2015 08:22:45
Здравствуйте, подскажите пожалуйста как реализовать 2 способ копирования, чтобы скопированный лист вставлялся значениями (в исходном листе много формул которые в отчете ненужно показывать)
22.09.2015 07:54:04
Здравствуйте, подскажите пожалуйста, как в способе 2 добавить к названию файла кроме имени листа текстовое значение конкретной ячейки на листе (в моем случае А22)?
10.11.2016 10:28:40
 
Sub SplitSheets2()
    Dim s As Worksheet
    Dim wb as Workbook
    Set wb = ActiveWorkbook
    For Each s In wb.Worksheets                 'проходим во всем листам активной книги
     s.Copy                         'сохраняем лист как новый файл
     ActiveWorkbook.SaveAs wb.Path & "\" & s.Name & s.Range("A22") & ".xlsx"  'сохраняем файл
    Next
End Sub
28.01.2021 12:53:23
Добрый день! Спасибо за Ваши подсказки в макросах )

Я редко пользуюсь VBA, поэтому туплю чуток я не могу понять, как правильно допилить этот код под 3 способ.

Мне нужно, чтобы лист сохранялся только значениями с названием из ячейки М1 и закрывался. Ругается на
        ActiveWindow.SaveAs AW.Path & "\" & Range("M1") & ".xlsx"  'сохраняем файл 

говорит, что объект не поддерживает этот способ и метод .

Помогите пожалуйста его привести в рабочий вид :"-(

Sub м09_Смета_в_отдельную_книгу()

    Dim AW As Window
    Set AW = ActiveWindow
    For Each s In AW.SelectedSheets
        Set TempWindow = AW.NewWindow    'создаем отдельное временное окно
        s.Copy                           'копируем туда лист из выделенного диапазона
        TempWindow.Close                 'закрываем временное окно
        For Each Cell In ActiveSheet.UsedRange.Cells 'перевод формул в значения
        Cell.Formula = Cell.Value
        Next Cell
        ActiveWindow.SaveAs AW.Path & "\" & Range("M1") & ".xlsx"  'сохраняем файл
        ActiveWindow.Close False               'закрываем созданный файл
    Next

End Sub
20.03.2016 14:02:37
здравствуйте!  спасибо большое за макрос
подскажите пожалуйста а возможно сделать так  что бы он выгружал из листа только не скрытые ячейки
27.10.2016 13:53:18
Подскажите, пожалуйста, можно ли видоизменить СПОСОБ 2 так, чтобы сохранялись листы отдельно не файлы .xls, а в файлы .txt?
10.11.2016 10:43:41
Юлия, дополнил Способ-2 про разные форматы - посмотрите, пожалуйста.
09.11.2016 20:07:40
Николай, добрый вечер!
У меня вопрос почти такой же, как у Юлии, но только про формат .pdf. Пробовал в Способе 2 менять расширение на ".pdf" - конечно, файлы создавались, но не открывались, затем пробовал прикрутить в код такую строку:

s.ExportAsFixedFormat Type:=xlTypePDF, Quality:=xlQualityMinimum, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= True
 
но ничего не получилось. Не могли бы Вы подсказать, что я делаю не так?
10.11.2016 10:26:47
Дописал Способ-5 к статье и дополнил Способ-2 про разные форматы - посмотрите, пожалуйста.
22.06.2017 16:00:14
Николай, спасибо за Вашу помощь и Ваш сайт. Я немного модифицировал макрос, чтоб он сохранял только выделенные листы. Но вышло если я выделяю один лист, он его сохраняет, а если два и больше то тогда под разными названиями сохраняет каждый раз все выделенные листы. Подскажите пожалуйста, что мне изменить, чтоб они сохранялись раздельно. Спасибо.

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
11.11.2016 20:19:11
Николай, спасибо большое за способ-5!
30.11.2016 10:54:05
Подскажите как при сохранении листа в 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
08.12.2016 09:27:42
Очень интересная статья, спасибо автору.
У меня ситуация, что нужно сохранить файл в формате (Tab delimited) *.txt
в таком случае каким будет значение File Format: ?

или примерно так:
ActiveWorkbook.SaveAs Filename:= p & "\Лист2.txt", FileFormat:= ???

Спасибо!!!
10.01.2017 12:59:41
Здравствуйте, подскажите пожалуйста, как в способе 5 добавить к названию файла кроме имени листа текстовое значение конкретной ячейки на листе (в моем случае А3)?
А также сохранение только выделенных листов в новый файл.
31.01.2017 15:23:07
Вынужден обратиться за помощью


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.

Огромнае спосибо
22.02.2017 11:53:26
Добрый день! Подскажите пожалуйста как сделать, чтоб при сохранении книги с наименованем листа, сам лист потом переименовывался по заданному слову.
Ну например была книга с листами, 1,2,3 ... сформировались книги 1,2,3 а листы в них переименовались на "Данные"
22.02.2017 14:44:45
сама разобралась добавить Worksheets(1).name="Данные"
16.03.2017 20:52:23
Поясните, пожалуйста,  как можно сразу выбрать допустим 10 файлов (книг) и разделить их на листы (все)?
13.04.2017 09:13:00
При запуске макроса 5-м способом выдается ошибка "Invalid procedure call of argument"
13.04.2017 10:23:00
У вас не 2007 версии Excel, часом? Сохранение в PDF появилось начиная с 2010 года.
14.04.2017 08:14:03
2007, спасибо
03.05.2017 09:57:13
Помогите пожалуйста, я в макросах ни бум бум, мне нужно чтобы выделенный лист (ы) из книги сохранялись с именем такого вида:
"название листа" № "номер ячейки" от  "номер ячейки"  (чтобы получилось например счет №23 от 10.04.2017)
в формате PDF и чтобы файл после сохранения не открывался, а просто сохранялся в ту же папку откуда документ?

пытался компоновать макросы в примерах но не получилось((
17.05.2017 20:17:08
Здравствуйте. Не помогают макросы. То ошибка компиляции, то еще что-нибудь не то...
В файле около 10 листов (есть скрытые). Мне нужно скопировать не удаляя оригиналы ТОЛЬКО выделенные.
Сохранить файлы с названиями листов в ту же папку где и основной файл.
Пробовал компоновать коды. Ни так, ни сяк.
Спасибо.
17.08.2017 09:32:47
Доброе утро!
Николай, прошу вашей помощи! Макрос просто волшебный и очень помог мне с одним фалом, а со вторым есть проблемы. Вопрос такой уже был, но то решение, которое вы предложили мне не помогло. Использую вот такой макрос
Sub SplitSheets2()
    Dim s As Worksheet
    Dim wb As Workbook
    Set wb = ActiveWorkbook
    For Each s In wb.Worksheets
       s.Copy
        For Each cell In ActiveSheet.UsedRange.Cells
   cell.Formula = cell.Value
Next cell
        ActiveWorkbook.SaveAs wb.Path & "\" & s.Name & ".xlsx"
    Next
End Sub

Но он не работает выдает ошибку 1004. При просмотре Debug подсвечивает то, что я выделила жирным. Что не так? Задача такова. Есть файл, где много страниц и необходимо каждый лист сделать отдельной книгой, как значение. Можно даже не сохранять, а просто открыть, но такой метод тоже не работает
20.08.2017 10:45:24
А защита книги паролем не стоит, часом?
Проверьте Рецензирование - Защитить книгу (Review - Protect Workbook).
22.08.2017 16:17:41
Добрый день! Нет. Никакой защиты не стоит.
Николай, добрый день! Огромное Вам спасибо за уроки! Начинаю осваивать Вселенную Excel).
Поможете с задачкой? Надергал строчек из разных способов, но где то все равно закралась ошибка.
Модифицирую способ 5.
Требуется: Выделенные листы сохранить в pdf (Имя файла + имя листа).
04.09.2017 23:18:27
Sub SplitSheets5()
    Dim s As Worksheet
 
    Dim AW As Window
    Set AW = ActiveWindow
    For Each s In AW.SelectedSheets     
   s.ExportAsFixedFormat Filename:=ThisWorkbook.Path & "\" & ThisWorkbook.Name & "-" & s.Name & ".pdf", Type:=xlTypePDF
    Next s
End Sub
18.10.2017 22:29:46
Нужна помощь. Меня интересует 5 вариант, но только выборочные листы книги с их  изначальными названиями. Пробовала как вы писали 4.09.17, только там  было имя файла+имя листа, решила что на худой конец сойдет и с такими  названиями, только вот он сделал мне необходимые "отобранные" файлы в  pdf, названия были ок, а внутри у всех файлов получился один и тот же ,  первый лист из всех отобранных, только под разными названиями. Помогите  пожалуйста
06.10.2017 00:02:47
Попробовал Способ 5. Сохранение в PDF листа.
Ооооочень долго сохранял!!! От чего это зависит, как ускорить этот процесс?
Есть ли возможность сделать макрос, чтобы сохранять в PDF в фоновом процессе?
06.10.2017 08:58:12
А сколько строк на исходном листе и сколько листов получилось в итоговом файле? Если у вас 100 стр PDF быстро оно не будет по определению.
06.10.2017 09:05:47
В том-то и дело - 1 лист. Это я пробовал накладную распечатать. (1 книга = 3 листа, печатается только один.)
В результате получается 1 стр. PDF.

Попробовал на работе - тоже самое. 10 секунд на сохранение файла *.pdf.
Может надо использовать какой-то определённый PDF драйвер/принтер?
06.10.2017 09:42:45
Странно. У меня такие файлы за пару секунд делаются. Какой у вас Office? Все обновления установлены?
06.10.2017 14:50:54
win8.1 x64 + Office 2007/2010.
Office без обновлений.  :/ Отсутствие обновок Оффиса может до такой степени замедлить работу драйвера PDF?

p.s. Только что заметил - PDF записались в папку, откуда был взят xls файл. А так же копии этих файлов были записаны в папку автостарта, где хранится personal.xlsb...  :o Соответственно, при старте Excel'a он пытается ещё открыть и эти PDF файлы...
Ту миллион долларс (с)
12.10.2017 21:38:07
Меня интересует 5 вариант, но только выборочные листы книги с их изначальными названиями. Пробовала как вы писали 4.09.17, только там было имя файла+имя листа, решила что на худой конец сойдет и с такими названиями, только вот он сделал мне необходимые "отобранные" файлы в pdf, названия были ок, а внутри у всех файлов получился один и тот же , первый лист из всех отобранных, только под разными названиями. Простите за грамматику, нету русской клавиатуры, сложно писать. Помогите пожалуйста
Илона, у меня схожая задача. Хочу иметь в своём распоряжении макрос, который будет сохранять в отдельные .pdf файлы лишь те листы книги, которые я укажу с помощью комбинаций клавиш LAlt+ЛКМ или LShift. Код правда собрал немного другой:
Sub PDF()  
 
Dim s As Worksheet 
For Each s In ActiveWindow.SelectedSheets 
   s.ExportAsFixedFormat Filename:= _ 
   ThisWorkbook.Path & "\" & s.Name & ".pdf", _ 
   Type:=xlTypePDF
Next s

End Sub
Но работает также неправильно: сохраняет выбранные листы как отдельные файлы в формате .pdf, именует их используя имя соответствующего листа, однако в каждом таком .pdf файле содержаться данные не одного листа, а всех сразу.
Есть второй вариант - можно пройтись по всем листам и сохранить каждый из них отдельно. Это работает. Но удалять лишние листы не охота, а "прикрутить" условие, благодаря которому макрос будет сохранят лишь выбранные листы книги - у меня не получилось.
Не нашли ли вы какое либо решение?
24.01.2018 12:20:02
K sozaleniju resenija poka tak i ne nasla. Konvertiruju vse knigu v pdf, a potom vitagivaju nuznie listi, poka tak.
Понятно. Я в свою очередь решил поменять .pdf на .xlsx :) Принцип тот же практически.
17.11.2017 10:05:04
При импорте листов в формат PDF гиперссылки сохраняются как plain text. Подскажите пожалуйста, как это исправить, чтобы гиперссылки из листа работали?
28.07.2018 16:16:04
Николай, здравствуйте!
Макросы шикарные, но к своему файлу приделать с более сложной задачей моих навыков не хватает, поэтому надеюсь на вашу помощь!
Суть задачи такова:
Есть книга, в ней около 60 листов. Есть лист "смещение Х", он защищён известным мне паролем от изменений. На листе в диапазоне A1:I645 есть 20 таблиц (разделено так для удобства печати), А1-I37 - первая таблица, А38-I69- вторая и так далее через 31 строку. В ячейках I31, I63, I95....I639 через 32 строки в каждой таблице  подитог. Есть лист "смещение Н", он тоже защищён известным мне, но другим паролем от изменений. На листе А1-I37 первая таблица, А38-I74 вторая таблица. В ячейках I31 и I68 подитог. Заполнение таблиц последовательное сверху в низ.Таблицы заполняется как правило не все. Как сохранить в один файл эти 2 листа, в новом файле снять пароль с них, формулы заменить значениями? Причем что бы скопировались заполненные таблицы, т.е. с не нулевым подитогом, это особенно актуально в листе с 20 таблицами. Или их наверное проще удалить в новом файле нижние незаполненные таблицы?
14.08.2018 12:42:24
Подскажите пожалуйста, как дополнить вашу функцию, чтобы она копировала только определенный диапазон ячеек со всех листов и сохраняла как файл txt?
26.09.2018 08:32:11
Добрый день. Второй день пытаюсь собственными силами допилить 2 пример, только смысл в том что я хочу что бы макрос сохранял не все листы, а лист/листы с определенным названием. Подскажите пожалуйста как прописать данное действие( Заранее благодарен за помощь!:)
Страницы: 1  2  
Наверх