Wordでフォントなどの色の指定を確認するためにマクロの記録をしてみると、Font.Color = -654262273 のような結果になります。この値はどのように用いればよいのでしょうか?
マイナスのColor値 はRGB値ではない?
この特殊な値は、「テーマの色」を選択したときに現れます。ここでは「緑、アクセント 6、黒 + 基本色 25%」を設定して調査します。
テーマの色 と 標準の色 の比較
比較用に「標準の色」の緑 も設定してみます。マクロの記録で文字色関連では以下のコードが記録されます。
'① テーマの色 : 緑、アクセント 6、黒 + 基本色 25%
Selection.Font.Color = -654262273
'② 標準の色 : 緑
Selection.Font.Color = 5287936
それぞれを16進数に変換します。
① テーマの色 : -654262273 = FFD900BFFF
② 標準の色 : 5287936 = 50B000
標準の色は6桁(24ビット)でRGB値っぽいですが、テーマの色は10桁で正体不明です。
次に[色の設定]ダイアログボックスからそれぞれのRGB値を確認し、16進数に変換します。
① テーマの色 : RGB(83,129,53) = 358153
② 標準の色 : RGB(0,176,80) = 50B000
「標準の色」はColorプロパティとRGB値が同じですが、やはり「テーマの色」は別の値ですね。
Font.Fill.ForeColor にも色情報
色情報は、Font.Color や Font.ColorIndex のほかに、Font.Fill.ForeColor 以下にもあるのです。次の2つについてそれぞれのプロパティを見てみます。
① テーマの色 : 緑、アクセント 6、黒 + 基本色 25%
② 標準の色 : [色の設定]ダイアログボックスで①と同じRGB値を指定
| プロパティ | ① テーマの色 | ② 標準の色 |
Color |
-654262273 |
3506515 |
ColorIndex |
wdGray50 |
|
Type |
msoColorTypeScheme |
msoColorTypeRGB |
ObjectThemeColor |
wdThemeColorAccent6 |
wdNotThemeColor |
RGB |
3506515 (RGB(83,129,53)) |
|
TintAndShade |
-0.25 |
-0 |
Brightness |
-0.75 |
-1 |
「テーマの色」を指定すると、Fill.ForeColor 以下のプロパティセットが設定されるようです。
Selection.Font.Color = XXXXとなるのに、VBEで Selection.Font. と入力しても候補に Color が現れないのも、こうした背景からなのかもしれません。まとめ : Word VBA でのフォントの色の扱い
フォントの色の設定
フォントの色の指定には、Font.Color で確認した数値をフォント色セットの定数のように使用するのが妥当なようです。そうすれば、「テーマの色」と「標準の色」のどちらにも対応できます。ただ、数値の意味がわからなくなるので色名のコメントを付けておくとよいでしょう。
' テーマ色: 緑、アクセント6、黒+基本色25%
RangeA.Font.Color = -654262273
' RangeC の文字色を RangeB に合わせる
RangeB.Font.Color = RangeC.Font.Color
RGB値の確認
[色の設定]ダイアログボックスに表示されるRGB値を取得するには、Font.Fill.ForeColor.RGB を使用します。Font.Colorではテーマの色のRGB値が得られません。
' 標準の色の場合は同じ値になる
With Selection.Characters(1).Font
MsgBox "色の値 : " & Hex(.Color) & vbCrLf & _
"RGB値 : " & Hex(.Fill.ForeColor.RGB), _
vbInformation, "フォントの色"
End With
参考 : Excelではどうなっている?
操作やUIがほとんど同じExcelで、同じくテーマの色「緑、アクセント 6、黒 + 基本色 25%」を設定してみます。参考になるコードが見つけられるでしょうか。
With Selection.Font
.ThemeColor = xlThemeColorAccent6
.TintAndShade = -0.249977111117893
End With
WordとExcelでは、仕様は同様でも仕組みは別物のようですね…。
Wordには ThemeColorプロパティはなく、類似のプロパティはありますがFontオブジェクトのものではありません。
Word.ColorFormat.WdThemeColorIndex
