Самый быстрый способ вставить несколько разрывов страниц в Excel с VBA - PullRequest
0 голосов
/ 28 февраля 2019

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

 With shtBagCheckList
    .Cells.PageBreak = xlPageBreakNone
    For i = 13 To lngArrayRows Step 12
        .Cells(i, 1).PageBreak = xlPageBreakManual

    Next i
End With

Метод, который я иногда использую для применения форматирования, состоит в объединении всех диапазонов, которые требуют одинакового форматирования, в один диапазон, а затем применяет форматирование к объединенному диапазону.Например:

Set rngToBold = Union(rngToBold, Rng2) 'etc in a loop
rngToBold.Font.Bold = True

Но при этом с разрывами страниц разрыв применяется только к первому элементу в диапазоне.Например, при выполнении нижеприведенного только создайте разрыв страницы в строке 12, а не в 24

set rng = range("A12", "A24")
rng.PageBreak = xlPageBreakManual

Какой самый быстрый способ добавить много разрывов страницы на лист?

Обновить Вот результаты, которые я получил, используя советы от пользователя11121185 и Тима Уильямса.Оказывается, использование HpageBreaks.add намного быстрее

1 rng.Page Break, calculation on: 20.594 (45%)  
2 rng.Page Break,  calculation off: 13.219 (29%)  
3 rng.Page Break, calculation off, display breaks off: 11.922 (26%)  
4 hbreaks.add,calculation on: 0.018 (0%)  
5 hbreaks.add, calculation off : 0.203 (0%)  
6 hbreaks.add, calculation off, display page breaks off: 0.312 (1%)  
Total Time: 46.267  

(отключение расчета означает автоматическое вычисление и обновление экрана отключено)

Использование выглядит следующим образом:

sheet.HPageBreaks.Add sheet.range("A10")

Или:

 With shtBagCheckList
    .Cells.PageBreak = xlPageBreakNone
    For i = 13 To lngArrayRows Step 12
        .HPageBreaks.Add .Cells(i, 1)

    Next i
 End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...