在A列

时间:2019-06-02 11:33:51

标签: excel vba

您好,我正在VBA中尝试在工作表上每次出现的No.2插入PageBreak。我的工作表可能有1000多个(甚至10.000)行,并使用filter对其进行了过滤:

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

在经过过滤的行上,我必须在单元格包含2号之前插入PageBreak和border(因此,每个新页面都应在A单元格中以“ 2”开头)。

由于我有很多行,所以我无法使用循环(Do While或For-Next),因为这需要花费大量时间。我需要将在过滤的行中插入PageBreak的解决方案。 我尝试使用“针对每个单元格”,但是它不适合我的需求,因为它会扫描范围内的每个单元格...

此外,我尝试使用“ Location.Offset(-1,0).Row”,但是在前5-6次出现2000行或更多行的工作表上,它工作正常,然后失去焦点,然后在2-3行之前失去了PageBreak的位置或在2号单元格之后。

所以,我的问题是循环槽过滤的行以及在每行之前或放置分页符和边框之前有多快

非常感谢

1 个答案:

答案 0 :(得分:0)

请参阅代码注释以获取更多详细信息,但实质上,如果我正确理解了您的要求,则应该这样做:

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