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