我手动在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
答案 0 :(得分:1)
我找到了解决方案。我试着想一想手动设置分页符和通过VBA设置它之间的区别在于我的情况,并且由于我不完全理解的原因,我真的必须首先切换视图:
Sheets(sheetName).Activate
ActiveWindow.View = xlPageBreakPreview
Sheets(sheetName).ResetAllPageBreaks
Set Sheets(sheetName).HPageBreaks(1).Location = ActiveSheet.Range("A71")
ActiveWindow.View = xlNormalView
这对我来说没什么意义,因为HPageBreaks集合上的所有其他操作都在不改变视图的情况下工作,但如果Excel需要它,我会这样做:)。
答案 1 :(得分:1)
我的回答与您发现的回答略有不同,并且不需要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中也是如此。