Здравствуйте.
Есть макрос, который заливает кириллические символы красным цветом.
Не могу сделать так, чтобы в MsgBox выводилось количество обнаруженных кириллических символов.
Код
Sub Procedure_1()
Dim myFindRange As Word.Range
Dim myFind As Word.Find
Set myFindRange = ActiveDocument.Range
Set myFind = myFindRange.Find
myFind.Text = "[А-ЯЁа-яё]"
myFind.MatchWildcards = True
myFind.Format = True
myFind.Replacement.Font.Color = wdColorRed
myFind.Execute Replace:=wdReplaceAll
With CreateObject("vbscript.regexp") 'как правильно вывести в msgbox количество обнаруженных РУССКИХ символов?
.Pattern = "[А-ЯЁа-яё]": .Global = True
ActiveDocument.Range: n = n + myFind.Execute
If n Then
MsgBox "обнаружено русских букв: " & n
Else
MsgBox "русских букв не обнаружено"
End If
End With '
End Sub
sashgera, почему у Вас в этой строке две открывающие квадратные скобки? Есть смысл в этом:?
myFind.Text = "[[А-ЯЁа-яё]"
две открывающие квадратные скобки?
myFind.Text = "[[А-ЯЁа-яё]"
Очепятка, исправил.
Ваш вопрос частый - как узнать, сколько было замен. Но в VBA-Word не предусмотрено инструмента для этой задачи. Команда "ReplaceAll" делает замену, но не даёт информацию, сколько было замен.
Поэтому нужно использовать обходные пути. Предложу свой обходной путь:
Макрос
Sub Procedure1()
Dim rngCursor As Word.Range
Dim myFind As Word.Find
Dim lngCount As Long
'Отключение обновления монитора - может это ускорит работу макроса.
Application.ScreenUpdating = False
'Вставка виртуального курсора (которого не видно на мониторе, но который будет
'находиться в документе) в начало файла. Затем этот курсор будет перемещаться.
'Назначение VBA-имени виртуальному курсору. Назначаем имя "rngCursor".
Set rngCursor = ActiveDocument.Range(Start:=0, End:=0)
'Создание и VBA-наименование объекта, который будет вести поиск.
'Этот объект будет связан с виртуальным курсором.
Set myFind = rngCursor.Find
'Настройка объекта "myFind".
myFind.Text = "[А-ЯЁа-яё]"
myFind.MatchWildcards = True
'Собственно поиск и закраска.
'Поиск будет вестись от начала документа и до конца.
'В этом коде нигде явно не указано, что нужно остановить поиск, дойдя до конца документа,
'но это произойдёт само по себе.
'Команда "myFind.Execute" осуществляет поиск.
'Если будет найдено, то команда "myFind.Execute" даст "True".
Do While myFind.Execute = True
'Подсчитываем.
'Будет находиться именно один символ, а не сразу несколько символов.
lngCount = lngCount + 1
'Если будет найдено, то виртуальный курсор окружит найденный символ
'(похоже на то, как пользователь в файле выделяет символ).
'Выделяем цветом.
rngCursor.Font.ColorIndex = wdRed
'Смещаем виртуальный курсор вправо (в Word аналогично, если нажать клавишу "Стрелка вправо",
'когда выделен символ), чтобы продолжить дальше поиск.
rngCursor.Collapse Direction:=wdCollapseEnd
Loop
'Обновляем монитор, чтобы изменения были видны на мониторе до появления сообщения,
'чтобы было удобнее пользователю.
Application.ScreenRefresh
'Включение обновления монитора.
Application.ScreenUpdating = True
'Сообщение.
MsgBox "Было найдено: " & lngCount
End Sub