質問: カラーパレットの色名はvbaで取得できますか? ご存じの方がいらしたらご教示お願いします。 http://oshiete1.goo.ne.jp/qa3061670.html を拝見して疑問に思ったことですが、塗りつぶし色のカラーパレットに表示するtooltipの「色名」はvbaで取得可能でしょうか 色だけであれば activeworkbook.colors(n) nは0~56 で取得できます。でもパレットの各色にマウスをポイントしたときにポップアップする「色名」はどんなコレクションで取得できるのでしょうか。 またカラーパレットで前回選択した色は「選択された状態」になっていますが、パレットの「この色が選択されている」ということを取得するプロパティもあるのでしょうか。 この質問は「現在選択されている色」は色名(文字列)としてなら application.commandbars("drawing").controls(n).tooltiptext ( n は id=1691 のコントロールのindex番号 ) で取得できるので、各パレットの「色名」を取得できれば、現在選択されているcolorも取得できると考えての質問です
回答: こんにちは。 おもしろそうだったので、色名からカラーインデックス変換までを関数 化してみましたが.... たぶん、カラーパレットの 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