Excel VBA打印脚本无法覆盖现有页眉页脚问题求助
解决Excel VBA无法覆盖已有页眉页脚的问题
我完全懂你的烦恼——每次运行宏前手动删页眉页脚实在太麻烦了。问题的核心在于:哪怕你设置了主页眉页脚,Excel可能还残留着奇偶页专属或首页专属的页眉页脚配置(哪怕你后来把OddAndEvenPagesHeaderFooter和DifferentFirstPageHeaderFooter设为False),这些旧设置会优先显示,导致你的新配置被覆盖。
这里有两种可靠的解决方案,帮你彻底摆脱手动操作:
方法1:一键重置所有页面设置(最彻底)
Excel的PageSetup对象自带ResetAllPageSettings方法,能一键清空所有打印相关设置,回到默认状态。在代码开头加这一行,就能确保旧的页眉页脚和打印配置被完全清除。
修改后的完整代码如下:
Sub PrintWithCustomHeaderFooter() ' 先重置所有页面设置,彻底清除旧配置 ActiveSheet.PageSetup.ResetAllPageSettings Application.PrintCommunication = False Application.Dialogs(xlDialogPrinterSetup).Show With ActiveSheet.PageSetup ActiveWindow.View = xlPageBreakPreview ActiveSheet.PageSetup.PrintArea = "$A:$N" .PrintTitleRows = "$1:$1" .PrintTitleColumns = "" End With Application.PrintCommunication = True ActiveSheet.PageSetup.PrintArea = "" Application.PrintCommunication = False With ActiveSheet.PageSetup ' 自定义主页眉页脚 .LeftHeader = "" .CenterHeader = "Project X" .RightHeader = "" .LeftFooter = Sheets("instellingen").Cells(20, 2).Value .CenterFooter = ActiveSheet.Name & Chr(10) & Format(Sheets("instellingen").Cells(22, 2).Value, "dd-MM-yyyy") .RightFooter = "Pagina &P van de &N" ' 其他打印配置 .LeftMargin = Application.InchesToPoints(0.7) .RightMargin = Application.InchesToPoints(0.7) .TopMargin = Application.InchesToPoints(0.75) .BottomMargin = Application.InchesToPoints(0.75) .HeaderMargin = Application.InchesToPoints(0.3) .FooterMargin = Application.InchesToPoints(0.3) .PrintHeadings = False .PrintGridlines = False .PrintComments = xlPrintNoComments .PrintQuality = 600 .CenterHorizontally = False .CenterVertically = False .Orientation = xlLandscape .Draft = False .PaperSize = xlPaperA4 .FirstPageNumber = xlAutomatic .Order = xlDownThenOver .BlackAndWhite = False .Zoom = False .FitToPagesWide = 1 .FitToPagesTall = False .PrintErrors = xlPrintErrorsDisplayed .OddAndEvenPagesHeaderFooter = False .DifferentFirstPageHeaderFooter = False .ScaleWithDocHeaderFooter = True .AlignMarginsHeaderFooter = True ' 额外保险:清空所有特殊页的页眉页脚(防止残留) .EvenPage.LeftHeader.Text = "" .EvenPage.CenterHeader.Text = "" .EvenPage.RightHeader.Text = "" .EvenPage.LeftFooter.Text = "" .EvenPage.CenterFooter.Text = "" .EvenPage.RightFooter.Text = "" .FirstPage.LeftHeader.Text = "" .FirstPage.CenterHeader.Text = "" .FirstPage.RightHeader.Text = "" .FirstPage.LeftFooter.Text = "" .FirstPage.CenterFooter.Text = "" .FirstPage.RightFooter.Text = "" End With Application.PrintCommunication = True ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False End Sub
方法2:针对性清空所有页眉页脚区域
如果你不想重置全部页面设置(比如想保留部分原有配置),可以在设置自定义内容前,主动清空所有可能存储页眉页脚的区域:
With ActiveSheet.PageSetup ' 清空主页眉页脚 .LeftHeader = "" .CenterHeader = "" .RightHeader = "" .LeftFooter = "" .CenterFooter = "" .RightFooter = "" ' 清空奇偶页专属页眉页脚 .EvenPage.LeftHeader.Text = "" .EvenPage.CenterHeader.Text = "" .EvenPage.RightHeader.Text = "" .EvenPage.LeftFooter.Text = "" .EvenPage.CenterFooter.Text = "" .EvenPage.RightFooter.Text = "" .OddPage.LeftHeader.Text = "" .OddPage.CenterHeader.Text = "" .OddPage.RightHeader.Text = "" .OddPage.LeftFooter.Text = "" .OddPage.CenterFooter.Text = "" .OddPage.RightFooter.Text = "" ' 清空首页专属页眉页脚 .FirstPage.LeftHeader.Text = "" .FirstPage.CenterHeader.Text = "" .FirstPage.RightHeader.Text = "" .FirstPage.LeftFooter.Text = "" .FirstPage.CenterFooter.Text = "" .FirstPage.RightFooter.Text = "" ' 关闭特殊页差异设置 .OddAndEvenPagesHeaderFooter = False .DifferentFirstPageHeaderFooter = False End With
把这段代码放在你设置自定义页眉页脚的逻辑之前,就能确保旧设置被完全清除。
为什么你的原代码会失效?
哪怕你在代码末尾关闭了OddAndEvenPagesHeaderFooter和DifferentFirstPageHeaderFooter,如果工作表之前开启过这些选项,Excel会保留对应的页眉页脚内容。当你关闭这些选项后,Excel可能仍然优先显示之前存储的首页/奇偶页内容,直到你主动清空它们。
通过上面两种方法,就能彻底规避这个问题啦。
内容的提问来源于stack exchange,提问作者Tefalpan
相关产品推荐
相关产品推荐

