【问题标题】:Word VBA Find/Replace IssueWord VBA 查找/替换问题
【发布时间】: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

谢谢,

卡梅隆

【问题讨论】:

    标签: vba replace find ms-word


    【解决方案1】:

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

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

    并将这一行设置为真:

    .MatchWildcards = True
    

    更多信息请查看THIS LINK

    【讨论】:

    • 感谢 KazJaw 完成了这项工作。唯一的问题是它以某种方式将 NB 空间放置在“Smith”之后,而轨道更改处于打开状态。但是,如果我关闭跟踪更改,它会正确执行。我只需要在关闭轨道更改的情况下运行它。您认为这里的查找替换功能有问题吗?
    猜你喜欢
    • 2012-03-08
    • 1970-01-01
    • 2014-10-12
    • 2013-07-27
    • 2018-03-24
    • 1970-01-01
    • 2018-01-18
    • 2013-11-09
    • 2012-11-13
    相关资源
    最近更新 更多