2014-03-05 134 views
0

在Word中使用VBA查找和替換我有一個問題,如果我試圖用「John(non-breaking space)」替換「John(space)Smith」的所有實例,史密斯「中,查找替換函數將所有」約翰(空間)史密斯「以及所有」約翰(非破壞空間)史密斯「替換爲」約翰(非破壞空間)史密斯「。在我使用它並留下修改之前,我並不想用它自己替換它。我試過使用Chr(32)來選擇空間,但仍然無濟於事。 (我只想在這裏指出,我不是字面寫作(空間)和(非休息空間),但它只是象徵空間和非休息空間的地方)Word VBA查找/替換問題

看起來,查找/替換doesn在查找時不區分空間和非破壞空間。我試圖在相反的方向,但它工作正常(非破空間空間查找和替換)。所以我的理論是,對於查找/替換,一個沒有破壞的空間被認爲是一個空間,但是一個空間不被視爲一個不破壞的空間。瞭解這一點,任何人都可以提供解決方案來克服這個問題嗎?我可以以某種方式循環瀏覽文檔並找到「John(space)Smith」的實例並相應地進行替換嗎?循環方法應該避免這個問題,但我不知道如何實現它。

ActiveDocument.Range.Select 

strFind = "John" & Chr(32) & "Smith" 
strReplace = "John" & Chr(202) & "Smith" 'note the chr(202) is because i am working on a mac. 160 on pc i believe 

Selection.Find.ClearFormatting 
Selection.Find.Replacement.ClearFormatting 
With Selection.Find 
.Text = strFind 
.Replacement.Text = strReplace 
.Forward = True 
.Wrap = wdFindAsk 
.Format = True 
.MatchCase = False 
.MatchWholeWord = False 
.MatchWildcards = False 
.MatchSoundsLike = False 
.MatchAllWordForms = False 
End With 
Selection.Find.Execute Replace:=wdReplaceAll 

感謝,

卡梅倫

回答

1

您需要使用通配符來這樣做。因此,改變相應的行成以下的:

strFind = "(John)()(Smith)" 
strReplace = "\1^s\3"  'for Win, and for Mac try: "\1" & chr(202) & "\3" 

並將此行成真:

.MatchWildcards = True 

欲瞭解更多信息,請參閱THIS LINK

+0

謝謝KazJaw做這個工作。唯一的問題是它在跟蹤變化時以某種方式在「Smith」之後放置NB空間。如果我關閉跟蹤更改但是,它正確。我將只需要在關閉軌跡的情況下運行。您認爲在這裏發現替換功能的問題? –