【问题标题】:Quote in Microsoft Word find and replace在 Microsoft Word 中查找和替换引用
【发布时间】:2019-08-13 14:55:32
【问题描述】:

在替换文本时尝试获取不同种类的引号字符时似乎存在问题:

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”。

当文件->选项->校对->自动更正选项->键入时自动套用格式->键入时替换->“直引号”与“智能引号”未激活时,问题不会发生。当然,无论手动输入的任何设置如何,我都希望宏能够正常工作。

如何更改代码以获得预期的结果?

【问题讨论】:

  • 我无法重现您的问题 - 您使用的是哪个版本的 Word?
  • 版本:“Microsoft Office Professional Plus 2013”​​和“Microsoft Office 365 ProPlus”。清除某个复选框时不会发生此问题;文件->选项->校对->自动更正选项->键入时自动套用格式->键入时替换->“直引号”为“智能引号”。当然,无论手动键入的任何设置如何,我都希望宏能够正常工作。现在我只清除复选框。它应该做的事情可以通过从“到”的常规自动更正条目来完成。

标签: vba ms-word


【解决方案1】:

解决此类问题的方法是在代码执行期间关闭该选项,如果打开,则再次打开。

以下代码 sn -p 保存用户的设置,关闭选项,然后恢复用户的设置(无论选项是打开还是关闭)。

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

【讨论】:

  • 谢谢,这行得通! (如果它是一种更好的语言,我会在操作周围添加一个范围,并且在该范围内有一个使用 RAII 设计模式实现设置更改的类型的局部变量,这样就更难忘记将其更改回来。但是那是另一个问题:codereview.stackexchange.com/questions/182278/…)。
猜你喜欢
  • 1970-01-01
  • 2017-10-20
  • 1970-01-01
  • 1970-01-01
  • 2014-08-10
  • 1970-01-01
  • 2012-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多