我有一个文档,其中包含已定义术语的索引。每个定义的术语都可以在引号内找到。无论在文档中实际使用该术语,它都不在引号内。如果在文档中使用每个术语,我想更改其格式(使文本浅灰色)。通过这种方式,我可以很容易地看到我的文档中还有哪些单词尚未定义(如果它们已被定义,它们会变得苍白,我不会注意到它们......暗文本突出)例如:
“猫”指猫科动物。 “帽子”意味着头盔。
猫戴着帽子。
一旦运行宏,我会转向此(我使用斜体代替灰色字体,因为我无法弄清楚如何更改字体颜色):
“ Cat ”表示猫科动物。 “帽子”意味着头盔。
Cat 戴着 Hat 。
我知道如何在Word中使用通配符来搜索引号中的所有单词,但是如何立即查找和替换所有这些单词用不同的字体躲过我。我一直在使用Find&替换每个定义的术语,使用所有术语时需要数小时才能显示灰色...
答案 0 :(得分:2)
好吧,现在我对Word中的Find()了解得比以往更多......
这对我来说是光测试,但只会处理单字术语的简单用例,其中没有术语是另一个术语的子串。
Sub Tester()
Dim col As New Collection
Dim wd, l
Dim rng As Range, doc As Document
Set doc = ThisDocument
Set rng = doc.Content
'collect all quoted terms
With rng.Find
.MatchWildcards = True
.MatchCase = False
.Forward = True
'matching straight or curly quotes...
Do While .Execute(FindText:="[""" & Chr(147) & "][a-zA-Z]{1,}[""" & Chr(148) & "]")
wd = Mid(rng.Text, 2, Len(rng.Text) - 2)
'skip error if already added
On Error Resume Next
col.Add wd, wd
If Err.Number = 0 Then Debug.Print "Quoted:", wd
On Error GoTo 0
Loop
End With
'search for each quoted term
For Each wd In col
Debug.Print "Searching:", wd
Set rng = doc.Content
With rng.Find
.MatchCase = False
.MatchWildcards = True
.MatchWholeWord = True
.Forward = True
'the only issue here is that the Find is case-sensitive...
'which is why we need to check for both the init-cap and lower-case versions
l = Left(wd, 1)
wd = "[" & LCase(l) & UCase(l) & "]" & Right(wd, Len(wd) - 1)
Do While .Execute(FindText:="[!""" & Chr(147) & "]" & wd & "[!""" & Chr(147) & "]")
Debug.Print " Found:", wd
rng.Font.ColorIndex = wdGray25
Loop
End With
Next
End Sub