Как вставить разрывы страниц, чтобы объединить определенные диапазоны данных? - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь создать ежемесячный отчет для своей компании, и у меня проблемы с его эстетикой. У меня есть таблицы (с большим количеством данных), которые выглядят так:

введите описание изображения здесь

по тексту выглядит так (если изображение недоступно)

Клиент 1 - 2018 - ### - # 33

Клиент 2 - 2017 - ### - ###

---------------- 2018 - ### - ###

Клиент 3- 2018 - ### - ### и т.д.

но иногда происходит разрыв страницы в середине данных клиента, так что заголовок отображается на первой странице, а последние строки на новой странице.

Я пытаюсь придумать код, чтобы определить, будет ли разделен диапазон данных, но я не могу. Я подумал, что, возможно, разрыв страницы можно ожидать по номеру строки (как, например, я группирую данные), но один лист имеет разрыв в строке 101 (потому что эти данные начинаются со строки 46), а другой - разрыв строки в строке. 106.

Я пытался сделать что-то похожее на это:

If i >= 102 And start.row <= 101 Then
Worksheets(storenumber).HPageBreaks.Add before:=Rows(start.row)
Else
If i >= 176 And start.row <= 166 Then
Worksheets(storenumber).HPageBreaks.Add before:=Rows(start.row)
End If
End If

(с разными i = числами и комбинациями), но я не добился успеха.

У кого-нибудь еще есть другие идеи? как правило, на один лист хранится только один разрыв страницы, за исключением одного листа. (и некоторые листы не нуждаются в разрыве страницы, так как говорят только 5 клиентов)

Я ищу более простой код (превосходный новичок / средний), но я открыт для любых идей. Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 05 июля 2018

Мне кажется, этот код работает:

Option Explicit

Sub BreakPagesCleanly()
Dim pb As HPageBreak
Dim rng As Range
Dim i As Long

ActiveWindow.View = xlPageBreakPreview
ActiveSheet.ResetAllPageBreaks
For Each pb In ActiveSheet.HPageBreaks
    If pb.Location.Value = "" Then
        'go back to the last value
        Set rng = pb.Location.End(xlUp)
        ActiveSheet.HPageBreaks.Add before:=rng
        DoEvents 'Seems to be required to give Excel time to catch up
    End If
Next pb

End Sub

Вот вид перед, против после:

enter image description here enter image description here

...