当从Auto_Open调用宏时,excel vba HPageBreak.Count无效

时间:2014-10-26 06:24:19

标签: excel-vba office-2013 vba excel

我正在开展一个项目,其中我读取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

1 个答案:

答案 0 :(得分:1)

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

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