在宏中检测句子的开头(Microsoft Word)
Shelley正在开发一个宏,该宏将更改“ provider that”(“ Provided That”,“ Provided That”等)的所有大写字母排列。
小写。这样做很容易,但是如果该短语以句子开头,则“ P”应大写。雪莱想知道宏中是否有一种方法可以判断句子开头是否有诸如“提供的那个”这样的短语。
有两种方法可以解决此问题。首先,您可以使用“查找并替换”来进行连续的搜索和替换。宏可以执行以下操作:
。将“提供的”的所有变体更改为小写。
。搜索“。提供那个”(句点,空格,“提供那个”),然后将其替换为“。提供那个”(大写)。
。重复搜索并在步骤2中使用其他句子结尾的标点符号(例如感叹号,问号或任何这些标点符号后加上引号)进行替换。
由于这是在宏中完成的,因此该过程应该很快进行。
这是一个可以完成此任务的示例:
Sub ChangeCase1() Dim vFindText As Variant Dim vReplaceText As Variant Dim orng As Range Dim i As Long vFindText = Array(". provided that", _ "! provided that", _ "? provided that", _ "."" provided that", _ "!"" provided that", _ "?"" provided that") vReplaceText = Array(". Provided that", _ "! Provided that", _ "? Provided that", _ "."" Provided that", _ "!"" Provided that", _ "?"" Provided that") ' Set all occurrences to lowercase Set orng = ActiveDocument.Range With orng.Find .ClearFormatting .Replacement.ClearFormatting Do While .Execute(FindText:="provided that", _ Forward:=True, _ Wrap:=wdFindStop) = True orng.Select orng = "provided that" orng.Collapse wdCollapseEnd Loop End With ' Account for end-of-sentence For i = 0 To UBound(vFindText) Set orng = ActiveDocument.Range With orng.Find .ClearFormatting .Replacement.ClearFormatting Do While .Execute(FindText:=vFindText(i), _ MatchCase:=True, _ Forward:=True, _ Wrap:=wdFindStop) = True orng.Select orng = vReplaceText(i) orng.Collapse wdCollapseEnd Loop End With Next End Sub
这种方法的一个缺点是它不允许在段落的开头出现“提供的”。可以对宏进行修改,以考虑到此类实例,但是它将更加复杂。
但是,可以使用另一种方法。这取决于Case属性的一种相当神秘的设置:wdTitleSentence。此设置将所有字符(一个明显的例外)更改为小写,并且如果该短语在句子的开头,则第一个字符更改为大写。在宏中使用它的方法如下:
Sub ChangeCase2() With Selection.Find .ClearFormatting .Wrap = wdFindContinue .Forward = True .Format = True .MatchCase = False .MatchWildcards = False .Text = "provided that" .Execute While .Found Selection.Range.Case = wdLowerCase Selection.Range.Case = wdTitleSentence Selection.Collapse Direction:=wdCollapseEnd .Execute Wend End With End Sub
请注意,在While循环中,对Case属性进行了两次分配。第一个将所选内容(找到的内容)设置为小写,第二个将其设置为句子的标题大小写。小写设置专门用于处理“一个明显的例外”
我提到过-如果文本“ PROVIDED that”位于句子的开头,则wdTitleSentence设置由于某种原因不会将其更改为“ Provided that”。但是,它将毫无问题地将“ provided that”(将其设置为小写形式的“ provided that”变成了“ provided that”)。
注意:
如果您想知道如何使用此页面(或_WordTips_网站上的任何其他页面)中描述的宏,我准备了一个包含有用信息的特殊页面。
_WordTips_是您进行经济有效的Microsoft Word培训的来源。
(Microsoft Word是世界上最流行的文字处理软件。)本技巧(13398)适用于Microsoft Word 2007、2010和2013。