我认为“在任何位置搜索具有两个或多个大写字母的单词并找到整个单词”是不可能的,除非与宏代码结合使用。无论如何,由于您使用的是宏,因此这是一种使用以下示例文本对我有用的方法
CoP, this That and AnoTher thing W3C, DVDs and CD-ROM
和这个通配符组合(请注意,我的 Windows 配置中的列表分隔符是;
,对于其他区域,
可能需要 a )。
<[A-Z][0-9A-Z\-a-z]{1;10}>
以下函数检查“找到”范围内的第二个或任何后面的字母是否大写,并向调用过程返回一个布尔值。它遍历给定的字符Range
,检查 ASCII 值。一旦找到,循环退出。
Function ContainsMoreThanOneUpperCase(rng As Word.Range) As Boolean
Dim nrChars As Long, i As Long
Dim char As String
Dim HasUpperCase
HasUpperCase = False
nrChars = rng.Characters.Count
For i = 2 To nrChars
char = rng.Characters(i).text
If Asc(char) >= 65 And Asc(char) <= 90 Then
'It's an uppercase letter
HasUpperCase = True
Exit For
End If
Next
ContainsMoreThanOneUpperCase = HasUpperCase
End Function
使用它的一个例子:
Sub FindAcronyms()
Dim rngFind As Word.Range
Dim bFound As Boolean
Set rngFind = ActiveDocument.content
With rngFind.Find
.text = "<[A-Z][0-9A-Z\-a-z]{1;10}>"
.MatchWildcards = True
.Forward = True
.wrap = wdFindStop
bFound = .Execute
Do While bFound
If bFound And ContainsMoreThanOneUpperCase(rngFind) Then
Debug.Print rngFind.text
rngFind.HighlightColorIndex = wdBrightGreen
End If
rngFind.Collapse wdCollapseEnd
bFound = .Execute
Loop
End With
End Sub