Por que o comportamento da macro de palavras é alterado quando usado em conjunto com as alterações de trilha?

1

Um problema recente que percebi ao executar macros de palavras (nesse caso especificamente operações de pesquisa e substituição) é que elas não têm o comportamento esperado quando as alterações de faixa são ativadas (faz sentido ativá-lo, portanto pode rastrear com mais facilidade as alterações que ocorreram em um documento devido à macro, facilitando, assim, a verificação de seu desempenho). Eu tenho o seguinte código (este é apenas um exemplo para demonstrar o problema):

Sub test()

ActiveDocument.TrackRevisions = Not ActiveDocument.TrackRevisions

With Selection.Find
    .Text = "(B)([0-9]{6})"
    .Replacement.Text = " "
    .Wrap = wdFindContinue
    .MatchWildcards = True
End With
Selection.Find.Execute Replace:=wdReplaceAll

With Selection.Find
    .Text = "(organised)(  )(under)"
    .Replacement.Text = " "
    .Wrap = wdFindContinue
    .MatchWildcards = True
End With
Selection.Find.Execute Replace:=wdReplaceAll

End Sub

O que a primeira seleção busca é encontrar números como esses

B666666

e substitua-os por

B 666666

o que a segunda busca e substituição faz é encontrar uma parte muito específica do texto onde há um espaço duplo e substituí-lo por um único espaço

organised  under

é alterado para

organised under

ambos os códigos funcionam. Mas se eu ativar alterações de faixa antes de executar o código usando

ActiveDocument.TrackRevisions = Not ActiveDocument.TrackRevisions

a primeira parte do código resulta em

"B666666 " 'thus it does nothing except for putting a space in front of the string

e o segundo código faz o seguinte

"organisedunder " 'thus it merges the two strings and puts a space in front of them.

Alguém pode explicar essa mudança no comportamento e se há uma maneira de evitar isso, além de não ter as alterações de trilha ativadas?

Solução? :

Sub EvenMoreTesting()

Selection.HomeKey Unit:=wdStory

With Selection
.Find.Text = "Stocks"

Do
Selection.HomeKey Unit:=wdStory
Found = .Find.Execute
If Found Then Selection.Range.HighlightColorIndex = wdYellow
If Found Then Selection.TypeText Text:="Sto"
Loop While Found

End With

End Sub
    
por Noir 08.07.2018 / 11:58

0 respostas