Wordの機能では、蛍光ペンが設定された箇所の検索はできますが、その色の区別を指定することができません。文字色やスタイル名は特定して検索できるのに、蛍光ペンではできません。しかし、方法はあるのです。
今回は、その蛍光ペンの色を見分けるマクロを紹介します。検索マクロについては、前回紹介したこちらのコードを流用します。
基本のVBAコード
Set rngFind = ActiveDocument.Range(0, 0)
rngFind.Find.ClearFormatting
With rngFind.Find
.Forward = True
.Wrap = wdFindStop
.MatchCase = False
.MatchByte = False
.MatchWildcards = False
.MatchFuzzy = False
.Text = ""
.Highlight = True '蛍光ペン
End With
Do While rngFind.Find.Execute = True
ret = rngFind.HighlightColorIndex
Select Case ret
Case wdYellow
'蛍光ペン【黄色】の場合の処理
Case Else
'蛍光ペン その他色 の場合の処理
End Select
'蛍光ペンを解除
rngFind.HighlightColorIndex = wdNoHighlight
rngFind.Collapse Direction:=wdCollapseEnd
Loop
.Highlight = True
検索条件に「蛍光ペン」を指定しています。
ret
=
rngFind.HighlightColorIndex
検出されたrngFind
に設定されている蛍光ペン色(HighlightColorIndex
)を特定します。
つまり、蛍光ペンの色を指定しての検索はできない / 蛍光ペンを検出した後でその色を判定することはできる、というからくりです。
Select Case ret
~ End Select
色に応じた処理をCase
で分岐させています。
rngFind.HighlightColorIndex
=
wdNoHighlight
蛍光ペン「なし」にしています。処理完了後に蛍光ペンを残す必要がない場合に使います。
色が特定できない場合の対応
色の異なる蛍光ペンがつながっている箇所がある場合、それらはまとめて検出されるので注意してください。
冒頭の例では、「段落全体の色を変えたり」が rngFind
に入り、ret
には色を特定できない9999999
が返ります。この場合は少々やっかいで、色の確認と処理を1字ずつ行うことになります。
Do While rngFind.Find.Execute = True
ret = rngFind.HighlightColorIndex
'色が混在の場合 > 1字ずつ処理
If ret = 9999999 Then
For Each aChr In rngFind.Characters
ret = aChr.HighlightColorIndex
'retに応じてRangeを処理する関数
Call RangeEdit(aChr, ret)
Next aChr
'色が特定できる場合
Else
'retに応じてRangeを処理する関数
Call RangeEdit(rngFind, ret)
End If
rngFind.Collapse Direction:=wdCollapseEnd
Loop
' Function RangeEdit(myRange as Range, idx as Long)
' という関数で各所の処理を行う