Подсчитать замены, сделанные "Заменить все" в VBA - PullRequest
0 голосов
/ 16 октября 2018

Я работаю над макросом, который анализирует документ и изменяет стиль при необходимости.Пока что одна из моих подпрограмм использует Find & Execute с циклом для просмотра всего параграфа с определенным Style.Он работал достаточно хорошо и позволял легко узнать, сколько раз была сделана модификация.Однако, похоже, что .Execute Replace:=wdReplaceAll гораздо более эффективен, но не возвращает эту последнюю информацию в VBA, даже если она отображается при непосредственном использовании в Word (с Ctrl + H ).

Как обойти эту проблему, чтобы подсчитать количество замен?

Заранее большое спасибо.

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Попробуйте что-нибудь на основе:

Sub Demo()
Application.ScreenUpdating = False
Dim i As Long
With ActiveDocument.Range
  With .Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = InputBox("What is the Text to Find")
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindStop
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
    .Execute
  End With
  Do While .Find.Found
    i = i + 1
    .Collapse wdCollapseEnd
    .Find.Execute
  Loop
End With
Application.ScreenUpdating = True
MsgBox i & " instances found."
End Sub

Приведенный выше код на самом деле ничего не заменяет - он просто подсчитывает, что было найдено.

0 голосов
/ 16 октября 2018

Это можно сделать с помощью комбинации встроенных в Word функций поиска и замены и поиска и замены с помощью библиотеки регулярных выражений (регулярные выражения Microsoft VBScript 5.5).

Регулярные выражения VBScript не могут искать только стили.текст, но может предоставить количество найденных совпадений.

Таким образом, вы сначала выполняете поиск и заменяете маркер абзаца стиля, который вас интересует (^ p + стиль).Вы заменяете маркер абзаца на измененный маркер абзаца, такой как '### ^ p', стараясь заменить его тем же стилем.

Затем вы используете поиск и замену регулярного выражения, чтобы найти модификатор маркера абзаца и заменитьэто ни с чем, таким образом, восстанавливая оригинальный текст.У регулярного выражения есть метод .Matches.Count, который даст вам количество выполненных замен ###.

Вы можете найти следующую ссылку переполнения стека справки

Как использовать / включить (объект RegExp) регулярное выражение с использованием VBA (MACRO) в слове

...