Макрос на замену каждого третьего слова в тексте на код EQ - VBA

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Помогите, пожалуйста, создать макрос для замены каждого третьего слова в тексте на код EQ. Вот собственно в чем вопрос: Исходный текст:
Однако громадные возможности компьютеров оказали влияние не только на технические аспекты этого вида деятельности.
Измененный текст:
Однако громадные {eq возможности} компьютеров оказали {eq влияние} не только {eq на} технические аспекты {eq этого} вида деятельности.
Как я это делаю. В ручную выполняю макрос:
Листинг программы
  1. Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:= _
  2. "eq заменяемое слово", PreserveFormatting:=False
Задача: автоматизировать макросом процесс замены слов в тексте на поле вида {eq "каждое третье слово в тексте"}. Должно получиться, что в макросе выполняется 1)Поиск в тексте каждого третьего слова 2) Замена этого слова на поле вида {eq "слово"}. Визуально, в тексте не видно поля {eq любое слово} выглядит это так: На деле это выглядит вот так: Или такой вариант: Макрос, должен уметь: -определять границу каждой второй пары слов; -иметь свою базу слов, для каждого третьего слова (для вашего примера: возможности; влияние; на; этого); -вставлять после каждого второго слова, Поле EQ (Текст из базы макроса). Какие будут идеи?

Решение задачи: «Макрос на замену каждого третьего слова в тексте на код EQ»

textual
Листинг программы
  1. Sub EQScriptFM()
  2. Dim w As Range, j&, s$, nf0&, nf&, nw&, d0#, d#, d00#, r As Range
  3.   Application.ScreenUpdating = False
  4.   d00 = Now
  5.   d0 = d00 + #12:00:01 AM#
  6.   Set w = ActiveDocument.Range
  7.   nw = w.End
  8.   With w.Find
  9.     .ClearFormatting
  10.     .Text = "<*>*<*>*<*>"
  11. '    .Replacement.Text = ""
  12.    .Forward = True
  13.     .Wrap = wdFindStop
  14.     .Format = False
  15.     .MatchCase = False
  16.     .MatchWholeWord = False
  17.     .MatchAllWordForms = False
  18.     .MatchSoundsLike = False
  19.     .MatchWildcards = True
  20.   End With
  21.   While w.Find.Execute
  22.     Set r = ActiveDocument.Range(w.Words.Last.Start, w.End)
  23.         s = r.Text
  24.         With w.Fields.Add(Range:=r, Type:=wdFieldEmpty)
  25.           .Code.Text = "eq " & Trim$(s)
  26.         End With
  27.         nf = nf + 1
  28.         d = Now
  29.         If d >= d0 Then
  30.           Application.StatusBar = (w.Start - 5 * nf) * 100 \ nw & "% " & nf - nf0 & " полей/сек"
  31.           DoEvents
  32.           nf0 = nf
  33.           d0 = d + #12:00:01 AM#
  34.         End If
  35.       w.Collapse wdCollapseEnd
  36.   Wend
  37.   Application.ScreenUpdating = True
  38.   d = Int((d - d00) * 86400)
  39.   If d = 0 Then d = 1
  40.   s = nf & " полей за " & d & " сек, " & Format(nf / d, "0.0 полей/сек")
  41.   MsgBox s, vbInformation
  42.   Debug.Print s
  43. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы