Найти в Дзене
VBA Excel с нуля

VBA Excel № 86. Событие BeforePrint (Перед печатью)

Событие BeforePrint срабатывает в момент, когда пользователь запрашивает печать, но фактической печати еще не произошло. Это событие использует аргумент Cancel, который позволяет коду, использующему это событие, отменить печать, установив переменной Cancel значение True. Обновление верхнего или нижнего колонтитула Несмотря на широкие настройки параметров верхних и нижних колонтитулов в Excel, отсутствует прямой способ печати содержимого конкретной ячейки верхнего или нижнего колонтитула. Однако с помощью события Workbook_BeforePrint можно отобразить содержимое текущей ячейки верхнего или нижнего колонтитула в процессе печати рабочей книги. Приведенный ниже код проходит по всем листам и обновляет левые верхние колонтитулы страниц при печати рабочей книги, вставляя содержимое ячейки А1 с листа Лист2. Эта процедура устанавливает свойство LeftHeader (левый верхний) объекта PageSetup равным значению в ячейке A1 на листе Лист2. Если нужен левый нижний колонтитул, то надо изменить строку на:
Оглавление
Скриншот с моего ноутбука
Скриншот с моего ноутбука

Событие BeforePrint срабатывает в момент, когда пользователь запрашивает печать, но фактической печати еще не произошло. Это событие использует аргумент Cancel, который позволяет коду, использующему это событие, отменить печать, установив переменной Cancel значение True.

Обновление верхнего или нижнего колонтитула

Несмотря на широкие настройки параметров верхних и нижних колонтитулов в Excel, отсутствует прямой способ печати содержимого конкретной ячейки верхнего или нижнего колонтитула. Однако с помощью события Workbook_BeforePrint можно отобразить содержимое текущей ячейки верхнего или нижнего колонтитула в процессе печати рабочей книги.

Приведенный ниже код проходит по всем листам и обновляет левые верхние колонтитулы страниц при печати рабочей книги, вставляя содержимое ячейки А1 с листа Лист2.

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Эта процедура устанавливает свойство LeftHeader (левый верхний) объекта PageSetup равным значению в ячейке A1 на листе Лист2.

Если нужен левый нижний колонтитул, то надо изменить строку на:

  • sht.PageSetup.LeftFooter = Worksheets("Лист2").Range("A1")
Скриншот с моего ноутбука
Скриншот с моего ноутбука
объект PageSetup представляет собой часть объекта Worksheet и содержит настройки страницы для конкретного листа Excel. Этот объект позволяет управлять различными аспектами форматирования страницы, такими как размеры бумаги, ориентация страницы, поля, колонтитулы и др.
Скриншот с моего ноутбука
Скриншот с моего ноутбука

Сокрытие столбцов перед печатью

В следующем примере на скриншоте ниже используется процедура Workbook_BeforePrint для сокрытия столбцов D:F на листе Лист1 перед печатью.

Скриншот с моего ноутбука
Скриншот с моего ноутбука

и столбцы скрываются:

Скриншот с моего ноутбука
Скриншот с моего ноутбука

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

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Процедура ПоказатьСтолбцы будет находится в стандартном модуле VBA.

Скриншот с моего ноутбука
Скриншот с моего ноутбука
Скриншот с моего ноутбука
Скриншот с моего ноутбука