При работе с большими листами нет ничего необычного в добавлении промежуточных итогов, чтобы можно было логически сгруппировать информацию на листе. (Инструмент «Промежуточные итоги» находится на вкладке «Данные» на ленте в группе «Структура».) При добавлении промежуточных итогов можно указать, чтобы Excel запускал каждую группу на совершенно новой странице. Это очень удобно для всех типов отчетов в Excel.
Если вы начинаете каждую группу или раздел промежуточных итогов на новой странице, вы можете задаться вопросом, есть ли способ создать настраиваемые заголовки, которые печатаются по-разному для каждый раздел, аналогично тому, что вы можете делать с разными разделами в документе Word. К сожалению, в Excel нет возможности сделать это. Однако вы можете создать макрос, который итеративно изменяет заголовок и печатает каждую группу рабочего листа. Рассмотрим следующий макрос:
Sub ChangeSectionHeads () Dim c As Range, rngSection As Range Dim cFirst As Range, cLast As Range Dim rowLast As Long, colLast As Integer Dim r As Long, iSection As Integer Dim iCopies As Variant Dim strCH As String Set c = Range ("A1"). SpecialCells (xlCellTypeLastCell) rowLast = c.Row colLast = c.Column iCopies = InputBox (_ "Количество копий", "Изменение заголовков разделов", 1 ) Если iCopies = "" Тогда выйдите из поднабора cFirst = Range ("A1") 'начальная ячейка инициализации For r = 2 To rowLast' от первой строки до последней строки Если ActiveSheet.Rows (r) .PageBreak = xlPageBreakManual Then Set cLast = Ячейки (r - 1, colLast) Установите rngSection = Range (cFirst, cLast) iSection = iSection + 1 Выберите Case iSection 'замените данные заголовка CenterSection ... Случай 1: strCH = "Раздел 1" Случай 2: strCH = "Раздел 2 "'etc' Case n: strCH =" Section n "End Select ActiveSheet.PageSetup.CenterHeader = strCH rngSection.PrintOut _ Copies: = iCopies, Collate: = True Set cFi rst = Cells (r, 1) End If Next r 'Last Section ++++++++++++++++++++++++++++ Set rngSection = Range (cFirst, c) iSection = iSection + 1 'замените данные вашего центрального заголовка ... strCH = "Последний раздел ..." ActiveSheet.PageSetup.CenterHeader = strCH rngSection.PrintOut _ Copies: = iCopies, Collate: = TrueEnd Sub
Этот макрос – хорошее начало на пути к тому, что вы хотите сделать. Сначала он спрашивает, сколько копий каждого раздела вы хотите напечатать, а затем просматривает каждую строку, чтобы увидеть, есть ли разрыв страницы перед этой строкой.
Фактическая проверка строки выполняется путем просмотра свойства PageBreak каждой строки. Это свойство обычно имеет значение xlPageBreakNone, но при использовании функции «Промежуточные итоги» в Excel для любой строки с разрывом страницы до того, как для этого свойства установлено значение xlPageBreakManual. Это тот же параметр, который возникает, если вы вручную разместили разрывы страниц на листе.
Если макрос обнаруживает, что перед строкой есть разрыв страницы, тогда диапазон rngSection устанавливается равным строки в предыдущей группе. Кроме того, структура Select Case используется для установки разных заголовков, используемых для разных разделов рабочего листа. Затем этот заголовок помещается в центральную позицию заголовка, и печатается диапазон, указанный параметром rngSection.
После пошагового обхода всех групп на листе последняя группа (которая не заканчивается на (разрыв страницы) печатается.
Чтобы использовать этот макрос, все, что вам нужно сделать, это указать в структуре Select Case различные заголовки, которые вы хотите использовать для каждого раздела рабочего листа. Вы также можете при желании изменить расположение заголовка в заголовке. Все, что вам нужно сделать, это изменить свойство CenterHeader на LeftHeader или RightHeader. При желании вы также можете использовать LeftFooter, CenterFooter и RightFooter.