Макрос печати листа excel в pdf

Сохранение в PDF книги Excel, группы листов, одного листа или отдельного диапазона с помощью кода VBA. Метод ExportAsFixedFormat. Примеры экспорта.

Метод ExportAsFixedFormat

Метод ExportAsFixedFormat сохраняет рабочую книгу Excel или выбранную группу листов этой книги в один PDF-файл. Чтобы экспортировать каждый лист в отдельный файл, необходимо применить метод ExportAsFixedFormat к каждому сохраняемому листу.

Синтаксис

Expression.ExportAsFixedFormat (Type, FileName, Quality, IncludeDocProperties, IgnorePrintAreas, From, To, OpenAfterPublish, FixedFormatExtClassPtr)

Expression – это выражение, представляющее объект Workbook, Worksheet или Range.

Параметры

Единственный обязательный параметр – Type, остальные можно не указывать – в этом случае будут применены значения по умолчанию.

Параметр Описание
Type Задает формат файла для экспорта книги или листа:
xlTypePDF(0) – сохранение в файл PDF;
xlTypeXPS(1) – сохранение в файл XPS*.
FileName Задает имя файла. При указании полного пути, файл будет сохранен в указанную папку, при указании только имени – в папку по умолчанию (в Excel 2016 – «Документы»). Если имя не задано (по умолчанию), файл будет сохранен с именем экспортируемой книги.
Quality Задает качество сохраняемых электронных таблиц:
xlQualityMinimum(1) – минимальное качество;
xlQualityStandard(0) – стандартное качество (по умолчанию).
IncludeDocProperties Включение свойств документа Excel в PDF:
True(1) – включить;
False(0) – не включать;
мне не удалось обнаружить разницу и значение по умолчанию.
IgnorePrintAreas Указывает VBA, следует ли игнорировать области печати, заданные на листах файла Excel:
True(1) – игнорировать области печати;
False(0) – не игнорировать области печати (по умолчанию).
From** Задает номер листа книги Excel, с которого начинается экспорт. По умолчанию сохранение в PDF начинается с первого листа книги.
To** Задает номер листа книги Excel, на котором заканчивается экспорт. По умолчанию сохранение в PDF заканчивается на последнем листе книги.
OpenAfterPublish Указывает VBA на необходимость открыть созданный файл PDF средством просмотра:
True(1) – открыть файл PDF для просмотра;
False(0) – не открывать файл PDF для просмотра (по умолчанию).
FixedFormatExtClassPtr Указатель на класс FixedFormatExt (игнорируем этот параметр).

* XPS – это редко использующийся фиксированный формат файлов, разработанный Microsoft, который похож на PDF, но основан на языке XML.
** Применимо только к книге (Workbook.ExportAsFixedFormat), при экспорте листа (Worksheet.ExportAsFixedFormat) указание параметров From и/или To приведет к ошибке.

Сохранение в PDF книги Excel

Экспорт всей книги

Sub Primer1()

    ThisWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:=«C:Testfile1.pdf», OpenAfterPublish:=True

End Sub

Если вы указываете путь к файлу, он должен существовать, иначе VBA сохранит файл с именем и в папку по умолчанию («ИмяКниги.pdf» в папку «Документы»).

Экспорт части книги

Этот способ позволяет сохранить в PDF группу листов, расположенных подряд:

Sub Primer2()

    ThisWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:=«C:Testfile2.pdf», _

    From:=2, To:=4, OpenAfterPublish:=True

End Sub

Сохранение в PDF рабочих листов

Экспорт одного листа

Sub Primer3()

    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=«C:Testfile3.pdf», OpenAfterPublish:=True

End Sub

Экспорт диапазона

Sub Primer2()

    Лист4.Range(«A1:F6»).ExportAsFixedFormat Type:=xlTypePDF, Filename:=«C:Testfile4.pdf», OpenAfterPublish:=True

End Sub

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

Экспорт группы листов

Этот способ удобен тем, что экспортировать в PDF можно листы, расположенные не подряд:

Sub Primer5()

    Sheets(Array(«Лист2», «Лист3», «Лист5»)).Select

    Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:=«C:Testfile5.pdf», OpenAfterPublish:=True

End Sub


You can use the following syntax in VBA to print the currently active Excel sheet to a PDF:

Sub PrintToPDF()

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
                                Filename:="my_data.pdf", _
                                Quality:=xlQualityStandard, _
                                IncludeDocProperties:=False, _
                                IgnorePrintAreas:=False, _
                                OpenAfterPublish:=True

End Sub

This particular macro will print the currently active Excel sheet to a PDF called my_data.pdf and it will be saved in the current folder.

Note #1: You can also include a full file path in the Filename argument to save the PDF to a specific folder.

