Как получить строку внутри указанного цвета шрифта c (чтобы что-то добавить к тексту, НЕ меняя цвет) Find.Text empty - PullRequest
0 голосов
/ 21 июня 2020

это мой первый пост на этом форуме, и я также делаю свои первые шаги в Word VBA, так что проявите терпение с плохим учителем латыни. Вот что я хочу сделать:

В моем активном документе я выделяю текст из нескольких слов (или частей слов), отформатированных красным. Эти слова - правильные ответы на ЗАКРЫТЫЙ вопрос (заполните поле). Вот пример (красный = жирный):

Galli ad oppidum venerunt . Caesar Q. Pedium legatum in Galliam misit .

Это должно быть:

  1. Romani ad oppidum (veniunt) {1: SHORTANSWER: = venerunt}.
  2. Caesar Q. Pedium legatum in Galliam (mittit) {1: SHORTANSWER: = misit}.

Итак, что мне нужно сделать, это:

  1. Найдите все красные фрагменты текста,
  2. Каждый найденный красный текст вставьте сниппетBefore "{1: SHORTANSWER: =}" и insertAfter "}".

Я пробовал работать с Selection.Find. Font.Color = wdColorRed, но тогда как мне получить каждый «экземпляр» и как пройти через него l oop? У Find-Object есть свойство Text, но оно всегда пустое: - (

Не могли бы вы мне помочь?

С уважением, Томасина

1 Ответ

0 голосов
/ 22 июня 2020

Например:

Sub Demo()
Application.ScreenUpdating = False
With ActiveDocument.Range
  With .Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = ""
    .Replacement.Text = ""
    .Font.ColorIndex = wdRed
    .Format = True
    .Forward = True
    .Wrap = wdFindStop
  End With
  Do While .Find.Execute
    .InsertBefore "{1:SHORTANSWER:="
    .Collapse wdCollapseEnd
    .Text = "}"
    .Font.ColorIndex = wdAuto
    .Collapse wdCollapseEnd
  Loop
End With
Application.ScreenUpdating = True
End Sub

Однако неясно, откуда должны происходить '(veniunt)' и '(mittit)'.

Также неясно, F / R должен вставлять разрывы абзацев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...