こんにちは。
おもしろそうだったので、色名からカラーインデックス変換までを関数
化してみましたが....
たぶん、カラーパレットの Click イベントをフックするのは無理では
ないかと思います。
' // 現在カラーパレットで選択されている色のカラーインデックスを返す
Public Function GetColorIndexFromPallet() As Long
' // ※ セル着色用パレット分しか対応してませんが、一応カスタマイズ
' // ※ されたパレットでも大丈夫なようです
Dim sText As String
Dim vBuf As Variant
Dim i As Long
' // Excel ディフォルトパレット
Const COLOR_NAME As String = "自動," _
& "黒,茶,オリーブ,濃い緑,濃い青緑,濃い青,インディゴ,80% 灰色," _
& "濃い赤,オレンジ,濃い黄,緑,青緑,青,ブルーグレー,50% 灰色," _
& "赤,薄いオレンジ,ライム,シーグリーン,アクア,薄い青,紫,40% 灰色," _
& "ピンク,ゴールド,黄,明るい緑,水色,スカイブルー,プラム,25% 灰色," _
& "ローズ,ベージュ,薄い黄,薄い緑,薄い水色,ペールブルー,ラベンダー,白"
Const COLOR_IDEX As String = "-4142," _
& "1,53,52,51,49,11,55,56," _
& "9,46,12,10,14,5,47,16," _
& "3,45,43,50,42,41,13,48," _
& "7,44,6,4,8,33,54,15," _
& "38,40,36,35,34,37,39,2"
AppActivate (Application.Caption)
With Application.CommandBars.Add(Temporary:=True)
sText = .Controls.Add(ID:=1691).TooltipText
sText = Mid$(sText, InStr(sText, "(") + 1)
sText = Left$(sText, Len(sText) - 1)
.Delete
End With
' // ToolTipText からカラーインデックスを取得する
vNam = Split(COLOR_NAME, ",")
vIdx = Split(COLOR_IDEX, ",")
For i = 0 To UBound(vNam)
If sText = CStr(vNam(i)) Then
GetColorIndexFromPallet = CLng(vIdx(i))
Exit For
End If
Next i
End Function
お礼
わざわざマクロを書いていただき、ありがとうございます やはり色名→ColorIndexの変換は、自分でテーブルもしくは配列を準備しないとならないのですね。もしカラーパレットのコレクションがあればより簡単に取得できるかと考えたのですが… 納得できました。回答ありがとうございました。