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。