• ベストアンサー

カラーパレットの色名は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も取得できると考えての質問です

質問者が選んだベストアンサー

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

こんにちは。 おもしろそうだったので、色名からカラーインデックス変換までを関数 化してみましたが.... たぶん、カラーパレットの 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

zap35
質問者

お礼

わざわざマクロを書いていただき、ありがとうございます やはり色名→ColorIndexの変換は、自分でテーブルもしくは配列を準備しないとならないのですね。もしカラーパレットのコレクションがあればより簡単に取得できるかと考えたのですが… 納得できました。回答ありがとうございました。

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 いつも読ませていただいております。 >塗りつぶし色のカラーパレットに表示するToolTipの「色名」はVBAで取得可能でしょうか この前、この話は出ていたと思いますが、現在のは、ツールアイコン(ControlGrid) の中の選択に関してで、「塗りつぶし」の中に関してのみです。 最初の開いている状態での、マクロの登録した時の第一回目だけ、このマクロはデフォルトなのか、塗りつぶしなのか、区別がつかないことがあるだけですが、後は大丈夫だと思います。(理由は、Static 変数で、InstanceIdを確保していないからです。最初、デフォルトの色と塗りつぶしなしとは分からないからです。InstanceID自体は、何も意味がありませんが、マクロの第一回目を取得するためです。) Sub getColorName() Dim myColor As String Const DEFCOLOR As String = "黄" Static oldID As Long  With Application.CommandBars("Formatting").FindControl(, 1691)   oldID = .Controls("配色(&C)").InstanceId   myColor = .Controls("配色(&C)").TooltipText   If myColor Like "配色*" And oldID > 0 Then      myColor = "色つぶしなし"   ElseIf myColor Like "配色*" Then     myColor = DEFCOLOR   End If     MsgBox myColor  End With End Sub 前回、実は、この ControlGrid には、新たに、RaiseEventでイベントを付けようとしたのですが、それに失敗して、最初の思惑とはだいぶ規模の小さな解決になってしまいました。(^^;

zap35
質問者

お礼

いつも勉強させていただいております 先日の質問も拝見していましたが「Global変数で前回の塗りつぶし色を記憶しておく」方法を紹介されており、ボタンから色を取得する方法については参考程度に書かれていたので、自分なりに考えてみた次第です 今回教えていただいたことを手がかりに深堀りしてみます ご回答ありがとうございました