Условное содержимое / Форматирование Excel для печати по сравнениюРазрывы экрана и страницы

StackOverflow https://stackoverflow.com/questions/1183541

Вопрос

У меня есть макрос публикации 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 по сути, это сообщит вам, является ли это предварительным просмотром печати или фактической командой печати.По-моему, это очень любезно с его стороны.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top