Вставьте PageBreak для каждого вхождения в столбце A - PullRequest
1 голос
/ 02 июня 2019

Здравствуйте, я пытаюсь в VBA вставить PageBreak при каждом появлении № 2 на листе. Мои таблицы могут содержать более 1000 (даже 10.000) строк, и я отфильтровал их с помощью фильтра:

    ActiveSheet.Range("$A$1:$Q$443").AutoFilter Field:=1, Criteria1:="2", Operator:=xlAnd

В отфильтрованные строки мне нужно вставить PageBreak и рамку, чтобы ячейка содержала номер 2 (поэтому каждая новая страница должна начинаться с "2" в ячейке A).

Поскольку у меня много строк, я не мог использовать цикл (Do While или For-Next), потому что это занимает огромное время. Мне нужно решение, которое вставит PageBreak в отфильтрованных строках. Я пробовал с «для каждой ячейки», но он не подходит для моих нужд, потому что он сканирует все ячейки в диапазоне ...

Кроме того, я пробовал с «Location.Offset (-1, 0) .Row», но на листах с 2000 или более строками для первых 5-6 экземпляров он работает нормально, а затем теряет фокус и место PageBreak на 2-3 строки раньше или после ячейки, где № 2.

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

Спасибо за добавление

1 Ответ

0 голосов
/ 02 июня 2019

Пожалуйста, смотрите комментарии к коду для более подробной информации, но по сути, если я правильно понял, что вы спрашиваете, это должно сделать:

Sub addPageBreaks()

Dim ws As Worksheet: Set ws = ActiveWorkbook.ActiveSheet '.Sheets("sheet name")
Dim lRow As Long: lRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row 'get last row

Dim arrData: arrData = ws.Range("A1:A" & lRow) 'assign the first column to an array
Dim R As Long

For R = LBound(arrData) To UBound(arrData) 'iterate through the first column data
    If arrData(R, 1) = "2" Then 'or 2 ? 'if there is a match
        ws.Rows(R).PageBreak = xlPageBreakManual 'add the page break
    End If
Next R

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