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

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

Чтобы опубликованную версию можно было распечатать, в некоторые рабочие листы необходимо вставить разрывы страниц. Я понимаю, что могу вставить их на основе той же конфигурации, а также изменить ориентацию печати и поля конкретного рабочего листа, добавив еще несколько столбцов на свой мастер-лист.

А вот и хитрый момент. Если в таблице есть некоторые из этих разрывов страниц, вставленных в процессе публикации, я бы хотел, чтобы перед разрывом страницы была вставлена ​​информационная строка, указывающая, что таблица продолжается на следующей странице. Но я хочу, чтобы это отображалось только в печатной версии, а не на экране.

Есть ли способ сделать это?


person Cade Roux    schedule 26.07.2009    source источник


Ответы (1)


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

person Eric    schedule 26.07.2009