プロが教えるわが家の防犯対策術!

ご存じの方がいらしたらご教示お願いします。
 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も取得できると考えての質問です

A 回答 (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
    • good
    • 0
この回答へのお礼

わざわざマクロを書いていただき、ありがとうございます

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

納得できました。回答ありがとうございました。

お礼日時:2007/06/07 19:13

こんばんは。



いつも読ませていただいております。

>塗りつぶし色のカラーパレットに表示する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でイベントを付けようとしたのですが、それに失敗して、最初の思惑とはだいぶ規模の小さな解決になってしまいました。(^^;
    • good
    • 0
この回答へのお礼

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

今回教えていただいたことを手がかりに深堀りしてみます
ご回答ありがとうございました

お礼日時:2007/06/07 09:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!