1

Тема: замена в найденном

Здравствуйте, не подскажете, как в этом макросе сделать, так чтобы строка 
.Parent.Text = Replace(.Parent.Text, p, z)
поддерживала подстановочные знаки (типа такие[А-яЁё]@[А-яЁё]{4})
Макрос находит слова с ошибкой, делает замену, и проверяет, пропала ли ошибка в слове после замены, если не пропала, делает откат.

Function er1(t As String, p As String, z As String)
EngineNotStarted:
    With ActiveDocument.range.find
        .Text = t
        .MatchWildcards = True
        While .Execute
            While .Parent.SpellingErrors.Count > 0
                .Parent.Text = Replace(.Parent.Text, p, z)
                While .Parent.SpellingErrors.Count > 0
                    ActiveDocument.Undo
                    .Parent.Text = .Parent.Text + "1"
                    GoTo EngineNotStarted:
                Wend
                 GoTo EngineNotStarted:
              Wend
        Wend
    End With
    Selection.find.ClearFormatting
    Selection.find.Replacement.ClearFormatting
    With Selection.find
        .Text = "1"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.find.Execute Replace:=wdReplaceAll
End Function

2

Re: замена в найденном

Никак, Replace — встроенная функция и регулярных выражений не поддерживает. Думаю, нужно идти в другом направлении. Каждый элемент SpellingErrors — это Range. Его и нужно проверять, применяя замену через регулярные выражения VBScript.RegExp

Лучше день потерять — потом за пять минут долететь!

3

Re: замена в найденном

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

4

Re: замена в найденном

Заработало так:
        .Text = t
        .MatchWildcards = True
        While .Execute
            While .Parent.SpellingErrors.Count > 0
                 With Selection.find
                    .Text = p
                    .Replacement.Text = z
                    .Wrap = wdFindContinue
                    .MatchWildcards = True
                 End With
                Selection.find.Execute Replace:=wdReplaceOne
                While .Parent.SpellingErrors.Count > 0

5

Re: замена в найденном

Поспешил, не адекватно работает он