3

Я не часто использую VBA, и я пытаюсь собрать макрос, который выделяет весь текст в документе с размером шрифта 13,5 пт и меняет его стиль на заголовок 1. Пока у меня есть следующий код:

Sub FormatSectionHeaders()
    Application.ScreenUpdating = False
    Dim oRng As Word.Range
    Set oRng = ActiveDocument.Content
    oRng.Find.ClearFormatting
    oRng.Find.Replacement.ClearFormatting
    oRng.Find.Replacement.Style = wdStyleHeading1
    With oRng.Find
     .Font.Size = 13.5
     .Text = ""
     .Execute Format:=True, Replace:=wdReplaceAll, Wrap:=wdFindContinue
    End With
End Sub

При этом выбирается правильный текст и применяется стиль, но по какой-то причине он не переопределяет все исходное форматирование - например, шрифт и размер шрифта не изменяются, чтобы соответствовать стилю. Может кто-нибудь сказать мне, что я делаю не так?

Примечание: я могу заставить это работать со следующим циклом, но это намного медленнее, чем использовать replaceall, поэтому я хотел бы попытаться исправить приведенный выше код, а не использовать что-то вроде этого.

With oRng.Find
    .ClearFormatting
    .Text = ""
    .Font.Size = 13.5
    While .Execute
        oRng.Style = ActiveDocument.Styles(wdStyleHeading1)
        oRng.Collapse wdCollapseEnd
    Wend
End With

2 ответа2

1

Похоже, что это и другие проблемы, с которыми я столкнулся при написании кода VBA, были связаны с тем, что изменяемый текст находился внутри ячейки большой (невидимой) таблицы. При переносе текста только в другой документ проблемы были решены. Смотрите комментарии, чтобы заставить стиль вступить в силу даже внутри ячейки.

0

Вы находите контент с размером шрифта 13,5 и пытаетесь применить стиль заголовка1 для этого контента. но в шаблоне документа Word по умолчанию (Normal) У него стиль заголовка первого уровня как Heading1, так что вы можете использовать код, как показано ниже

oRng.style = "Heading1"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .