内森(Nathan)经常遇到一个问题,即个人在文档中使用职位大写(例如“财务经理应提供…​”)。

他希望宏可以检查管理标题的每次使用并将其小写,除非有充分的理由在标题开始句子时对第一个单词进行大写。他想知道是否有可能在不输入所有三十个管理职称的情况下设置通配符来匹配第二个单词为“ manager”或“ managers”的任何两个单词的短语。

可以进行通配符搜索以找到您要查找的实例类型。您需要做的就是进行高级搜索,确保选中“使用通配符”复选框,然后在“查找内容”字段中使用此模式:

<[A-Za-z][a-z]{1,}>^32[Mm]anager*>

该模式将找到两个单词,其中第二个单词是经理。如果两个或两个词都大写或两个词都小写,它将找到该词。

问题是不可能将使用通配符找到的单词更改为全部小写。这意味着您需要手动检查找到的内容,然后手动进行任何必要的更改。如果您只需要偶尔执行一次,那么这并不太麻烦,因为“查找和替换”对话框不是模态的。 (这意味着您在文档中进行编辑时可以使对话框在屏幕上保持打开状态,然后在对话框中单击“查找下一个”以查找下一个匹配项。)

如果您需要经常进行此类更改,那么唯一的选择是创建一个可以为您进行更改的宏。下面的宏搜索上述相同的模式,然后正确更改职位的大小写。宏查找由两个词组成的职位,第二个词为“经理”,“经理”,“经理”或“经理”。然后,它会从单词中删除所有大写字母,除非标题以句子开头,在这种情况下,它只会从第二个单词中删除大写字母。

Sub FixManagerCapitalisation()

Dim aRange As Range     Dim bRange As Range

With Selection.Find         .ClearFormatting         .Text = "<[A-Za-z][a-z]{1,}>^32[Mm]anager*>"

.Replacement.Text = ""

.Forward = True         .Wrap = wdFindAsk         .MatchCase = False         .MatchWildcards = True         Do While .Execute             Set aRange = Selection.Range             Set bRange = Selection.Range             bRange.MoveEnd unit:=wdSentence             If bRange.Text <> Selection.Sentences(1).Text Then                 aRange = LCase(aRange.Words(1).Text) & Trim(aRange.Words(2))

End If             aRange = aRange.Words(1) & Trim(LCase(aRange.Words(2).Text))

aRange.Start = aRange.End             aRange.Select             .ClearFormatting         Loop     End With End Sub

注意:

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

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

(Microsoft Word是世界上最流行的文字处理软件。)本技巧(13080)适用于Microsoft Word 2007、2010、2013、2016、2019和Office 365中的Word。