VBA 中的 MS-Word 通配符搜索/替换/启用宏的文档行为更改(@ 通配符不起作用)

问题描述 投票:0回答:0

这是一个奇怪的。多年来,我一直在使用一个启用宏的文档,它基本上使用 MS Word 搜索和替换以及通配符“清理”我的笔记。

昨天,行为发生了巨大变化,不再按预期工作。仍在评估所有问题,但以下搜索立即引起关注:

Search string: (<[A-Za-z'’]@)[ ,.;:]@\1>
Replace string: \1
Purpose: Removes duplicate words
Sample text: test test
Result: Search highlights “test test” fully; 
executing replace returns “test” (expected)

这非常完美,以至于我用下面的宏对其进行了自动化,该宏保存在启用宏的模板 (dotm) 中,我每次打开该模板都会为我的笔记创建一个新文档:

Sub FindReplaceRepeatWords()
'
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "(<[A-Za-z']@)[ ,.;:]@\1>"
        .Replacement.Text = "\1"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = True
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
End Sub

昨天左右,启用宏的文档现在执行以下操作,无论是手动运行还是通过 VBA:

Sample text: test test
Result: Search highlights “t” (first “t” in “test test” only); 
executing replace returns “t” (incorrect; ignoring the function of the "@" wildcard)

重要的是,在新的 docx (normal.dot) 中手动运行搜索和替换为通配符仍然可以按预期工作。我原来的 dotm 不再这样做了,如果我创建一个全新的没有任何宏的 dotm 模板,保存它,然后再次尝试手动运行通配符搜索,它也只能找到第一个字符。

我的“清理”工作需要文档中的许多其他宏,因此不能简单地在标准 docx 中手动运行重复词搜索。此外,另一个宏似乎存在问题,该宏搜索字符“@”而不是通配符来更改它,并且它没有按预期工作(仍在诊断那个)。

好像现在由于某种原因在启用宏的文档中使用“@”字符时出现问题。由于新的测试dotm模板没有VBA代码,而且我对自己编写的代码非常有信心并且已经使用了多年,所以我认为这不是VBA代码本身。

有什么变化?现在很难说,但可疑的是 Office 刚刚更新为:版本 2302(内部版本 16130.20218)。

认为该更新中一定有问题/不同,我回滚到:版本 2301(内部版本 16026.20146)。不用找了。 Windows 是 21H2 Build 190.44.2486.

不知道从这里去哪里进行故障排除。非常感谢任何指针。谢谢。

编辑:格式化

vba ms-word wildcard
© www.soinside.com 2019 - 2024. All rights reserved.