記号は黒字、文字は白字にするマクロ
記号を黒字、文字を白字にする
前回
を用いて、記号は黒字に、文字は白字にするメソッドを作った。
コード
コードは次の通り。
リスト1 標準モジュール
Private Sub changeFontColor(ByVal targetFont As Font) '……(1)' If isSign(targetFont.Parent.Text) Then _ targetFont.ColorIndex = wdBlack: Exit Sub '……(2)' targetFont.ColorIndex = wdWhite '……(3)' End Sub
(1)の
Private Sub changeFontColor(ByVal targetFont As Font)
で、引数としてFont
オブジェクトを受け取るように設定。
(2)の
If isSign(targetFont.Parent.Text) Then _ targetFont.ColorIndex = wdBlack: Exit Sub
下のリスト2に示すisSign
メソッドには、String
型の引数を渡さないといけないので、
targetFont.Parent.Text
と、一旦引数のFont
オブジェクトのParent
プロパティを参照してRange
オブジェクトを取得し、そのRange
オブジェクトのText
プロパティを参照することによってString
型の値(つまり、文字列)を得ている。
isSign
メソッドがTrue
を返してきたときには、その文字列は記号だということなので、
targetFont.ColorIndex = wdBlack: Exit Sub
でフォントの色を黒にして、処理を抜ける。
isSign
メソッドがFalse
を返していたら、その文字列は記号でなく文字だということなので、(3)の
targetFont.ColorIndex = wdWhite
でフォントの色を白にして処理を抜けることになる。
【参考】リスト2 標準モジュール
Private Function isSign(ByVal targetCharacter As String) As Boolean
isSign = False
Dim str As String
str = "、 。 , . ・ : ; ? ! "
str = str & "゛ ゜ ´ ` ¨ ^  ̄ _ 〇 "
str = str & "― ‐ / \ ~ ∥ | … ‥ "
str = str & "‘ ’ ( ) 〔 〕 [ "
str = str & "] { } 〈 〉 《 》 「 」 "
str = str & "『 』 【 】 ° ′ ″ "
str = str & "! "" ' ( ) , - . / : ; ?"
str = str & " " & Chr(&H8167) & " " & Chr(&H8168)
Dim ar As Variant
ar = Split(str)
Dim i As Long
For i = LBound(ar) To UBound(ar)
If targetCharacter = ar(i) Then isSign = True: Exit Function
Next
End Function
実験
こんな文章を用意し、次のコードを実行する。
リスト3 標準モジュール
Public Sub test() Dim i As Long With ThisDocument.Paragraphs(4).Range For i = 2 To .Characters.Count Call changeFontColor(.Characters(i).Font) Next End With End Sub
Paragraphs
コレクションの4番目、上の画像で言うと、
孔明はうなずいた。その通りであると肯定しているものの如くである。そして彼は彼の考えどおり軍を進ませた。隴右の大路へ出でて正攻法を取ったものである。
の段落について、2文字目から最後まで、文字だったら白字、記号だったら黒字にするというコード。
これを実行すると、
こうなった。
おわりに
これで、また一歩、目的に近づいた。