Regex Word Macro que encontra duas palavras dentro de um intervalo e depois itálica essas palavras?

Então, estou apenas começando a entender Expressões Regulares e achei a curva de aprendizado bastante íngreme. No entanto, stackoverflow tem sido imensamente útil no processo de minha experiência. Há uma macro de palavras específica que gostaria de escrever, mas não descobri uma maneira de fazer isso. Eu gostaria de poder encontrar duas palavras dentro de 10 ou mais palavras uma da outra em um documento e, em seguida, colocar em itálico essas palavras, se as palavras tiverem mais do que 10 palavras separadas ou estiverem em uma ordem diferente, eu gostaria que a macro não fosse em itálico aquelas palavras.

Eu tenho usado a seguinte expressão regular:

\bPanama\W+(?:\w+\W+){0,10}?Canal\b

No entanto, só me permite manipular a cadeia inteira como um todo, incluindo palavras aleatórias no meio. Além disso, a função .Replace só me permite substituir essa cadeia por uma string diferente e não alterar os estilos de formatação.

Alguém mais experiente tem uma ideia de como fazer isso funcionar? É mesmo possível fazer?

EDIT: aqui é o que tenho até agora. Existem dois problemas que estou tendo. Primeiro, não sei como selecionar apenas as palavras "Panama" e "Canal" de dentro de uma Expressão Regular correspondente e substituir apenas essas palavras (e não as palavras intermediárias). Segundo, eu simplesmente não sei como substituir um Regexp que é combinado com um formato diferente, apenas uma sequência diferente de texto - provavelmente apenas como resultado de uma falta de familiaridade com macros de palavras.

Sub RegText()
Dim re As regExp
Dim para As Paragraph
Dim rng As Range
Set re = New regExp
re.Pattern = "\bPanama\W+(?:\w+\W+){0,10}?Canal\b"
re.IgnoreCase = True
re.Global = True
For Each para In ActiveDocument.Paragraphs
  Set rng = para.Range
  rng.MoveEnd unit:=wdCharacter, Count:=-1
  Text$ = rng.Text + "Modified"
  rng.Text = re.Replace(rng.Text, Text$)
Next para
End Sub

Ok, graças à ajuda de Tim Williams abaixo eu tenho a seguinte solução juntos, é mais do que um pouco desajeitada em alguns aspectos e não é de forma pura regexp masfaz faça o trabalho. Se alguém tiver uma solução ou uma ideia melhor sobre como fazer isso, ficaria fascinado ao ouvir isso. Novamente, meu bruto forçando as mudanças com o recurso de busca e substituição é um pouco embaraçoso, mas pelo menos funciona ...

Sub RegText()
Dim re As regExp
Dim para As Paragraph
Dim rng As Range
Dim txt As String
Dim allmatches As MatchCollection, m As match
Set re = New regExp
re.pattern = "\bPanama\W+(?:\w+\W+){0,13}?Canal\b"
re.IgnoreCase = True
re.Global = True
For Each para In ActiveDocument.Paragraphs

  txt = para.Range.Text

  'any match?
  If re.Test(txt) Then
    'get all matches
    Set allmatches = re.Execute(txt)
    'look at each match and hilight corresponding range
    For Each m In allmatches
        Debug.Print m.Value, m.FirstIndex, m.Length
        Set rng = para.Range
        rng.Collapse wdCollapseStart
        rng.MoveStart wdCharacter, m.FirstIndex
        rng.MoveEnd wdCharacter, m.Length
        rng.Font.ColorIndex = wdOrange
    Next m
  End If

Next para

Selection.Find.ClearFormatting
Selection.Find.Font.ColorIndex = wdOrange
Selection.Find.Replacement.ClearFormatting
Selection.Find.Replacement.Font.Italic = True
With Selection.Find
    .Text = "Panama"
    .Replacement.Text = "Panama"
    .Forward = True
    .Wrap = wdFindContinue
    .Format = True
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.ClearFormatting
Selection.Find.Font.ColorIndex = wdOrange
Selection.Find.Replacement.ClearFormatting
Selection.Find.Replacement.Font.Italic = True
With Selection.Find
    .Text = "Canal"
    .Replacement.Text = "Canal"
    .Forward = True
    .Wrap = wdFindContinue
    .Format = True
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll

Selection.Find.ClearFormatting
Selection.Find.Font.ColorIndex = wdOrange
Selection.Find.Replacement.ClearFormatting
Selection.Find.Replacement.Font.ColorIndex = wdBlack
With Selection.Find
    .Text = ""
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindContinue
    .Format = True
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub

questionAnswers(2)

yourAnswerToTheQuestion