1

Недавняя проблема, которую я заметил при запуске макрокоманд слова (в данном случае, в частности, операций поиска и замены), заключается в том, что они не имеют ожидаемого поведения при активации отслеживания изменений (для меня имеет смысл активировать его, поэтому я могу более легко отслеживать изменения, произошедшие в документе из-за макроса, что облегчает определение его производительности). У меня есть следующий код (это просто пример, чтобы продемонстрировать проблему):

Sub test()

ActiveDocument.TrackRevisions = Not ActiveDocument.TrackRevisions

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

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

End Sub

Что делает первый selection.find, так это найти числа, подобные этим

B666666

и заменить их

B 666666

что делает второй поиск и замена, так это найти очень специфическую часть текста, где есть двойной пробел, и заменяет ее одним пробелом

organised  under

изменено на

organised under

оба эти кода работают. Но если я активирую отслеживание изменений перед запуском кода

ActiveDocument.TrackRevisions = Not ActiveDocument.TrackRevisions

тогда первая часть кода приводит к

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

и второй код делает следующее

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

Может кто-нибудь объяснить это изменение в поведении и есть ли способ предотвратить это, кроме как не активировать отслеживание изменений?

Решение? :

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

0