Условное содержимое / Форматирование Excel для печати по сравнениюРазрывы экрана и страницы
-
19-09-2019 - |
Вопрос
У меня есть макрос публикации VBA в Excel, который генерирует опубликованную рабочую книгу на основе основного листа конфигурации и нескольких листов с данными.Опубликованная версия представляет собой прямые данные, все еще отформатированные, но без формул и с некоторыми примечаниями и справочной информацией, которые скрыты.По сути, основная конфигурация содержит таблицу имен рабочих листов и диапазонов, подлежащих публикации.
Чтобы сделать опубликованную версию доступной для печати, в некоторые листы необходимо вставить разрывы страниц.Я понимаю, что могу вставить их на основе той же конфигурации, и я также могу изменить ориентацию печати и поля определенного листа, добавив еще несколько столбцов в свой основной лист.
А вот тут начинается самое сложное.Если в таблице есть некоторые из этих разрывов страниц, вставленных в процессе публикации, я бы хотел, чтобы перед разрывом страницы была вставлена информационная строка, указывающая, что таблица продолжается на следующей странице.Но я хочу, чтобы это отображалось только в печатной версии, а не на экранном дисплее.
Есть ли способ сделать это?
Решение
Сначала вставьте строку и скройте ее непосредственно перед разрывом страницы.Затем вы можете использовать BeforePrint
выполните событие в рабочей книге, чтобы найти все строки с текстом "Посмотреть следующую страницу" в ней, а затем отобразить их.
Sub Workbook_BeforePrint(cancel as Boolean)
Dim rngCell as Range
set rngCell = ActiveSheet.UsedRange.Find("See Next Page")
while not rngCell is Nothing
if not rngCell is Nothing then
rngCell.EntireRow.Hidden = false
end if
set rngCell = ActiveSheet.UsedRange.FindNext()
loop
End Sub
Это поможет вам в некоторой степени, если вам нужно будет уйти, однако, это оставит вас восприимчивыми к проблеме отсутствия AfterPrint
.Итак, что вы можете сделать, так это следующее:
Sub Workbook_BeforePrint(cancel as Boolean)
Application.EnableEvents = false
'Unhide rows here
if cancel then
Workbook.PrintPreview()
else
Workbook.PrintOut()
end if
'Rehide rows here
Application.EnableEvents = True
End Sub
Обратите внимание , что cancel
по сути, это сообщит вам, является ли это предварительным просмотром печати или фактической командой печати.По-моему, это очень любезно с его стороны.