Niedawny problem, który zauważyłem podczas uruchamiania makr wyrazów (w tym przypadku konkretnie wyszukiwania i zamiany operacji), polega na tym, że nie mają oczekiwanego zachowania, gdy zmiany ścieżek są aktywowane (sensowne jest, aby je aktywować, więc mogę łatwiej śledzić zmiany, które miały miejsce w dokumencie ze względu na makro, dzięki czemu łatwiej jest ustalić jego wydajność). Mam następujący kod (to tylko przykład, aby zademonstrować problem):
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
Pierwszym wyborem.find jest znalezienie takich liczb
B666666
i zastąp je
B 666666
tym, co robi drugie wyszukiwanie i zastąpienie, jest znalezienie bardzo określonej części tekstu, w której znajduje się podwójna przestrzeń i zastępuje ją pojedynczym odstępem
organised under
jest zmieniony na
organised under
oba te kody działają. Ale jeśli aktywuję zmiany ścieżki przed uruchomieniem kodu za pomocą
ActiveDocument.TrackRevisions = Not ActiveDocument.TrackRevisions
następnie pierwsza część kodu powoduje
"B666666 " 'thus it does nothing except for putting a space in front of the string
a drugi kod wykonuje następujące czynności
"organisedunder " 'thus it merges the two strings and puts a space in front of them.
Czy ktoś może wyjaśnić tę zmianę w zachowaniu i czy istnieje sposób, aby temu zapobiec?
Rozwiązanie? :
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
źródło