• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:コマンドボタンの色をパレットを表示して選ばせたい)

コマンドボタンの色をパレットを表示して選ばせたい

mitarashiの回答

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

#1,2です。たびたびすみませんが、カスタムカラーは新規マスを選択後、「色の追加」を押せば良いのでした。 追加したカスタムカラーをワークシートに保存、読み出しする様にしてみました。ご参考まで。 '☆UserFormモジュール Dim myPalette As Class1 Private Sub CommandButton1_Click() Me.CommandButton1.BackColor = myPalette.colorCode End Sub Private Sub UserForm_Initialize() Set myPalette = New Class1 Set myPalette.dataSheet = ThisWorkbook.Sheets(1) '色保存用のワークシートを設定 End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) Set myPalette = Nothing End Sub '☆Class1モジュール Private Declare Function Color_Choose Lib "comdlg32.dll" Alias "ChooseColorA" _ (pChoosecolor As YCHOOSECOLOR) As Long Private Type YCHOOSECOLOR lStructSize As Long hwndOwner As Long hInstance As Long rgbResult As Long lpCustColors As Long flags As Long lCustData As Long lpfnHook As Long lpTemplateName As String End Type Private Const CC_RGBINIT = &H1 'rgbResultで指定したカラー値をデフォルトにする Private Declare Function GlobalAlloc Lib "kernel32" _ (ByVal wFlags As Long, ByVal dwBytes As Long) As Long Private Const GMEM_MOVEABLE = &H2 Private Const GMEM_ZEROINIT = &H40 Private Const GHND = (GMEM_MOVEABLE Or GMEM_ZEROINIT) Private Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" _ (Destination As Any, Source As Any, ByVal length As Long) Private myColorCode As Long Private col As YCHOOSECOLOR Private custcol(15) As Long Private memhandle As Long Private colorAddress As Long Private colorsize As Long Private myColorDataSheet As Worksheet Private Function ColorDialog(ByRef color As Long) As Long Dim longret2 As Long longret2 = 0 longret2 = Color_Choose(col) color = col.rgbResult ColorDialog = longret2 End Function Public Property Get colorCode() As Long Dim ret As Long ret = ColorDialog(myColorCode) colorCode = myColorCode End Property Private Sub Class_Initialize() Dim longret As Long Dim i As Integer Dim rescol As Long rescol = 0 For i = 0 To 15 custcol(i) = &HFFFFFF Next colorsize = Len(custcol(0)) * 16 memhandle = GlobalAlloc(GHND, colorsize) If memhandle Then colorAddress = GlobalLock(memhandle) If colorAddress Then Call MoveMemory(ByVal colorAddress, custcol(0), colorsize) With col .lStructSize = Len(col) .hInstance = 0& .rgbResult = rescol .lpCustColors = colorAddress .flags = CC_RGBINIT .lCustData = 0& .lpfnHook = 0& .lpTemplateName = 0& End With Else longret = GlobalFree(memhandle) End If End If End Sub Private Sub Class_Terminate() Dim longret As Long Dim i As Long Dim strColor As String 'カスタムカラーを配列に書き戻す Call MoveMemory(custcol(0), ByVal colorAddress, colorsize) If Not myColorDataSheet Is Nothing Then With myColorDataSheet For i = 0 To 15 .Cells(i + 1, 1).Value = Right("000000" & Hex(custcol(i)), 6) Next i End With End If longret = GlobalUnlock(memhandle) longret = GlobalFree(memhandle) End Sub Public Property Set dataSheet(newSheet As Worksheet) Dim i As Long Set myColorDataSheet = newSheet '最小限のエラー処理、初回用 If myColorDataSheet.Cells(1).Value <> "" Then With myColorDataSheet For i = 0 To 15 custcol(i) = CLng("&H" & .Cells(i + 1, 1).Value) Next i End With Call MoveMemory(ByVal colorAddress, custcol(0), colorsize) End If End Property '☆色データ保存用ワークシートの内容例A1以下、A列 0F29E1 34CFE0 26DF79 D5E22C D92B26 B1387B C82BC8 CAD2FD FFFFFF FFFFFF 1AB321 FFFFFF FFFFFF CA3182 FFFFFF 4429C2

iapetus
質問者

お礼

追補の情報ありがとうございます。 やはりこれくらいのコードが必要になるんですね。 惜しげもなくそれを作成・公開して頂けたことに感謝です!