Note #2: The line OpenAfterPublish:= True tells VBA to open the PDF as soon as it is exported. You can leave out this argument if you don’t want the PDF to be opened after exporting.

Note #3: The only required argument in the ExportAsFixedFormat method is Type, which must be set to xlTypePDF to print the sheet to a PDF format.

The following example shows how to use this macro in practice.

Example: Export Excel Sheet to PDF Using VBA

Suppose we have the following Excel sheet that contains information about various basketball players:

Now suppose that we would like to export this sheet to a PDF called my_data.pdf.

We can create the following macro to do so:

Sub PrintToPDF()

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
                                Filename:="my_data.pdf", _
                                Quality:=xlQualityStandard, _
                                IncludeDocProperties:=False, _
                                IgnorePrintAreas:=False, _
                                OpenAfterPublish:=True

End Sub

When we run this macro, the Excel sheet is exported to a PDF and then the PDF is automatically opened:

Note that the exact formatting of the cells with the borders and the fill color is included in the PDF.

Note: You can find the complete documentation for the ExportAsFixedFormat method in VBA here.

Additional Resources

The following tutorials explain how to perform other common tasks in VBA:

VBA: How to Create Folders
VBA: How to Delete Folders
VBA: How to Delete Files

daserdj

0 / 0 / 0

Регистрация: 13.10.2016

Сообщений: 2

1

06.11.2016, 16:11. Показов 12320. Ответов 3

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Добрый день!
На компьютере установлен пакет программ adobe, и в списке устройств имеется принтер adobe pdf, он установлен как принтер по умолчанию.
Имеется код макроса:

Visual Basic
1
2
3
4
5
Sub pe4at()
 
ThisWorkbook.Worksheets("Лист1").PrintOut , printtofile:=True, prtofilename:=ThisWorkbook.Worksheets("Лист1").Name & ".pdf"
 
End Sub

Создается .pdf Файл, но не открывается ни одной из подходящих для чтения pdf программ.

Если использовать следующий код:

Visual Basic
1
2
3
4
5
6
Sub pe4at()
 
ThisWorkbook.Worksheets("Лист1").PrintOut
', printtofile:=True, prtofilename:=ThisWorkbook.Worksheets("Лист1").Name & ".pdf"
 
End Sub

,
то появляется диалоговое окно сохранения файла, и при указании пути назначения и имени файла, формируется корректный .pdf-файл.
В чём разница между двумя данными методами, и как обойти проблему формирования битого файла при использовании первого варианта макроса?



0



15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

07.11.2016, 00:09

2

daserdj, Офис 2007 и более новые имеют встроенные средства для сохранения в PDF. Запишите макрорекордером команду Файл — Сохранить как — тип файла: PDF, Параметры, опубликовать: выделенные листы, ОК.
Так в 2010. В 2007 кнопкаОфис — Сохранить как — PDF или XPS, дальше так же.



1



0 / 0 / 0

Регистрация: 13.10.2016

Сообщений: 2

07.11.2016, 14:24

 [ТС]

3

Казанский, спасибо за ответ!
Подскажите, пожалуйста, как можно данный метод «скрестить» с командой PrintOut, — чтобы, с помощью макроса, перехватывать всплывающее после выполнения PrintOut диалоговое окно, указывать имя файла из переменной и путь, и сохранять? Попробовал запись макроса — в записанном коде диалоговое окно никак не упоминается.



0



anton-sf

123 / 59 / 14

Регистрация: 29.03.2015

Сообщений: 265

08.11.2016, 10:46

4

Из метода, предложенного Казанский, получается макрос, например у меня такой

Visual Basic
1
2
3
4
Sub Макрос1()
    Application.ActivePrinter = "Microsoft Print to PDF (Ne02:)"
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
End Sub

Из этого макроса видно название PDF принтера — его и надо использовать:

Visual Basic
1
2
3
4
Sub Макрос2()
    Лист1.PrintOut Copies:=1, ActivePrinter:="Microsoft Print to PDF (Ne02:)", _
        PrintToFile:=True, PrToFileName:="D:UsersANTON-SFDesktopTEST.PDF"
End Sub



1



Формулировка задачи:

Добрый день!
На компьютере установлен пакет программ adobe, и в списке устройств имеется принтер adobe pdf, он установлен как принтер по умолчанию.
Имеется код макроса:

Создается .pdf Файл, но не открывается ни одной из подходящих для чтения pdf программ.
Если использовать следующий код:

,
то появляется диалоговое окно сохранения файла, и при указании пути назначения и имени файла, формируется корректный .pdf-файл.
В чём разница между двумя данными методами, и как обойти проблему формирования битого файла при использовании первого варианта макроса?

Код к задаче: «Печать pdf из excel-листа»

textual

