Word VBA查找/替换问题
在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”的实例并相应地替换?循环方法应该避免这个问题,但我不确定如何实现它Word VBA查找/替换问题,vba,replace,find,ms-word,Vba,Replace,Find,Ms Word,在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)只选择空间,但仍然没有效果。(我在这里
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
谢谢
Cameron您需要使用通配符来执行此操作。因此,将适当的行更改为以下行:
strFind = "(John)( )(Smith)"
strReplace = "\1^s\3" 'for Win, and for Mac try: "\1" & chr(202) & "\3"
并将该行设置为true:
.MatchWildcards = True
有关更多信息,请参阅。谢谢KazJaw,这项工作已经完成。唯一的问题是,当轨道更改打开时,它会以某种方式将NB空格放在“Smith”之后。但是,如果我关闭“轨迹更改”,它会正确执行此操作。我将不得不在轨道更改关闭的情况下运行此程序。您认为这里的find replace函数有问题吗?