【问题标题】:Insert page breaks in Excel to split data for printing .pdf在 Excel 中插入分页符以拆分数据以打印 .pdf
【发布时间】:2016-02-13 22:05:19
【问题描述】:

我正在使用可以包含动态行的 Excel 文件。我将它导出为 .pdf 并且效果很好。问题是所有内容都在 .pdf 文件的一个页面上。

是否可以在我的 .pdf 文件的 VBA 中插入分页符?

编辑:这是我的分页代码。似乎无法正常工作

If count > 30 Then ' count is the number of row. Break at every 15 rows
        Set ws = Range("A1", "K" & count) 'The range of the document
        Dim ii As Integer
        ii = 21 ' first page break
        While count > 0
            If count > 15 Then ' no page break if there is less than 15 rows
             ws.Rows(ii).EntireRow.PageBreak = xlPageBreakManual
            End If               
            ii = ii + 15
            count = count - 15
        Wend
End If

编辑 2: 我没有找到任何方法在 pdf 文件中创建分页符。但是,我仍然解决了我的问题。我只是为 vba 找到一个模块来运行外部进程并等待它们。是ShellAndWait

我将 pdf 文件的每一页都保存为临时文档,并将其路径/名称发送到我创建的 C# 控制台应用程序。我正在使用库 PDFsharp 来处理 pdf 文档,然后将它们合并到 1 个文件中。

希望它可以帮助某人。

【问题讨论】:

    标签: vba excel pdf printing


    【解决方案1】:

    您可以像这样设置分页符:

    Worksheets("Sheet1").HPageBreaks.Add Before:=Worksheets("Sheet1").Rows(25)
    Worksheets("Sheet1").VPageBreaks.Add Before:=Worksheets("Sheet1").Columns("J")
    
    Worksheets("Sheet1").Rows(25).PageBreak = xlPageBreakManual
    Worksheets("Sheet1").Columns("J").PageBreak = xlPageBreakManual
    

    仅供参考,我没能让Range.PageBreak 工作

    或者对于一个范围,类似这样:

    With Range(blabla)
        .Rows(.Rows.Count).EntireRow.PageBreak = xlPageBreakManual
        '.Rows(Int(.Rows.Count/2)).EntireRow.PageBreak = xlPageBreakManual
        .Columns(.Columns.Count).EntireColumn.PageBreak = xlPageBreakManual
    End With
    

    这是您更正后的代码:

    Sub test_Wanceslas()
    Dim Ws As Worksheet, _
        Rg As Range, _
        LastRow As Long, _
        Count As Long, _
        ii As Long
    
    ii = 21 ' first page break
    Set Ws = ActiveSheet
    
    With Ws
        LastRow = .Range("A" & .Rows.Count).End(xlUp).Row
        Count = LastRow
        Set Rg = .Range("A1", "K" & Count) 'The range of the document
    
        If LastRow > 30 Then ' count is the number of row. Break at every 15 rows
            .ResetAllPageBreaks
            .PageSetup.PrintArea = Rg.Address
    
            While Count > 0 And ii < LastRow
                If Count > 15 Then ' no page break if there is less than 15 rows left
                    '.Rows(ii).PageBreak = xlPageBreakManual
                    .HPageBreaks.Add Before:=.Rows(ii)
                End If
                ii = ii + 15
                Count = Count - 15
            Wend
        End If
    End With
    
    End Sub
    

    【讨论】:

    • 实际上,我正在将一个范围导出为 pdf,因为我不想导出整个工作表。工作表中有我不想在 pdf 文件中看到的额外按钮。似乎分页符不适用于范围...
    • 看看编辑,你只需要在你的范围内工作! ;)
    • 谢谢,但还是不行。我已经编辑了我的帖子并添加了我的代码,如果你能看到任何东西的话。
    • 我似乎无法使Range.PageBreak 工作,但我更正了您的代码并包含了其他设置分页符的方法! ;)
    • 感谢您更正我的代码。实际上范围很好,但我仍然遇到同样的问题。我的 pdf 文件中没有分页符。我开始考虑制作超过 1 个 pdf 文件,然后将它们合并在一起,哈哈
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 2015-01-30
    • 1970-01-01
    • 2013-01-19
    相关资源
    最近更新 更多