Excel VBA печать групп вкладок в PDF

excel vba печать группы вкладок из эксель с помощью vba Чем сложнее отчет в экселе, и чем больше вкладок, тем утомительнее процесс печати. Особенно если надо распечать несколько вкладок из списка в определенном порядке. Каждый раз выбирать одну за другой вкладки в интерфейсе, когда их счет идет на десятки, — утомительно. Однако небольшой vba скрипт поможет решить проблему печати группы вкладок из Экселя.

Скрипт решает следующую задачу —  выбирает все листы в открытом эксель файле с именами согласно заданному списку и публикует в виде pdf файла с заданным именем.

 

Excel VBA код для экспорта вкладок в PDF


Private Sub CommandButton_Click()
 Dim wksAllSheetsT3 As Variant
 Dim wksSheet1 As Worksheet
 Dim strFilename As String, strFilepath As String
 Set wksSheet1 = Sheets("Sheet 1")'надо указать имя первой вкладки из списка
wksAllSheetsT3 = Array( _
"Sheet 1", "Sheet 2", "Sheet 3", " Sheet 4" _
)'Список вкладок через запятую
Sheets(wksAllSheetsT3).Select 'Выбираем все вкладки из списка
 'И публикуем их в виде pdf документа
wksSheet1.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:="C:\PDF_reports\test.pdf", _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=True
wksSheet1.Select 'сбрасываем выборку.
End Sub

Источником вдохновения послужила публикация:
https://danwagner.co/how-do-i-save-multiple-sheets-as-a-single-pdf/

Исходный код я укоротил, и добавил комментарии. Как видно из названия функции — она повешена на кнопку. Не большая форма с кнопок может сильно сократить затраты времени необходимые для печати вкладок.

Одно замечание, порядок вкладок в списке на самом деле не имеет никакого принципиального значения. Вкладки будут выведены на печать в той последовательности в которой они существуют в excel файле.

Эксель печатаем вкладки по одной VBA

Если хоте вывести страницы на печать в том порядке, что задан списком, стоит испол цикл. Иллюстрирует процесс следующий код. Наши две команды тут завернуты в цикл. А чтобы файлы в процессе экспорта не перепутались — пронумеруем каждый файл снабдим именем вкладки.

'Сохраняем вкладки по одной в цикле
For i = 0 To 27
 'обновляем выбор первой вкладки
 Set wksSheet1 = Sheets(wksAllSheets(i))
 'Выводим вкладки по одной, заодно нумеруем их
wksSheet1.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:="C:\PDF_report\" & i & "_" & wksAllSheets(i) & ".pdf", _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=True
Next i

После можно, с помощью бесплатной программы PDF Split&Merge, соединить все выходные файлы в один.

Excel VBA печать групп вкладок в PDF: 3 комментария

  1. Dan Wagner 06.04.2017 at 13:54

    Good work here!

    • DonJad 07.04.2017 at 13:00

      All thanks to your brilliant realization of this issue!

      Same topic on overflow.com was much less helpful, if in compare with your post.

  2. art_rrc 19.04.2017 at 17:28

    Спасибо, интересная статья.
    «После можно, с помощью бесплатной программы PDF Split&Merge, соединить все выходные файлы в один» — а можно прям в коде использовать API например Acrobat’а — и будет вообще красота.
    По аналогии с таким кодом из автокада (тут ведь не принципиально использовать путь напечатанного файла из акада или «Filename» из приведенного кода):
    For i = 2 To n
    Layout.SetWindowToPlot BL_Corner, TR_Corner
    Layout.PlotType = acWindow ‘Печатаем окно
    .Regen acAllViewports ‘Регенирируем вид
    .Plot.PlotToDevice ‘Непосредственно печать
    Set objPdf = CreateObject(«Scripting.FileSystemObject»)
    Set objNewPdf = objPdf.GetFile(pdfWayDefault)
    objPDF2.Open (pdfWayDefault) ‘Только что напечатанный файл
    numPages1 = objPDF1.GetNumPages()
    If objPDF1.InsertPages(numPages1 — 1, objPDF2, 0, 1, True) = False Then
    MsgBox («Не получилось вставить страницы. Закройте акробат и повторите. «)
    End If
    objPDF2.Close
    BL_Corner(0) = BL_Corner(0) + 210#
    TR_Corner(0) = TR_Corner(0) + 210#
    Next i
    If objPDF1.Save(PDSaveFull, pdfWayOnly & «\» + shifr + «.pdf») = False Then
    MsgBox («Не получилось сохранить измененный документ!»)
    End If

Добавить комментарий

Имя *
E-mail *
Сайт