1

Тема: Преобразование латинского текста в формулы.

Доброго времени суток!
Есть макрос, который должен находить в тексте латинские символы (или целые слова) и преобразовывать их в формулы. Проблема в том, что при запуске макроса, выделяется только первый символ и на этом все прерывается. Буду признателен за помощь!

Sub Макрос3()
'
' Макрос3 Макрос
'
'
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "[A-z]"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = True
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute
    Selection.OMaths.Add Range:=Selection.Range
End Sub

2

Re: Преобразование латинского текста в формулы.

Evgen пишет:

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

Вам необходимо после того, как найден контекст формулы, сдвинуть правый край диапазона выделенного текста таким образом, чтобы он охватил последний символ формулы. В вашем случае это, видимо, последний нерусский символ контекста (в предположении, что за формулой следует какой-то русский текст). В примере ниже правый край Selection сдвигается до первого русского символа с помощью метода MoveEndUntil.

Sub FindAndReformatFormula()
Dim ruschars As String
ruschars = "ёйцукенгшщзхъфывапролджэячсмитьбю"
ruschars = ruschars & "ЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ"
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "[A-z]"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = True
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute
    If Selection.Find.Found Then
        Selection.MoveEndUntil Cset:=ruschars
        Selection.OMaths.Add Range:=Selection.Range
    End If
End Sub