Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Word VBA查找/替换问题_Vba_Replace_Find_Ms Word - Fatal编程技术网

Word VBA查找/替换问题

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)只选择空间,但仍然没有效果。(我在这里

在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
谢谢


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函数有问题吗?