powered by simpleCommunicator - 2.0.27     © 2024 Programmizd 02
Map
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / VBA Word - пометка слов
2 сообщений из 2, страница 1 из 1
VBA Word - пометка слов
    #40003502
Mikhail Bel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Если кто-то может помочь, был бы признателен.
Имеется текст в ворде, нужно каждое второе слово длиннее 3 знаков (т.е. 4 и более) сделать красным. Это несложно, но вмешиваются 2 обстоятельства:
а) после слова короче 3 букв помечается следующее, которое будет 4 знака и более;
б) нужно учитывать и слова с дефисами (например, социально-ориентированный)
Под словами понимаются и числа (например, 2020), и иностранные слова (например, London, whiskey), и, как отмечалось, слова с дефисами (например, какой-то). Не входят в слова знаки препинания и кавычки.
Приложил пример, как должно быть.
В коде никак не могу ухватить, каким будет условие, чтобы учесть заданные ограничения. Все время что-то не так. Как-то надо сбрасывать счетчик, если слово меньше 3 (делать счетчик нечетным), но тогда другое вылезает.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Sub MarkWord()  ' каждое второе слово документа длиннее 3 сделать красным
   Dim w As Range, cout As Long

   cout = 0
   Set w = ActiveDocument.Range
   With w.Find
      .Text = "<[&#192;-&#223;&#224;-&#255;A-Za-z0-9\-]*>"
      .MatchWildcards = True
      While .Execute
         If Len(w.Text) > 3 Then cout = cout + 1
         If cout Mod 2 = 1 Then w.Font.Color = wdColorRed
      Wend
   End With
End Sub


И еще - игрался с рег.выражением, однако ухватить дефис между словами не могу, как сделать?
...
Рейтинг: 0 / 0
VBA Word - пометка слов
    #40003588
Mikhail Bel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сам решил. Закрыто.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Sub MarkWord()  ' каждое второе слово документа длиннее 3 сделать красным
   Dim w As Range, cout As Long, rngEnd As Long

   If Selection.Start = Selection.End Then Exit Sub

   'Set w = ActiveDocument.Range ' если весь документ
   Set w = Selection.Range       ' если выделенное
   rngEnd = w.End

   cout = 0
   With w.Find
      .Text = "<[А-Яа-яA-Za-z0-9\-]{4;}>"
      .MatchWildcards = True
      While .Execute
         If w.Start > rngEnd Then Exit Sub
         cout = cout + 1
         If cout Mod 2 = 0 Then w.Font.Color = wdColorRed ' w.HighlightColorIndex = wdRed ' если закраска
      Wend
   End With
End Sub
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / VBA Word - пометка слов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (0):
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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