関連するQ&A

  • VB6、コマンドボタンの背景色を変更するには?

    コマンドボタンのBackColorプロパティをいじってもコマンドボタンのCaptionの背景の色が変更されません。 ラベルコントロールとかだと同じプロパティをいじると色が変わるのですが… 色を変えるにはどうすればよいでしょうか?

  • コマンドボタンに色を着けたい

    マクロのコマンドボタンに着色して使いたいのですが・・・

  • コマンドボタンプロパティでStyleの設定

    Visual Basic 6.0 コマンドボタンのプロパティでStyleの設定を[1-グラフィックス]に 設定した後、BackColorを変更してボタンに色を付けています。 この方法が使用出来るパソコンと出来ないパソコンがあるため、 (文字化けや色が表示されないなど、原因は不明) 複数あるコマンドボタンのStyle設定をまとめて変更したいのですが、 イベントのステートメントへ CommandButton.Style = 0 では変更出来ません。 この設定はプロパティで変更する以外方法は無いのでしょうか? コマンドボタンが各フォーム合わせて200以上あるので変更が大変です。 誰かわかる方いましたら教えて下さい。

  • コマンドボタンに色を付けることは可能ですか?

    こんばんは、 アクセス2003を使用しています。 フォーム上のコマンドボタンに色をつけたいのですがうまくいきません。 プロパティに「前景色」はあるのですが「背景色」はありません。 コマンドボタンを右クリックして「塗り潰し/背景の色」を選択しようとしても選べない状態です。 無理なのでしょうか? よろしくお願いします。

  • コマンドボタンについて

    Excel(2000)のコマンドボタンについての質問です。 コマンドボタンの輪郭を消すことは可能でしょうか? プロパティのBackcolorで背景を白または透明にすることは出来るのですが、 周囲を囲む輪郭を消すことが出来ません。 Captionを印刷物として表示させることを意図しているので 印刷物として全てを印刷しない「コントロールの書式設定」からの 「オブジェクトを印刷する」のチェックボタンは狙った意図にはなりません。 ご教授願います。

  • エクセルの色パレットについて

    いつもお世話になります。 エクセルのツールバーに「塗りつぶしの色」もしくは 「フォントの色」というボタンがありますが、これを クリックすると、色のパレットが表示されます。 ある日気づいたのですが、このパレットに最初から 表示されている色がパソコンによって違うのですが、 何故でしょう? また、自分の好みの色が最初から表示されるように 変更することは可能なのでしょうか?

  • エクセル2007VBAでコマンドボタンのプロパティ表示

    いつもお世話になります。最近エクセル2007でVBAを使うようになりました。フォームコントロールからコマンドボタンを挿入したのですが、コマンドボタンのプロパティを表示しようとしても表示できません。2003では表示できます。2003では、コマンドボタンを選択して右クリック→プロパティでEnabledやVisibleを設定できました。2007ではどうすればコマンドボタンのプロパティを表示できるのでしょうか?

  • Access2002 コマンドボタンの色

    Access2002 コマンドボタンについての質問です フォームのコマンドボタンの色を自分の好みに変えたいのですが出来ますか? デザインビューで探してもそれらしきプロパティが見つからないのですが。

  • エクセルのコマンドボタンについて

    エクセルのコマンドボタンについて エクセル2007にて、シートにコマンドボタン(ActiveXコントロール)を配置し、 プロパティーで、表示する文字やフォントを設定しました。 が、コマンドボタンを選択した時だけ通常の大きさで表示され、選択が解除されると縮めたように、文字だけ小さくなってしまいます。 何か設定がわるいのでしょうか? 原因がわかる方がおられましたら、ご教授いただけませんでしょうか? よろしくお願いいたします。

  • エクセルVBAのユーザーフォーム上のコマンドボタンに「フォントの色」の

    エクセルVBAのユーザーフォーム上のコマンドボタンに「フォントの色」の機能を搭載したいのですが、具体的にどういうマクロを書けばいいのかわからずに困っています。 CommandBars.FindControl(ID:=401).Execute 以下のような行をコマンドボタンに登録してみたのですが、実行するとコマンドメニュー上の「フォントの色」ボタンの下に、色の選択肢がポップアップされてしまいます。ユーザーフォーム上のボタンのしたに、色選択のポップアップを表示したいのですが、どなたか方法をご教示いただけますと幸いです。