玛丽相当多地使用宏在其文档中添加文本。问题是,如果添加的文本包含撇号,则将撇号作为“纯”而不是“智能”添加到文本中。她表示她已经设置了“键入时自动套用格式”设置,该设置告诉Word使用智能引号而不是直引号,但对我的宏插入的文本没有影响。

当您通过使用宏而不是键入将文本插入文档中时,Word分别对文本进行不同的处理。输入每个字符时,将处理您键入的文本。宏插入的文本被视为粘贴到文档中的文本。因此,如果键入“这是我的文字”,Word将在每个字符之后进行处理。这意味着程序有时间检查自动套用格式和自动更正以及Word处理文本的所有其他事情。

当您使用宏输入相同的文本时,它会作为一个块插入,就像您将其粘贴到位一样。这意味着本来不会被“捕获”和处理的文本中间的任何字符(例如引号或撇号)都将被“捕获”或处理。这意味着,如果直接引号包含在宏插入的文本中,则不会将其更改为智能引号。

您可以通过两种方法来解决此问题。第一种是让您的宏插入所有文本之后,执行查找和替换操作,以将所有引号替换为引号,并将撇号替换为撇号。这听起来可能很奇怪,但是如果您将“键入时自动套用格式”设置为使用智能引号,则查找和替换操作最终会将直接引号更改为智能引号。

如果您的宏在文档中插入了大量文本,则采用这种方法。如果要插入较小的文本块,则可以更轻松地确保宏插入了正确的ASCII码以作为智能引号的开头。常规引号的ASCII码为34,但是智能开始引号的编码为147,结束引号的编码为148。用于撇号的代码也有类似的区别。如果使用Chr函数插入正确的字符,则将始终具有所需的引号。

一种方法是在宏的开头附近使用类似于以下代码的代码:

If Options.AutoFormatAsYouTypeReplaceQuotes = True Then     sAposOpen = Chr(145)

sAposClose = Chr(146)

sQuoteOpen = Chr(147)

sQuoteClose = Chr(148)

Else     sAposOpen = Chr(39)

sAposClose = Chr(39)

sQuoteOpen = Chr(34)

sQuoteClose = Chr(34)

End If

此代码检查是否为智能引号打开了“键入时自动套用格式”设置。如果是这样,则将四个变量设置为用于智能引号的正确ASCII代码。如果未打开,则将变量设置为直引号的正确代码。然后,您以后可以在汇编和插入文本时在宏中使用这些变量。

例如,如果要插入文本“我兄弟的房子在街上”,则可以按以下方式插入:

sMyString = "my brother" & sAposClose & "s house is down the street"

Selection.InsertAfter " " & sMyString

如果您发现这种方法很麻烦(以这种方式分解字符串),那么还有另一种选择。您可以创建自己的函数,一次在字符串中进行适当的替换。

以下宏将很好地完成此工作:

Function RepQuotes(sRaw As String) As String     Dim sTemp As String     Dim sAposOpen As String     Dim sAposClose As String     Dim sQuoteOpen As String     Dim sQuoteClose As String

If Options.AutoFormatAsYouTypeReplaceQuotes = True Then         sAposOpen = Chr(145)

sAposClose = Chr(146)

sQuoteOpen = Chr(147)

sQuoteClose = Chr(148)

Else         sAposOpen = Chr(39)

sAposClose = Chr(39)

sQuoteOpen = Chr(34)

sQuoteClose = Chr(34)

End If

sTemp = Replace(sRaw, " " & Chr(39), sAposOpen)

sTemp = Replace(sTemp, Chr(39), sAposClose)

sTemp = Replace(sTemp, " " & Chr(34), sQuoteOpen)

sTemp = Replace(sTemp, Chr(34), sQuoteClose)

RepQuotes = sTemp End Function

您要做的是像平常一样构造文本字符串,然后将它们通过RepQuotes宏传递。宏确定要使用的正确引号,然后进行转换。它通过在引号之前是否有空格来确定引号在文本中是开头引号还是结尾引号。如果存在,则假定其为开场报价;否则为空。如果不是,则为结束语。

注意:

如果您想知道如何使用此页面(或_WordTips_网站上的任何其他页面)中描述的宏,我准备了一个包含有用信息的特殊页面。

_WordTips_是您进行经济有效的Microsoft Word培训的来源。

(Microsoft Word是世界上最流行的文字处理软件。)本技巧(11833)适用于Microsoft Word 2007、2010、2013和2016。您可以在此处找到适用于Word较旧菜单界面的本技巧的版本: