我正在开展一个项目,其中我读取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
答案 0 :(得分:1)
当您使用Auto_Open时,没有任何价值,因为您不是来自另一个页面,或者甚至在分配这些变量时都有一个页面。
你可以内置一个if语句来处理那些都是零的情况。基本上,处理使用Auto_Open的情况。因为在任何其他情况下,那里都会有价值。