Sub Макрос2()
    Лист1.PrintOut Copies:=1, ActivePrinter:="Microsoft Print to PDF (Ne02:)", _
        PrintToFile:=True, PrToFileName:="D:UsersANTON-SFDesktopTEST.PDF"
End Sub

Полезно ли:

8   голосов , оценка 4.000 из 5

Макрос печатать листы в пдф, как сохранять название?

Dersarius

Дата: Понедельник, 16.03.2015, 22:28 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 35


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Ребят подскажите, через рекордер записал макрос, устраивает, но зараза не могу понять как прописать в этом макросе когда идет печать в ПДФ чтобы название файлов все всремя разное было, а то получается перезаписывает друг друга после печати =((((
В итоге вопрос =)))) как сделать что бы при выходе название все время менялось например 1, потом 2 и т.д =)))
Извените за тупость, тяжко новичкам =((

И можно ли чтобы название с ячейки макрос брал в название файла прописывал?

[vba]

Код

Sub Макрос1()

‘ Макрос1


Sheets(«лист1»).Select
Sheets(«лист2»).Visible = True
Sheets(«лист2»).Select
Range(«J15:M15»).Select
ChDir _
«C:Новая папка»
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
«C:Новая папкафайл.pdf» _
, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=False
Range(«A1:Y57»).Select
Sheets(«лист2»).Select
ActiveWindow.SelectedSheets.Visible = False
End Sub

[/vba]

Сообщение отредактировал DersariusПонедельник, 16.03.2015, 22:56

 

Ответить

KSV

Дата: Вторник, 17.03.2015, 03:04 |
Сообщение № 2

Группа: Друзья

Ранг: Ветеран

Сообщений: 770


Репутация:

255

±

Замечаний:
0% ±


Excel 2013

как сделать что бы при выходе название все время менялось например 1, потом 2 и т.д

например, так:
[vba]

Код

i = i + 1
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= «C:Новая папкаФайл_» & i & «.pdf», Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas :=False, OpenAfterPublish:=False

[/vba]
а в самом начале, перед строкой «Sub Макрос1()», добавь:
[vba][/vba]

И можно ли чтобы название с ячейки макрос брал в название файла прописывал?

тогда, так:
[vba]

Код

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= «C:Новая папка» & Sheets(«лист2»).Range(«A1»).Value & «.pdf», Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas :=False, OpenAfterPublish:=False

[/vba]
имя файла будет взято из ячейки A1 лист2
но если ячейка A1 будет пустая или содержать недопустимые символы, то при экспорте выдаст ошибку.


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333

Сообщение отредактировал KSVВторник, 17.03.2015, 03:06

 

Ответить

Dersarius

Дата: Вторник, 17.03.2015, 10:45 |
Сообщение № 3

Группа: Пользователи

Ранг: Новичок

Сообщений: 35


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Спасибо большое помогло, а можно по этому макросу сделать чтобы с двух ячеек имя складывалось файла, например брать с А1 и В2

[vba]

Код

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= «C:Новая папка» & Sheets(«лист2»).Range(«A1»).Value & «.pdf», Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas :=False, OpenAfterPublish:=False

[/vba]

Сообщение отредактировал DersariusВторник, 17.03.2015, 10:57

 

Ответить

KSV

Дата: Вторник, 17.03.2015, 11:17 |
Сообщение № 4

Группа: Друзья

Ранг: Ветеран

Сообщений: 770


Репутация:

255

±

Замечаний:
0% ±


Excel 2013

чтобы с двух ячеек имя складывалось файла, например брать с А1 и В2

[vba]

Код

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= «C:Новая папка» & Sheets(«лист2»).Range(«A1»).Value & Sheets(«лист2»).Range(«B2»).Value & «.pdf», Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas :=False, OpenAfterPublish:=False

[/vba]


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333

 

Ответить

Dersarius

Дата: Вторник, 17.03.2015, 11:25 |
Сообщение № 5

Группа: Пользователи

Ранг: Новичок

Сообщений: 35


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= «C:Новая папка» & Sheets(«лист2»).Range(«A1»).Value & Sheets(«лист2»).Range(«B2»).Value & «.pdf», Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas :=False, OpenAfterPublish:=False

Ругается, Документ не сохранен. Возможно документ открыт или при сохранение возникла ошибка

 

Ответить

Dersarius

Дата: Вторник, 17.03.2015, 11:30 |
Сообщение № 6

Группа: Пользователи

Ранг: Новичок

Сообщений: 35


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Извиняюсь все нормально, не допустимое значение было в ячейки, спасибо все работает

 

Ответить

Понравилась статья? Поделить с друзьями:
  • Макрос печати диапазона excel
  • Макрос пропись для word
  • Макрос печати выделенной области в excel
  • Макрос проверки данных excel
  • Макрос переноса листов в другую книгу excel