【发布时间】:2014-04-06 22:19:04
【问题描述】:
在 Word 中使用 VBA 查找和替换时,我遇到的问题是,如果我尝试将“John(space)Smith”的所有实例替换为“John(non-breaking space)Smith”,则查找替换函数将所有“John(space)Smith”以及所有“John(non-breaking space)Smith”替换为“John(non-breaking space)Smith”。在我使用它并留下跟踪更改之前,我真的不希望它自己替换它。我曾尝试使用 Chr(32) 仅选择空间,但仍然无济于事。 (在这里我要指出,我并不是字面上写(空格)和(不间断空格),而只是象征着空格和不间断空格的位置)
查找/替换似乎在查找时没有区分空格和不间断空格。我在相反的方向尝试了它,但它工作正常(非破坏空间到空间查找和替换)。所以我的理论是,对于查找/替换,非中断空间被视为一个空间,但一个空间不被视为非中断空间。知道了这一点,任何人都可以提供解决方案来解决这个问题吗?我可以以某种方式遍历文档并找到“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
谢谢,
卡梅隆
【问题讨论】: