在替换文本时尝试获取不同类型的引号时似乎存在问题:
With ActiveDocument.Content.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "\{QUOTE:(*):QUOTE\}"
.Replacement.Text = Chr(147) & "\1" & Chr(148)
.Forward = True
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
.Execute Replace:=wdReplaceAll
End With
当文档包含:{QUOTE:abc:QUOTE}时
代码给出:“abc”
但预期的结果是:“abc”
Word的版本:“Microsoft Office Professional Plus 2013”和“Microsoft Office 365 ProPlus”。
当文件 - >选项 - >校对 - >自动更正选项 - >键入时自动套用格式 - >键入时替换 - >“智能引号”的“直线引号”未激活时,不会发生此问题。当然,无论手动输入的设置如何,我都希望宏能够正常工作。
如何更改代码以获得预期结果?
解决此类问题的方法是在代码持续时间内关闭该选项,然后在其打开时再次将其重新打开。
以下代码段保存用户的设置,关闭选项,然后恢复用户的设置(选项是否打开或关闭)。
Dim bReplaceQuotes as Boolean
'Save the user's setting
bReplaceQuotes = Options.AutoFormatAsYouTypeReplaceQuotes
Options.AutoFormatAsYouTypeReplaceQuotes = False
'Do the FindReplace
'Restore the user's settings at the end
Options.AutoFormatAsYouTypeReplaceQuotes = bReplaceQuotes