文档目录、页眉和文档章节标题之间插入相互链接的最佳实践

如果我们手里有一个设置了标题样式的Word长文档,只需要在文档中使用“引用”面板的“目录”命令,即可为文档添加目录,此时点击目录项,就会跳转到文档正文中的相应位置。但是点击正文中的标题,却不能跳转到对应的目录项。此外,如果我们希望正文中相应章节页面的页眉也显示章节标题,那么就必须在章节标题前添加分节符,这样才能实现不同章节的页眉互不影响。在每个章节前插入分节符以及给每节添加不同的页眉,并且实现点击每节的标题和页眉也能跳转到目录的相应位置,对于长文档来说,用手工输入肯定是比较困难的。本文介绍以下三个宏实现这一需求。下面的宏对文档规范化的要求是:每个标题的大纲级别是该标题下面所有内容中大纲级别最高的,并且标题不能是空行。
首先在每个指定级别的标题前添加分节符。推荐添加分页型分节符。如果章节较短,添加连续型分节符,如果某一页上靠前的一部分内容属于上一节的正文,中间出现下一节的标题,由于这一节的页眉属于上一节,这一页页眉的内容与页面上的标题就会对应不上。

Sub 指定级别标题前插入分节符()
    Dim pos As Long, styleBodyText$, styleHeading$
    styleBodyText = "正文" '正文文本的样式名
    styleHeading = "标题 3" '要插入分节符的标题的样式名
    outlineHeading = wdOutlineLevel3
    Application.ScreenUpdating = False
    With Selection
        .StartOf wdStory
        Do
            pos = .Start
            .GoToNext wdGoToHeading
            If pos = .Start Then Exit Do
            If .ParagraphFormat.Style = styleHeading Then
                '如果章节较短,可插入连续分节符wdSectionBreakContinuous,
                '否则宜插入分页分节符wdSectionBreakNextPage。
                '推荐使用分页型分节符,这样页眉中的超链接与节标题可以一一对应
                '为了不改变原文档的大纲结构,先将标题降格为正文再插入分节符,然后恢复标题的样式
                .ParagraphFormat.Style = styleBodyText
                .InsertBreak Type:=wdSectionBreakContinuous
                .ParagraphFormat.Style = styleHeading
            End If
        Loop
    End With
    Application.ScreenUpdating = True
End Sub

为文档添加目录可以用手工完成。在正文标题插入超链接时以便于跳转到目录项时,需要提供书签定位目录项,作为超链接的链接目标。一个目录项的构成是“标题文本+前导符+页码”,考虑到目录项与标题段落包含了相同的文本内容,从简化编程的角度考虑可以用标题段落文本作为每个目录项的书签名。如果标题段落里包含空格等不合法的标签名字符,可以考虑使用正则表达式或Selection对象的Find方法里的Replace功能将不合法字符全部替换为空字符,只保留合法字符。要注意VBARplace函数无法使用正则表达式,所以不很适用(本文示例文档标题中不包含非法标签名字符,因此未做处理)。取得标题段落的文本比较简单,从目录项中取得标题文本,则需要找到前导符在目录项文本中的位置,然后使用Left函数截取该位置左边的全部文本。这里的困难在于要找到前导符的位置,却无法直观地用一个字符来表示前导符进行查找(例如,用省略号或者圆点字符并不能找到圆点前导符的位置)。这里可以考虑将前导符的ASCII码传给chr函数,由chr函数将前导符的ASCII码转换为字符。先用鼠标在目录项中选择以前导符开头的若干字符,然后运行如下VBA代码,前导符的ASCII码就会输出到立即窗口中:

Sub Test()
	Debug.Print
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yivifu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值