При работе с большими листами нет ничего необычного в добавлении промежуточных итогов, чтобы можно было логически сгруппировать информацию на листе. (Инструмент «Промежуточные итоги» находится на вкладке «Данные» на ленте в группе «Структура».) При добавлении промежуточных итогов можно указать, что 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( _         "Number of Copies", "Changing Section Headers", 1)



If iCopies = "" Then Exit Sub

Set cFirst = Range("A1")     ' initialization start cell     For r = 2 To rowLast    ' from first row to last row         If ActiveSheet.Rows(r).PageBreak = xlPageBreakManual Then             Set cLast = Cells(r - 1, colLast)

Set rngSection = Range(cFirst, cLast)



iSection = iSection + 1             Select Case iSection             '   substitute your CenterSection Header data ...

Case 1: strCH = "Section 1"

Case 2: strCH = "Section 2"

'   etc             '   Case n: strCH = "Section n"

End Select

ActiveSheet.PageSetup.CenterHeader = strCH

rngSection.PrintOut _                 Copies:=iCopies, Collate:=True

Set cFirst = Cells(r, 1)

End If     Next r

'   Last Section +++++++++++++++++++++++++++



Set rngSection = Range(cFirst, c)



iSection = iSection + 1 '   substitute your Center Header data ...

strCH = "Last Section ..."



ActiveSheet.PageSetup.CenterHeader = strCH

rngSection.PrintOut _         Copies:=iCopies, Collate:=True End Sub

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

Фактическая проверка строк выполняется путем просмотра свойства PageBreak каждой строки. Для этого свойства обычно установлено значение xlPageBreakNone, но при использовании функции «Промежуточные итоги» в Excel для любой строки с разрывом страницы до того, как для этого свойства установлено значение xlPageBreakManual. Это тот же параметр, который будет иметь место, если вы вручную разместите разрывы страниц на своем листе.

Если макрос обнаруживает, что перед строкой есть разрыв страницы, тогда диапазон rngSection устанавливается равным строкам в предыдущей группе. Кроме того, структура Select Case используется для установки разных заголовков, используемых для разных разделов рабочего листа. Этот заголовок затем помещается в центральную позицию заголовка, и печатается диапазон, указанный параметром rngSection.

После пошагового обхода всех групп на листе печатается последняя группа (которая не заканчивается разрывом страницы).

Чтобы использовать этот макрос, все, что вам нужно сделать, это указать в структуре Select Case различные заголовки, которые вы хотите использовать для каждого раздела рабочего листа. Вы также можете при желании изменить расположение заголовка в заголовке. Все, что вам нужно сделать, это изменить свойство CenterHeader на LeftHeader или RightHeader. При желании вы также можете использовать LeftFooter, CenterFooter и RightFooter.

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (9867) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365.