2016-06-13 2 views
1

Я ищу способ программно добавить заголовок текущего раздела в заголовок каждой страницы в текстовом документе. Я нашел this page, в котором объясняется, как получить доступ и изменить заголовок. Мое понимание после прочтения этой ссылки состоит в том, что для каждой страницы нужно добавить что-то другое, чтобы добавить нужное поле. Теперь я искал это поле без успеха. This other page дает список полей, а wdFieldSection выглядит очень многообещающим, но он не работает в моем документе (он добавляет «1» на каждую страницу).Программно добавляя заголовки разделов в заголовок документа MS Word

ответ

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 
Смежные вопросы