Запуск Sub Workbook_BeforePrint при печати только активного листа?

Я хочу печатать только один лист за раз (из-за огромного количества данных, которые привели бы к 1000 страницам, если бы я печатал всю книгу), но я хочу, чтобы заголовок автоматически обновлялся перед печатью. Заголовок будет иметь формулу, которая ссылается на ячейки и вставляет значение этой ячейки. Однако Worksheet_BeforePrint, похоже, не имеет значения, а Workbook_BeforePrint не работает, если только печатать активный лист.

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim rptdate As String

Dim ride As String
Dim sht As String
sht = ActiveSheet.Name
rptdate = Sheets("Inputs").Range("B3").Value
prov = Sheets("Inputs").Range("B4").Value
ride = Sheets("Inputs").Range("B5").Value
ActiveSheet.PageSetup.RightHeader = sht  & " Ride Name: " & ride & " First Report Date: " & rpdate

End Sub

Я хочу, чтобы в заголовке отображалось что-то вроде: «Имя листа Название поездки: поездка Дата первого отчета: rptdate» Предпочтительно в 3 строки, как указано выше. Приведенный выше код работает, если я должен распечатать всю книгу, но не тогда, когда я хочу распечатать только активный рабочий лист.


person morg    schedule 01.10.2019    source источник


Ответы (1)


Я никогда раньше не печатал из VBA, но вы можете использовать метод PrintOut из объекта рабочего листа. Поэтому действуйте так, как если бы вы печатали книгу, чтобы вызвать событие Workbook_BeforePrint. Не волнуйтесь, вы отмените это задание на печать.

Private Sub Workbook_BeforePrint(Cancel As Boolean)

    Dim rptdate As String, ride As String, ws As Worksheet
    Set ws = ActiveSheet
    rptdate = Sheets("Inputs").Range("B3").Value
    ride = Sheets("Inputs").Range("B5").Value
    ws.PageSetup.RightHeader = ws.Name & " Ride Name: " & ride & " First Report Date: " & rpdate
    ws.PrintOut

    ' Cancel the entire workbook printjob - it's as simple as changing this boolean value
    Cancel = True

End Sub

Параметр Cancel = True отменит печать всей книги, а ws.PrintOut напечатает только ваш активный рабочий лист.

И мои извинения, я в настоящее время не в среде, где я могу проверить это в данный момент.

person K.Dᴀᴠɪs    schedule 01.10.2019