我手动移动了 Excel 工作表中的分页符,并在此过程中记录了以下宏,因为我想自动化它:
Sub RecordedMacro()
'
' RecordedMacro Macro
'
Set ActiveSheet.HPageBreaks(1).Location = Range("A71")
End Sub
运行此录制的宏会失败,并出现错误 1004(“应用程序定义的或对象定义的错误”),即使使用活动工作表,我可以手动执行此操作,不会出现任何问题。
我做了一些互联网搜索,似乎大多数人最终都使用 HPageBreaks.Add 而不是更改分页符的位置,但我想知道为什么这个宏失败以及是否有办法让它工作,因为我看不到引发错误的原因。
编辑: 以下行也失败并显示 1004:
Set ActiveSheet.HPageBreaks(1).Location = ActiveSheet.HPageBreaks(1).Location
我的答案与您发现的略有不同,并且不需要
ResetAllPageBreaks
。此外,这个切换 ScreenUpdating
以避免来回闪烁:
Sub MoveThatHBreak()
Application.ScreenUpdating = False
ActiveWindow.View = xlPageBreakPreview
Set ActiveSheet.HPageBreaks(1).Location = Range("A11")
ActiveWindow.View = xlNormalView
Application.ScreenUpdating = True
End Sub
这是在 Excel 2016 中。我偶然发现了这个答案,因为我只能在分页预览中记录移动,所以我想在 VBA 中可能也是如此。
我找到了解决方案。我试图思考手动设置分页符和通过 VBA 设置分页符在我的情况下有什么区别,由于我不完全理解的原因,我真的必须首先切换 view:
Sheets(sheetName).Activate
ActiveWindow.View = xlPageBreakPreview
Sheets(sheetName).ResetAllPageBreaks
Set Sheets(sheetName).HPageBreaks(1).Location = ActiveSheet.Range("A71")
ActiveWindow.View = xlNormalView
这对我来说没有多大意义,因为 HPageBreaks 集合上的所有其他操作都不需要先更改视图,但如果 Excel 需要它,我会这样做:)。
评论:答案对我不起作用,但就我而言,问题是我的分页符位于打印区域之外。 我就这样修好了
With Sheets("sheet2").PageSetup .PrintArea = "A1:BB1000" 结束于
对于所有专业人士来说可能微不足道。可能还有更优雅的解决方案。