Как напечатать несколько страниц в одном PDF в цикле - PullRequest
0 голосов
/ 23 июня 2019

Я пытаюсь создать макрос для печати ежедневника.Одна страница на каждый день.Я создал какой-то шаблон, и теперь каждый раз, когда код запускается для цикла, он меняет дату и номер недели и т. Д., А затем распечатывает страницу.Однако, как это каждая страница в другом файле PDF.Есть ли какой-то способ, как каждый раз добавлять новую страницу в один и тот же pdf (тот же диапазон, но разные данные), а затем печатать?

For i = 1 To 365

ActiveSheet.PrintOut

Range("A26") = WorksheetFunction.RoundUp((i + 2) / 7, 0) & ". week" 'week number

Range("A1").Value = Range("A1").Value + 1  'change date

Range("A1").Select
If (i Mod 2 = 0) Then
    Selection.HorizontalAlignment = xlLeft 'left page
Else
    Selection.HorizontalAlignment = xlRight 'right page
End If

Next i

1 Ответ

0 голосов
/ 23 июня 2019

Я изменил ваш макрос, чтобы он сначала создал новую временную рабочую книгу, в которую будет копироваться каждый обновленный рабочий лист. Затем он использует метод ExportAsFixedFormat для печати книги в указанный файл PDF (измените имя файла соответственно). Затем он удаляет временную рабочую книгу. Обратите внимание, что ScreenUpdating имеет значение False в начале кода, чтобы все это происходило в фоновом режиме. Также предполагается, что шаблон листа является активным листом.

Option Explicit

Sub PrintDailyPlanner()

    Dim sourceWS As Worksheet
    Dim tempWB As Workbook
    Dim i As Long

    Application.ScreenUpdating = False

    'set the active sheet
    Set sourceWS = ActiveSheet

    'create a new temporary workbook with one worksheet
    Set tempWB = Workbooks.Add(Template:=xlWBATWorksheet)

    'copy the source worksheet each time it's updated to the newly created temporary workbook
    With sourceWS
        For i = 1 To 365

            .Range("A26") = WorksheetFunction.RoundUp((i + 2) / 7, 0) & ". week" 'week number

            .Range("A1").Value = .Range("A1").Value + 1  'change date

            If (i Mod 2 = 0) Then
                .Range("A1").HorizontalAlignment = xlLeft 'left page
            Else
                .Range("A1").HorizontalAlignment = xlRight 'right page
            End If

            .Copy after:=tempWB.Worksheets(tempWB.Worksheets.Count)

        Next i
    End With

    'delete the first worksheet from the temporary workbook
    Application.DisplayAlerts = False
    tempWB.Worksheets(1).Delete
    Application.DisplayAlerts = True

    'print the temporary workbook to PDF file (change the filename accordingly)
    tempWB.ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\Users\Domenic\Desktop\sample.pdf"

    'close the temporary workbook, without saving
    tempWB.Close SaveChanges:=False

    Application.ScreenUpdating = True

End Sub

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...