В шаблоне отчета стандартными средствами может быть вставлено Оглавление - содержание документа с указанием разделов и их страниц. При обработке документа макросом может возникнуть смещение заголовков с исходных страниц. Данные о номерах страниц в Оглавлении останутся не обновлёнными сразу после формирования отчета.
Необходимо, чтобы после выполнения макроса Оглавление в документе полностью соответствовало истинному положению заголовков на страницах.
Решение описывается с момента, когда уже есть некоторый отчет со своим макросом. В шаблоне отчета задано Оглавление.
Вместо того чтобы обновлять существующее Оглавление, в конце выполнения макроса сделаем добавление Оглавления в указанное место в документе. Имеющееся же Оглавление в шаблоне отчета удаляем.
Перед местом вставки Оглавления вставляем закладку с названием "Оглавление".
Удаляем текущее поле вставки Оглавления.
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