这是一个奇怪的。多年来,我一直在使用一个启用宏的文档,它基本上使用 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.
不知道从这里去哪里进行故障排除。非常感谢任何指针。谢谢。
编辑:格式化