MS word macro: як змінити виділення з певного кольору на інший - всередині вибраного тексту?


2

Я хочу змінити жовті виділення у виділеному тексті (не у всьому документі) на червоні. Ця VBA змінює виділені кольори, але не зупиняється на виділеному тексті (він також змінює виділення під вибраним текстом).

Sub SwitchHighlightsColor()
    Dim r As Range
    Set r = ActiveDocument.Range

    With r.Find
        .Highlight = True
        .Forward = True
        Do While .Execute(FindText:="", Forward:=True) = True
            If r.HighlightColorIndex = wdYellow Then   ' Highlight color you want to change
                r.HighlightColorIndex = wdRed          ' the new Highlight color you want to have
                r.Collapse 0
            End If
        Loop
    End With
End Sub

Це точний код? Я думав, що r.Find вимагатиме аргументу того, що ви хочете знайти?
Jonno

@Jonno оригінальний код був із "ActiveDocument.Range". Я змінив його у своєму питанні. Моя спроба selection.range була, але неправильна. (Спасибі: я відредагував своє запитання)
Ліза,

Оригінальний код нам, той, який у моєму питанні (r.find був без дужок). Так, я хочу, щоб вся жовта родзинка мого виділення змінилася на червону. (Оригінальний код: exp-systems.com/forum_exp/forum_posts.asp?TID=580 )
Ліза,

Відповіді:


1

Спробуйте виконати наступні зміни:

Sub SwitchHighlightsColor()
    Dim r As Range
    Set r = Application.Selection.Range

    With r.Find
        .Highlight = True

        Do While .Execute(FindText:="") And r.InRange(Application.Selection.Range)
            If r.HighlightColorIndex = wdYellow Then   ' Highlight color you want to change
                r.HighlightColorIndex = wdRed          ' the new Highlight color you want to have
                r.Collapse 0
            End If
        Loop
    End With
End Sub

введіть тут опис зображення

введіть тут опис зображення

введіть тут опис зображення

Редагувати:

Цей альтернативний код працює на основі літер, а не за словом. Таким чином, він повинен змінювати будь-які літери з виділенням правильного кольору. Однак це буде важко скасувати, оскільки потрібно скасувати кожну букву окремо, а не всі за один раз.

Sub SwitchHighlightsColorPerLetter()
    Dim r As Range
    Set r = Application.Selection.Range

    With r.Find
        .Highlight = True

        Do While .Execute(FindText:="") And r.InRange(Application.Selection.Range)
            For Each x In r.Characters
                If x.HighlightColorIndex = wdYellow Then   ' Highlight color you want to change
                    x.HighlightColorIndex = wdRed          ' the new Highlight color you want to have
                    x.Collapse 0
                End If
            Next
        Loop
    End With
End Sub

чудовий! Велике спасибі. (Існує лише невелика проблема, коли жовтому виділенню безпосередньо передує або слідує інший колір виділення - без будь-якого проміжку між ними -, тоді макрос не розпізнає його, і, отже, не змінює другий колір.)
Ліза

1
@Lisa Не впевнений, чи потрібен він вам все-таки, але я додав код VBA, який працює за буквою замість слова, так що він буде працювати навіть у тому випадку, якщо два кольори підсвічування в одному слові.
Jonno

Мене це дуже зворушило, тим більше, що я вже позначив це як найкращу відповідь (і це було). Тепер це не тільки найкраща відповідь, але і найдобріша! Дякую тобі велике (І так, мені це все одно потрібно! І до речі ефект прекрасний!)
Ліза,

1
@Lisa Не проблема, радий, що можу допомогти =)
Jonno
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.