【问题标题】:VBA: Page break only after certain rowsVBA:仅在某些行之后分页
【发布时间】:2023-03-13 22:38:01
【问题描述】:

我在 Excel 中使用宏自动填充 Excel。生成的工作表可能如下所示:

|1. TOYS-----------|

|LEGO--------------|

|Product 1|199,99--|

|Product Text------|

|Product 2|299,99--|

|Product Text------|

|MARVEL------------|

|Product 3|79,99---|

|Product Text------|

|2. FOOD-----------|

|Vegetables--------|

|Product 4|9,99----|

|Product Text------|

|Product 5|2,99----|

|Product Text------|

当我打印此列表时,分页符是随机创建的,并且可能会贯穿文章(即第 1 页上的名称和价格,第 2 页上的文本)。

如何告诉宏只允许在包含“产品文本”的行之后分页。不幸的是,我不能告诉他每 x 行执行一次,因为由于分组行,步骤并不总是相同。

谢谢

【问题讨论】:

  • 仅将|Product Text------| 保留为第一行(删除所有其他匹配项),然后设置“页面布局 -> 工作表 -> 在顶部重复的行”选择第一行

标签: vba excel page-break


【解决方案1】:

粘贴“产品文本”块后,检查您所在的行,并将其分配给变量TarRow。然后使用这个:

Worksheets("Sheet1").Rows(TarRow).PageBreak = xlPageBreakManual

我假设您在工作表 1 上并且有一个循环,所以如果您将它插入到循环中,它将适用于所有产品?

为了以后,请记住,最好还是举个例子,这样我们才能看到代码。

【讨论】:

  • 感谢您的反馈。但是,这不会在每个产品之后添加换行符吗?我希望分页符是动态的(即,每当需要它们来填充页面时),但限制只能出现在详细信息行之后
  • 更难...因为在 excel 中,“何时需要”本身就是动态的。也许您可以指定一些缓冲区并说“在您看到详细信息行之后,您可以插入 10 行的分页符”?
【解决方案2】:

试试这个:

Sub add_HPBreak()

Dim HPBreak As HPageBreak
Dim i As Long, lastrow As Long


'set your last row as required
lastrow = ActiveSheet.Rows.Count + 1
ActiveWindow.View = xlPageBreakPreview

For i = 1 To lastrow

        For Each HPBreak In ActiveSheet.HPageBreaks
        'assuming product text string is in column 1
        If InStr(ActiveSheet.Cells(i, 1).Value, "product text") > 0 Then
            ActiveSheet.Cells(i, 1).EntireRow.Select
            ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell

        End If

    Next

Next

ActiveWindow.View = xlNormalView


End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-05
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 1970-01-01
    • 2016-10-30
    相关资源
    最近更新 更多