powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Поиск и форматирование в Word
5 сообщений из 5, страница 1 из 1
Поиск и форматирование в Word
    #34285894
miorica
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, пожалуйста, каким образом записать условие для цикла, чтобы обнаруживались и форматировались все вхождения искомого слова, а не однократно, как в данном случае?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Sub FormatSelection()

    With Selection.Find
        .Text = "Термин:"
        .Forward = True
        .Wrap = wdFindContinue
        .Execute
    End With
    Selection.Font.Bold = wdToggle
    If Selection.Font.Underline = wdUnderlineNone Then
        Selection.Font.Underline = wdUnderlineSingle
    Else
        Selection.Font.Underline = wdUnderlineNone
    End If
End Sub

И еще один глупый вопрос - в чем смысл знака подчеркивания?
Код: plaintext
1.
2.
3.
Do While .Execute( _
          FindText:=strParam, _
          Forward:=True, _
          Format:=True) = True
Спасибо.
...
Рейтинг: 0 / 0
Поиск и форматирование в Word
    #34288133
lena_####
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miorica

Для организации цикла можно воспользоваться тем, что метод Execute объекта Find возвращает True, если поиск оказался успешным, и False в противном случае:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Sub FormatSelection()
  Selection.HomeKey (wdStory)
  Do While Selection.Find.Execute(FindText:="Термин:", Forward:=True)
    With Selection.Font
      .Bold = wdToggle
      If .Underline = wdUnderlineNone Then
        .Underline = wdUnderlineSingle
      Else
        .Underline = wdUnderlineNone
      End If
    End With
  Loop
End Sub

Правда я не очень поняла логику работы вашего примера: если найденный образец жирный и подчеркнутый, то делаем его нежирным и неподчеркнутым и наоборот. Но тут Вам конечно видней.

Если нужно просто все вхождения образца поиска сделать жирными и подчеркнутыми, то можно обойтись и без цикла:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Sub mySub()
  With ActiveDocument.Content.Find
    .ClearFormatting
    .Text = "Термин:"
    With .Replacement
      .ClearFormatting
      .Text = "Термин:"
      .Font.Bold = True
      .Font.Underline = wdUnderlineSingle
    End With
    .Wrap = wdFindContinue
    .Execute Replace:=wdReplaceAll
  End With
End Sub

mioricaИ еще один ... вопрос - в чем смысл знака подчеркивания?
Знак подчеркивания используется для переноса длинной строки кода. Это нужно порой для удобочитаемости кода. В Вашем примере приведенный фрагмент можно заменить без потерь на:

Код: plaintext
Do While .Execute(FindText:=strParam, Forward:=True, Format:=True) = True

А вообще, может кто-нибудь из спецов напишет в FAQ статью о логике функционирования объекта Find в Word’е, а то она (логика) не всем вполне очевидна.
...
Рейтинг: 0 / 0
Поиск и форматирование в Word
    #34293740
miorica
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lena_#### Если нужно просто все вхождения образца поиска сделать жирными и подчеркнутыми, то можно обойтись и без цикла
Спасибо за объяснения! Была сбита с толку сгенеренным макросом кодом, а оказалось, что большее внимание стоит уделять хелпу.

Теперь возникло другое затруднение. Документ выглядит следующим образом:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Термин:
АВАРИЙНАЯ РАДИОСТАНЦИЯ СЖ
АВАРИЙНАЯ РАДИОСТАНЦИЯ
Допустимый синоним:
Недопустимый синоним:
аварийная спасательная радиостанция
Определение термина:
Приемо-передающая радиостанция

Надо сделать жирным само значение термина (Аварийная радиостанция) и удалить пустое поле Допустимый синоним. Каким образом с найденного "Термин:" можно перейти на следующую строку?
Непосредственно переход вроде поняла, но как прикрутить его к результатам поиска?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
    With myRange
        .GoTo What:=wdGoToLine, Which:=wdGoToNext, Count:= 1 
        .MoveEnd Unit:=wdParagraph, Count:= 1 
        .Select
        With .Font
        .Bold = True
        End With
    End With

И в случае синонимов, как проверить, что за "Допустимый синоним:" нет никакого значения, а сразу идет "Недопустимый"?
Какие ключевые свойства-методы необходимы для решения?
...
Рейтинг: 0 / 0
Поиск и форматирование в Word
    #34293806
miorica
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос синонимов отпал. Но термины волнуют до сих пор! =)
...
Рейтинг: 0 / 0
Поиск и форматирование в Word
    #34294314
lena_####
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miorica

В Вашем примере структура полей такова:

Поле = Имя_Поля + ":" + знак_абзаца + Значение_Поля + знак_абзаца

(здесь меня правда смутила структура поля "Термин:" – там Значение_Поля + знак_абзаца повторяется дважды).

Придумалось два способа:
1-й. В цикле искать Поле целиком. Затем в найденном искать Значение_Поля и форматировать его.
2-й. Без использования цикла во всем документе искать Поле целиком, целиком и форматировать его, затем искать Имя_Поля + ":" и снимать форматирование. Так я и сделала:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
Sub mySub()
  Selection.HomeKey (wdStory)
  With ActiveDocument.Content.Find
    .ClearFormatting
    .Text = "(Термин:)(^013)(*)(^013)(*)(^013)"
    .MatchWildcards = True
    With .Replacement
      .ClearFormatting
      .Text = "\1\2\3\4\5\6"
      .Font.Bold = True
    End With
    .Wrap = wdFindContinue
    .Execute Replace:=wdReplaceAll
  End With
  
  With ActiveDocument.Content.Find
    .ClearFormatting
    .Text = "Термин:"
    .MatchWildcards = False
    With .Replacement
      .ClearFormatting
      .Text = "Термин:"
      .Font.Bold = False
    End With
    .Wrap = wdFindContinue
    .Execute Replace:=wdReplaceAll
  End With
End Sub

Здесь при поиске использованы подстановочные знаки (Wildcards) и работа ведется с полем "Термин:", значение которого состоит из двух строк (как в Вашем примере). Конструкция (^013) – это знак абзаца; (*) – любой символ.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Поиск и форматирование в Word
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]