VB for Excel - 如何控制 sheet 中数据集之间的空行数?

VB for Excel - How do you control the number of empty rows between sets of data in a sheet?

我正在尝试打印 sheet 中的特定列,该列的数据沿行聚集。抱歉大小,但下面的 table 显示了数据如何在第一列中具有它的名称,相关数据在第 2 列和第 3 列中。我已经在这一点之前删除了不必要的列。

重要的部分是集群中的行数和集群之间的空行数如何随机变化。

Header Header Header
DataLine1 DataLine1 DataLine1
DataLine2 DataLine2
DataLine3
DataLine4
DataLine7 DataLine7 DataLine7
DataLine8
DataLine9
DataLine10
DataLine12 DataLine12 DataLine12
DataLine13
DataLine14
DataLine19 DataLine19 DataLine19
DataLine20
DataLine21
DataLine22
DataLine24 DataLine24 DataLine24
DataLine25 DataLine25
DataLine26
DataLine27

这些东西有数百行。

这在打印时看起来很糟糕,而且让我很难对分页符的位置进行编程(保持页面上的簇的完整性)。因此,我想以编程方式编辑 worksheet 以使集群之间的每个间隙成为三个空行的间隙。这样我就可以在三行间隙的中间设置分页符,以便在打印输出时看起来更漂亮。

麻烦的是,我想我已经超出了我的理解范围。我想我需要设置三个(更多?)不同的计数器,并在每次添加或删除一行时让整个 Sub 重新启动......有些例子是这样做的,但我应该如何处理重置而不浪费检查周期行数?

如果有人能为我指出代码示例或可靠的攻击计划的正确方向,那就太棒了。

(或者告诉我,以这种方式解决分页符我疯了)

向上扫描 sheet 删除多个空行,留下一个。然后向下扫描 sheet 根据需要在空行处添加手动分页符。调整 MAXROWS 以适合页面。

Option Explicit

Sub mymacro()

    Const MAXROWS = 40

    Dim ws As Worksheet
    Dim lastrow As Long, r As Long, n As Integer
    Dim break As Long, count As Long

    Set ws = Sheet1
    lastrow = ws.Cells(Rows.count, 3).End(xlUp).Row

    ' remove existing page breaks if any
    ws.Cells.PageBreak = xlPageBreakNone

    ' delete all except 1 empty row
    Application.ScreenUpdating = False
    For r = lastrow To 2 Step -1
        If Len(ws.Cells(r, 3)) = 0 And Len(ws.Cells(r - 1, 3)) = 0 Then
            ws.Rows(r).Delete
        End If
    Next

    ' add manual page breaks
    lastrow = ws.Cells(Rows.count, 3).End(xlUp).Row
    count = 0
    For r = 1 To lastrow
        count = count + 1
        If Len(ws.Cells(r, 3)) = 0 Then
            break = r
        End If

        If count > MAXROWS Then
            ws.Rows(break + 1).PageBreak = xlPageBreakManual
            count = r - break
            n = n + 1
        End If

    Next
    Application.ScreenUpdating = True
    MsgBox n & " psge breaks inserted"
End Sub