Tại sao hành vi macro từ thay đổi khi được sử dụng cùng với thay đổi theo dõi?


1

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.