乐于分享
好东西不私藏

别再手工改了!Word导入长文档,页眉页脚全乱?用这招秒级搞定

别再手工改了!Word导入长文档,页眉页脚全乱?用这招秒级搞定

在编辑文档的过程中,有时需要从其他文档引用资料,便捷的方法是使用“插入”-“对象”-“文件中的文字”,快速导入其他文章内容。

但是,其他文档通常会带有页眉和页脚。复制过来的内容很有可能将原文档的页眉或页脚一并带过来,这样就与当前文档的页眉、页脚不统一了。如果只有短短几页,手工修改还算比较快。但如果导入的文章内容很多,就会涉及大量页眉页脚需要逐一调整。显然,手工修改的方式非常低效。

这种情况下,就不要试图用手工修改,而是利用 Word 自带的 VBA功能来实现。

复制代码

Sub CopyHeaderFooterFromCustomSection()    Dim startSecNum As Variant    Dim baseSec As Section    Dim currentSec As Section    Dim i As Integer, j As Integer    Dim totalSections As Integer    totalSections = ActiveDocument.Sections.Count    ' 1. 弹窗询问正文的起始节数    startSecNum = InputBox("当前文档共有 " & totalSections & " 个节。" & vbCrLf & _                           "请输入【正文开始】的节号(例如正文在第3节,就输入3):", "指定正文起始节", "2")    ' 检查用户是否取消了输入或输入留空    If startSecNum = "" Then Exit Sub    ' 检查输入是否合法    If Not IsNumeric(startSecNum) Then        MsgBox "请输入有效的数字!", vbCritical        Exit Sub    End If    Dim baseIndex As Integer    baseIndex = CInt(startSecNum)    If baseIndex < 1 Or baseIndex > totalSections Then        MsgBox "输入的节号超出范围!", vbCritical        Exit Sub    End If    If baseIndex = totalSections Then        MsgBox "您选择的是最后一节,后面已经没有需要同步的节了。", vbExclamation        Exit Sub    End If    ' 2. 开始执行同步逻辑    Application.ScreenUpdating = False    ' 以你指定的这一节作为基准    Set baseSec = ActiveDocument.Sections(baseIndex)    ' 从基准节的“下一节”开始遍历到文档末尾    For i = (baseIndex + 1) To totalSections        Set currentSec = ActiveDocument.Sections(i)        ' 统一页面设置        currentSec.PageSetup.DifferentFirstPageHeaderFooter = baseSec.PageSetup.DifferentFirstPageHeaderFooter        currentSec.PageSetup.OddAndEvenPagesHeaderFooter = baseSec.PageSetup.OddAndEvenPagesHeaderFooter        ' 复制页眉        For j = 1 To 3            currentSec.Headers(j).LinkToPrevious = False            currentSec.Headers(j).Range.FormattedText = baseSec.Headers(j).Range.FormattedText        Next j        ' 复制页脚        For j = 1 To 3            currentSec.Footers(j).LinkToPrevious = False            currentSec.Footers(j).Range.FormattedText = baseSec.Footers(j).Range.FormattedText        Next j    Next i    Application.ScreenUpdating = True    ActiveDocument.ActiveWindow.View.Type = wdPrintView    MsgBox "处理完成!已成功将第 " & baseIndex & " 节的页眉页脚同步到后面所有节。" & vbCrLf & _           "第 " & baseIndex & " 节之前的页面(如目录、封面)已完美保留,未受影响。", vbInformationEnd Sub

使用说明:

如果界面没有“开发工具”菜单,那么在菜单“文件”-“选项”-“自定义功能区”-右侧勾选“开发工具”。

在开发工具下方的功能区中,点击 Visual Basic

进入编辑器,点击“插入”-选择“模块”

将代码粘贴到模块窗口中

直接按F5运行代码

在弹出的对话框中输入正文起始节号。比如2或者3,确定,等待运行结束即可。

代码说明:

考虑到有些文档的目录或者封面页眉页脚与正文不同,因此在代码中加入了选择正文起始节的功能。在输入了中文起始节的节号之后,就可以以正文的页眉页脚为标准,统一后面所有节的页眉页脚。

代码运行后会弹出一个输入框,问你:“正文是从第几节开始的?”

假设第1节是封面,第2节是目录,第3节才是正文。你只需输入 3

代码就会以第3节为基准,把第3节的页眉页脚同步给第4节、第5节……直到最后一节。而第1节(封面)和第2节(目录)将完好无损,不受任何影响。

总结

因为长文档的封面、目录排版各不相同(有时候目录占1节,有时候目录和封面在同一节),手动输入起始节在实际工作中最不易出错。你只需要在 Word 底部状态栏看一眼正文是第几节(如果状态栏没显示,右键状态栏勾选“节”即可),然后输入对应的数字,就能完美保护目录的同时搞定后面所有的正文页。

封面由ai生成

如果你觉得这篇文章对你有帮助的话,不妨关注一下公众号👇

也可以分享给你的朋友。