Дэвид управляет выборами в профессиональном сообществе, и список имеющих право голоса представляет собой рабочий лист. Имеется около 1200 правомочных избирателей, поэтому распечатка занимает более двадцати страниц. У Дэвида есть нижний колонтитул с номером страницы — что очень полезно, — но было бы здорово, если бы он мог иметь в заголовке каждой страницы имя на странице и фамилию на странице.

В Excel нет собственного способа сделать это. Однако в Word это относительно несложно, поэтому одним из решений является вставка отсортированных имен в документ Word, а затем добавление желаемого заголовка, отображающего имена.

Хотя это может сработать, становится сложно убедиться, что версия списка для Word всегда синхронизирована с версией списка для Excel, и наоборот.

Если вы решили, что хотите сохранить единую версию списка избирателей в Excel, лучший способ решить эту проблему — использовать макрос для вставки имени и фамилии в заголовок. Код для такого макроса, очевидно, должен быть адаптирован к структуре данных на вашем листе. В следующем макросе предполагается, что имена находятся в столбцах от A до C, а фамилии (те, которые вы хотите использовать для заголовков) находятся в столбце C.

Sub PrintNamesInHeader()

Dim iPages As Integer     Dim iPage As Integer     Dim iHorPgs As Integer     Dim iHP As Integer     Dim iHPNext As Integer     Dim iCol As Integer     Dim iColLast As Integer     Dim lRow As Long     Dim lRowLast As Long     Dim sPrtArea As String

iCol = 1        'Col A     iColLast = 3    'Col C     With ActiveSheet         iPages = ExecuteExcel4Macro("Get.Document(50)")

iHorPgs = .HPageBreaks.Count + 1         sPrtArea = .PageSetup.PrintArea

For iPage = 1 To iPages             iHP = ((iPage - 1) Mod iHorPgs)

iHPNext = iHP + 1             If iHP = 0 Then                 If sPrtArea = "" Then                     lRow = 1                 Else                     lRow = .Range(sPrtArea).Cells(1).Row                 End If             Else                 lRow = .HPageBreaks(iHP).Location.Row             End If             If iHPNext > .HPageBreaks.Count Then                 lRowLast = .Cells(lRow, iColLast).End(xlDown).Row             Else                 lRowLast = .HPageBreaks(iHPNext).Location.Row - 1             End If             .PageSetup.LeftHeader = .Cells(lRow, iCol).Value & _               " - " & .Cells(lRowLast, iColLast)

.PrintOut From:=iPage, To:=iPage, preview:=True         Next     End With End Sub

Когда вы запускаете макрос, он проходит через каждую страницу рабочего листа. Для страницы задаются заголовки, затем печатается одна страница, а затем проверяется и обрабатывается следующая страница.

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

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

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

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

Этот совет (9543) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365. Вы можете найти версию этого совета для старого интерфейса меню Excel здесь:

link: / excel-First_and_Last_Names_in_a_Page_Header [Имя и фамилия в заголовке страницы].