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
Tags microsoft-word macros vba