我正在研究一个项目,在该项目中,我读取了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
调用宏时,PageNum
和Auto_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的情况。因为在任何其他情况下,那里都会有一个值。