Word VBA查找/替换问题

时间:2014-03-05 03:28:28

标签: vba replace ms-word find word-vba

在Word中使用VBA查找和替换我遇到的问题是,如果我尝试替换“John(space)Smith”的所有实例,例如“John(非破坏空间)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

谢谢,

卡梅伦

1 个答案:

答案 0 :(得分:1)

您需要使用通配符来执行此操作。因此,将适当的行改为以下几行:

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

并将此行设置为true:

.MatchWildcards = True

有关详细信息,请参阅THIS LINK