Một vấn đề gần đây tôi nhận thấy khi chạy macro từ (trong trường hợp này là tìm kiếm và thay thế các hoạt động cụ thể), đó là chúng không có hành vi mong đợi khi các thay đổi theo dõi được kích hoạt (tôi có thể dễ dàng kích hoạt nó, vì vậy tôi có thể dễ dàng hơn theo dõi các thay đổi đã xảy ra trong tài liệu do macro, do đó có thời gian dễ dàng hơn để xác định hiệu suất của nó). Tôi có đoạn mã sau (đây chỉ là một ví dụ để chứng minh vấn đề):
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
Những gì lựa chọn đầu tiên. Tìm kiếm là tìm những con số như thế này
B666666
và thay thế chúng bằng
B 666666
những gì tìm kiếm và thay thế thứ hai làm là tìm một phần rất cụ thể của văn bản nơi có một khoảng trắng kép và thay thế nó bằng một khoảng trắng
organised under
được đổi thành
organised under
cả hai mã này đều hoạt động. Nhưng nếu tôi kích hoạt thay đổi theo dõi trước khi chạy mã bằng
ActiveDocument.TrackRevisions = Not ActiveDocument.TrackRevisions
Sau đó, phần đầu tiên của mã kết quả là
"B666666 " 'thus it does nothing except for putting a space in front of the string
và mã thứ hai thực hiện như sau
"organisedunder " 'thus it merges the two strings and puts a space in front of them.
Ai đó có thể giải thích sự thay đổi này trong hành vi và liệu có cách nào để ngăn chặn điều này, ngoài việc không có thay đổi theo dõi được kích hoạt không?
Dung dịch? :
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