テーマ色の値 : マクロ記録のマイナス値とRGB値について

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.ColorFont.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 以下のプロパティセットが設定されるようです。

[デザイン]-[配色]でテーマカラーを変えると…
ColorIndexRGB は配色に応じて変化します。Color の値は保持されます。
Wordでマクロ記録をすると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
[検索と置換]ダイアログボックスでのRGB値の指定
[検索と置換]ダイアログボックスの[書式]からRGB値を指定した場合の対象は、Colorプロパティだけです。Fill.ForeColor.RGBは対象になりません。
つまり、ColorプロパティにRGB値を持たない「テーマの色」は、RGB値を指定した時点で対象外になります。

参考 : Excelではどうなっている?

操作やUIがほとんど同じExcelで、同じくテーマの色「緑、アクセント 6、黒 + 基本色 25%」を設定してみます。参考になるコードが見つけられるでしょうか。

With Selection.Font
  .ThemeColor = xlThemeColorAccent6
  .TintAndShade = -0.249977111117893
End With

WordとExcelでは、仕様は同様でも仕組みは別物のようですね…。

Wordには ThemeColorプロパティはなく、類似のプロパティはありますがFontオブジェクトのものではありません。
Word.ColorFormat.WdThemeColorIndex

 

タイトルとURLをコピーしました