Обновление Оглавления

Текущая ситуация

В шаблоне отчета стандартными средствами может быть вставлено Оглавление - содержание документа с указанием разделов и их страниц. При обработке документа макросом может возникнуть смещение заголовков с исходных страниц. Данные о номерах страниц в Оглавлении останутся не обновлёнными сразу после формирования отчета.

Постановка задачи

Необходимо, чтобы после выполнения макроса Оглавление в документе полностью соответствовало  истинному положению заголовков на страницах.

Исходные данные

Решение описывается с момента, когда уже есть некоторый отчет со своим макросом. В шаблоне отчета задано Оглавление.

Рисунок 1. Вид Оглавления в шаблоне отчета

Концепция решения

Вместо того чтобы обновлять существующее Оглавление, в конце выполнения макроса сделаем добавление Оглавления в указанное место в документе. Имеющееся же Оглавление в шаблоне отчета удаляем.

Шаги решения 

Перед местом вставки Оглавления вставляем закладку с названием "Оглавление".

Удаляем текущее поле вставки Оглавления.

Рисунок 2. Вид места вставки Оглавления
Sub ПослеВыполненияОтчета(ob As Variant, app As Variant)
    
'Вводная часть
    
    ContentsBkmName = "Оглавление" 'Название закладки, определяющее место вставки
     
      
    'Код другой части макроса

'Процедурная  часть
    
     
    'Код другой части макроса
     
     
    'ВСТАВКА ОГЛАВЛЕНИЯ В КОНЦЕ МАКРОСА
     
    'Переходим к подготовленной закладке
    Selection.GoTo What:=wdGoToBookmark, Name:=ContentsBkmName
 
   'Непосредственное добавление Оглавления
   'Уровень Заголовков 1 и 2
    With ActiveDocument
        .TablesOfContents.Add _
            Range:=Selection.Range, _
            RightAlignPageNumbers:=True, _
            UseHeadingStyles:=True, _
            UpperHeadingLevel:=1, _
            LowerHeadingLevel:=2, _
            IncludePageNumbers:=True, _
            AddedStyles:="", _
            UseHyperlinks:=True, _
            HidePageNumbersInWeb:=True, _
            UseOutlineLevels:=True
        .TablesOfContents(1).TabLeader = wdTabLeaderDots
        .TablesOfContents.Format = wdIndexIndent
    End With

End Sub 

Результат

Рисунок 3. Вид Оглавления сформированного отчета
« ПредыдущаяНа уровень вышеСледующая »
 
Driven by DokuWiki