Найти все экземпляры желтого текста и изменить цвет шрифта на красный - PullRequest
4 голосов
/ 11 сентября 2010

Мне нужен макрос vba, который ищет весь текст с желтым шрифтом в документе MS Word 2007 и меняет его на красный.Желтый цвет не будет отображаться в распечатках.Выбор и изменение вручную займет у меня несколько часов.

Ответы [ 3 ]

9 голосов
/ 05 июля 2013

Следуя решению Stakx Word 97, вот что работает в Word 2010:

  1. Открыть диалоговое окно «Найти и заменить» (например, Ctrl-H)
  2. Нажмите в поле «Найти что».
  3. Раскрывающийся список Формат, Шрифт, выберите цвет шрифта, который будет найден, ОК.
  4. Нажмите в поле «Заменить на».
  5. Формат раскрывающегося списка, Шрифт, выберите цвет, чтобы закончить, ОК.
  6. Обратите внимание, что формат: описание для "Найти что" и "Заменить на" теперь отличается.
  7. Заменить / Заменить все / Найти далее, если необходимо.

Вы можете определить исходный цвет следующим образом:

  1. Нажмите на текст с оригинальным цветом
  2. Откройте цветовую палитру. Если не выбран ни «Цвет темы», ни «Стандартный цвет», вам может потребоваться нажать «Дополнительные цвета».
5 голосов
/ 11 сентября 2010

На самом деле для этого есть непрограммное решение.Я пробовал это в Word 97, поэтому я предполагаю, что Word 2007 все еще позволяет это:

  1. Открыть диалог Поиск и замена .
  2. Галочкафлажок Поиск по шаблону (или аналогичный).
  3. В качестве условия поиска введите (?).
  4. Выберите форматирование для поиска (желтый цвет текста).
  5. В качестве термина для замены введите \1.
  6. Выберите формат для замены (красный цвет текста).
  7. Затем найдите и замените все.

Шаги 2, 3 и 5 (ввод поиска и замена регулярных выражений) могут на самом деле не понадобиться.

Если вам определенно нужен код VBA, вы сможете записать вышеуказанные шаги в виде макросаа затем посмотрите на сгенерированный код.

3 голосов
/ 11 сентября 2010
Sub ChangeColorWithReplace()   
    Selection.Find.ClearFormatting
    Selection.Find.Font.Color = wdColorYellow
    Selection.Find.Replacement.ClearFormatting
    Selection.Find.Replacement.Font.Color = wdColorRed
    With Selection.Find
        .Text = ""
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchKashida = False
        .MatchDiacritics = False
        .MatchAlefHamza = False
        .MatchControl = False
        .MatchByte = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub

Кроме того, вот еще один способ сделать это.Это не очень быстро, но быстрее, чем делать это вручную:

Sub ChangeFontColorByCharacter()
    Application.ScreenUpdating = False
    Dim d As Document: Set d = ActiveDocument
    For i = 1 To d.Characters.Count
        If d.Characters(i).Font.TextColor.RGB = RGB(255, 255, 0) Then
            d.Characters(i).Font.TextColor.RGB = RGB(255, 0, 0)
            DoEvents
        End If
    Next
    Application.ScreenUpdating = True
End Sub
...