以编程方式在MS Word文档的标题中添加节标题

时间:2016-06-13 07:58:41

标签: vba ms-word word-vba word-automation

我正在寻找一种方法,以编程方式将当前部分的标题添加到word文档中每个页面的标题中。我发现this page解释了如何访问和修改标头。阅读此链接后我的理解是,要在每个页面上添加不同的内容,您需要添加正确的字段。现在我一直在寻找这个领域而没有成功。 This other page提供了一个字段列表,wdFieldSection看起来非常有前景,但它在我的文档中没有用(它在每页上添加了#34; 1")。

1 个答案:

答案 0 :(得分:2)

实现此目的的直接(和推荐)方法是在标题中使用STYLEREF字段,该字段指向用于格式化节标题的样式。

为您提供更大灵活性的另一个选项是为相应内容添加交叉引用。下面的示例在节标题周围添加(隐藏)书签,然后在标题中添加对该书签的交叉引用(如果您需要相应调整的第一页/偶数页/奇数页的任何特定标题):

Sub AddSectionTitlesToHeader()

    Dim oSection As Section

    For Each oSection In ActiveDocument.Sections
        Dim oRangeTitle As Range
        Dim oRangeHeader As Range
        Dim bmName As String

        ' make sure to use a different header for each section
        oSection.PageSetup.DifferentFirstPageHeaderFooter = False
        oSection.PageSetup.OddAndEvenPagesHeaderFooter = False
        oSection.Headers(wdHeaderFooterPrimary).LinkToPrevious = False

        ' add a bookmark around the section title
        ' (this assumes the title is in the section's
        ' first paragraph, adjust accordingly)
        Set oRangeTitle = oSection.Range.Paragraphs.First.Range
        bmName = "_bmSectionTitle" & oSection.Index
        oRangeTitle.Bookmarks.Add bmName, oRangeTitle

        ' add a cross reference in the header
        Set oRangeHeader = oSection.Headers(wdHeaderFooterPrimary).Range
        oRangeHeader.InsertCrossReference _
            ReferenceType:=WdReferenceType.wdRefTypeBookmark, _
            ReferenceKind:=WdReferenceKind.wdContentText, _
            ReferenceItem:=bmName
    Next

End Sub