我正在研究一个项目,在该项目中,我读取了CSV文件,将数据格式化为临时工作表(OutputSheet),将格式化后的数据复制粘贴到要打印的工作表(PrintSheet),在插入手动分页符后将PrintSheet保存为PDF,这样数据块不会在页面之间拆分。
我在Excel VBA宏函数中执行此操作。这是代码的相关部分:

PrevPageNum = PrintSheet.HPageBreaks.Count

OutputSheet.Rows("6:" & (CurrHistoryRows + 14)).Copy

PrintSheet.Cells(PrtPstStRow, 1).PasteSpecial Paste:=xlPasteFormats
PrintSheet.Cells(PrtPstStRow, 1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
Application.CutCopyMode = False

PageNum = PrintSheet.HPageBreaks.Count

If PrevPageNum < PageNum Then
    PrintSheet.Rows(PrtPstStRow).PageBreak = xlPageBreakManual
End If

当我直接从代码内或从“快速访问”工具栏中的分配按钮直接调用宏时,手动分页符已正确分配。但是,当我从Auto_Open调用此宏时,它们根本没有分配(其他所有东西都保持不变!)。调试代码后,我注意到从PrevPageNum调用宏时,PageNumAuto_Open始终为零。在其他两种情况下,值会更改。

还想提到PrintSheet在页面布局中的宽度已缩放为1 Page

任何想法请!
谢谢。
Update:我在PrintSheet.HPageBreaks.Count之前添加了这些语句,分页符也从Auto_Open开始工作。
OutputSheet.Activate
PrintSheet.Activate

FINAL Update:
当我在“慢速”计算机(处理器-具有3GB DDR2 RAM的i3)上运行此文件时,我又遇到了跳过分页符的相同问题。经过一番环顾后,终于找到了成功率为100%的解决方案(或解决方法)。
您需要垂直滚动到最后使用的行,以便HPageBreaks Collection刷新Count。最终代码如下:
PrintSheet.Activate
CurrentRowNum = ActiveWindow.ScrollRow
ActiveWindow.ScrollRow = 5000 'or the last used row
PageNum = PrintSheet.HPageBreaks.Count
ActiveWindow.ScrollRow = CurrentRowNum

最佳答案

使用Auto_Open时,没有任何价值,因为您不是来自另一个页面,甚至在分配这些变量时还没有页面。

您可以内置一个if语句来处理它们均为零的情况。基本上,处理使用Auto_Open的情况。因为在任何其他情况下,那里都会有一个值。

10-06 04:40