Как разместить заголовок таблицы вверху каждой страницы, если он динамический по горизонтали

В моей таблице все категории находятся в столбце A, начиная с «A3». Следующие столбцы содержат данные, и количество столбцов может меняться при каждом запуске отчета. Строка 1 содержит заголовок диаграммы, а строка 2 — легенду ("A1:G2"). «H1» до конца пусто. Поскольку данные являются динамическими, количество страниц также варьируется. Я хотел бы иметь заголовок и легенду вверху каждой страницы.

Если я укажу строки в настройках страницы, будет выбрана вся строка. Информация, которую мне нужно повторить, находится только в ("A1: G2"). Я не могу скопировать и вставить «A1: G2», потому что я никогда не знаю, сколько страниц у меня будет. Название книги указано в качестве заголовка на всех страницах.

Public Sub testsub()
Dim ws As Worksheet
Dim surf As Worksheet

With surf.PageSetup
    .PrintTitleRows = "$1:$2"
    .PrintTitleColumns = "$A:$A"
End With
Application.PrintCommunication = True
surf.PageSetup.PrintArea = ""

With surf.PageSetup
    .LeftHeader = ""
    .CenterHeader = "Test Workbook"
    .RightHeader = ""
    .LeftFooter = "&D"
    .CenterFooter = "&G"
    .RightFooter = "&P"
    .CenterHorizontally = True
    .CenterVertically = True
End With
Application.PrintCommunication = True

End Sub

Я хотел бы "A1: G2" на каждой странице рабочего листа. Благодарю вас!


person RebaS    schedule 06.08.2019    source источник
comment
Пробовали ли вы использовать Print Titles вручную? Без использования VBA сначала? Он должен работать после правильной настройки.   -  person L42    schedule 06.08.2019
comment
Я пробовал печатать заголовки, но, должно быть, он неправильно настроен. Я ввел $1:$2 в качестве строк для повторения и $A:$A в качестве столбцов для повторения. Это печатает только столбец A слева. Я нашел информацию о том, как печатать строки или столбцы, но не то и другое. Какие-либо предложения?   -  person RebaS    schedule 06.08.2019


Ответы (1)


В этом решении используется событие рабочей книги Workbook_BeforePrint

Скопируйте следующие процедуры в объектный модуль ThisWorkbook вашей книги:

Option Explicit

Private Sub Workbook_BeforePrint(Cancel As Boolean)
    Call Print_Header_Update
    End Sub


Sub Print_Header_Update()
Dim ws As Worksheet, vpb As VPageBreak, rHdr As Range, rg As Range
    Set ws = ThisWorkbook.Worksheets("DATA")                        'Update as required
    With ws
        Set rHdr = .Range("B1:G2")                                  'Update as required
        Set rg = rHdr.Columns(8).Resize(2, -8 + .Columns.Count)     'Update as required
        rg.ClearContents
        For Each vpb In ws.VPageBreaks
            rHdr.Copy
            vpb.Location.Cells(1).PasteSpecial
            Application.CutCopyMode = False
            Selection.EntireColumn.AutoFit                          'This might require fine-tuning
    Next: End With
    End Sub

подробную информацию см.:

событие Workbook.BeforePrint (Excel),
свойство Worksheet.VPageBreaks (Excel),
Свойство Range.Resize (Excel ),
Range.AutoFit метод (Excel)

person EEM    schedule 06.08.2019