Поля отбрасывают изменения при обновлении - вы можете немного изменить это. Существует переключатель * MergeFormat, который можно добавить в коды полей, чтобы сохранить форматирование. Главный недостаток, однако, заключается в том, что он «запоминает» форматирование по расположению символов. Поэтому, если текст изменяется (становится короче или длиннее), форматирование «сходит с ума». Поэтому я не думаю, что это поможет вам.
Итак, все, что вы действительно можете сделать, - это повторное применение форматирования после каждого обновления TOC. Самый быстрый способ сделать это - использовать код (например, макрос).
Вот макрос, который работает в быстрой проверке на моей системе. Он ищет каждый символ TAB в TableOfContents. Затем, основываясь на дополнительной информации от OP, которая должна распознать только вторую вкладку, используется второй диапазон, чтобы проверить, находится ли положение ПОСЛЕ закладки в пределах одного сантиметра от правого поля.
Если это так, то он переупорядочивает диапазон целей поиска с этой точки обратно в начало абзаца, затем применяет форматирование.
Примечание 1: Вы можете изменить «подушку», используемую для определения расстояния до правого поля, изменив формулу, назначенную на PageNumLimit.
Примечание 2: Я определил STYLE с именем Toc1_Text и использовал это вместо форматирования с помощью BOLD напрямую. Не имеет значения, но он чувствует себя «чист» для меня, чем прямого форматирования :-)
Sub FormatTextInTOC()
Dim rngFind As word.Range, rngFound As word.Range
Dim bFound As Boolean
Dim toc As word.TableOfContents
Dim infoH As Double, pageNumLimit As Double
Set toc = ActiveDocument.TablesOfContents(1)
toc.Update
Set rngFind = toc.Range
pageNumLimit = rngFind.Sections(1).PageSetup.RightMargin _
- CentimetersToPoints(1)
With rngFind.Find
.ClearFormatting
.Text = vbTab
.Style = word.WdBuiltinStyle.wdStyleTOC1
Do
bFound = .Execute
If bFound Then
Set rngFound = rngFind.Duplicate
'rngFound.Select
rngFound.Collapse wdCollapseEnd
infoH = rngFound.Information(_
wdHorizontalPositionRelativeToTextBoundary)
If infoH >= pageNumLimit Then
'rngFind.Select
rngFind.Collapse wdCollapseStart
rngFind.MoveStart wdParagraph, -1
rngFind.Style = "Toc1_Text"
rngFind.Start = rngFind.Paragraphs(1).Range.End
'rngFind.Select
End If
End If
Loop While bFound
End With
End Sub
ОК, получил его, но не могли бы вы изменить код так, чтобы она могла доходить до второго лепестка. Теперь только чарекеры, которые смелее, до первого TAB. Итак, теперь он выделяет только «1». У меня это выглядит так: 1. TAB это тестирование текста TAB ............. PAGENUMBER –
К сожалению, невозможно проверить PAGENUMBER внутри TOC. Код поля, ответственный за гиперссылку на номере страницы, предотвращает это. Поэтому я использую позиционный подход, который был большим количеством работы, чем я думал, что это будет ... –
Не уверен, если вы правильно поняли меня. Asi просматривает ваш исходный код, я вижу, что он выделяет все, что осталось слева от первой вкладки. Можно ли установить вторую вкладку? Спасибо за оригинальный код! –