Применение стиля к определенным словам

Я использую поиск RegEx, чтобы найти конкретное слово в моем документе MS-Word, и результат поиска сохраняется в переменной. Моя проблема в том, что я хочу применить собственный стиль только для результата поиска

Вход: по всему миру [1,2]. До, во время или после [1,3,4][1,2,4,5] [1,2,6,7,8] [1,2] [1,2]

Я использую следующий код

Sub RegexReplaces()
    Set matches = New regExp
    Dim Sure As Integer
    Dim rng As Range
    matches.Pattern = "([\[\(][0-9, -]*[\)\]])"
    matches.Global = True
    Dim mat As MatchCollection
    Set mat = matches.Execute(ActiveDocument.Range)
    For Each m In mat
        Sure = MsgBox("Are you sure?" + m, vbOKCancel)
        If Sure = 1 Then
            m.Style = ActiveDocument.Styles("Heading 1")    'this is the error line
        Else
            MsgBox "not1111"
        End If
    Next m
End Sub

1 ответ

Решение

For Each m In mat цикл повторяется по каждому элементу в коллекции матов. М это не диапазон. Вам необходимо установить диапазон, начиная с m.FirstIndex и заканчивая m.FirstIndex + m.Length. Затем вам нужно выбрать диапазон и использовать Selection.Style, чтобы стилизовать диапазон.

Sub RegexReplaces()
    Set matches = New regExp
    Dim Sure As Integer
    Dim rng As Range
    matches.Pattern = "([\[\(][0-9, -]*[\)\]])"
    matches.Global = True
    Dim mat As MatchCollection
    Set mat = matches.Execute(ActiveDocument.Range)
    For Each m In mat
        Sure = MsgBox("Are you sure?" + m, vbOKCancel)
        If Sure = 1 Then

            Set rng = ActiveDocument.Range(Start:=m.FirstIndex, End:=m.Length + m.FirstIndex)
            rng.Select
            Selection.Style = ActiveDocument.Styles("Heading 1")
        Else
            MsgBox "not1111"
        End If
    Next m
End Sub
Другие вопросы по тегам