在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
谢谢,
卡梅伦
答案 0 :(得分:1)
您需要使用通配符来执行此操作。因此,将适当的行改为以下几行:
strFind = "(John)( )(Smith)"
strReplace = "\1^s\3" 'for Win, and for Mac try: "\1" & chr(202) & "\3"
并将此行设置为true:
.MatchWildcards = True
有关详细信息,请参阅THIS LINK。