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

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

mitarashiの回答

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

古いコレクションから引っ張り出しましたが動作しました。Window7Home-64bit + xl2010-32bit 時代も変わっているので、もっと簡単な方法もあるかも。ご参考まで。 ☆UserForm1モジュール Dim myPalette As Class1 Private Sub UserForm_Initialize() Set myPalette = New Class1 End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) Set myPalette = Nothing End Sub Private Sub CommandButton1_Click() Me.CommandButton1.BackColor = myPalette.colorCode End Sub ☆Class1モジュール - 挿入、クラスモジュールで生成されるClass1モジュールに記述して下さい。 '色選択のダイアログを表示して、色コードを取得するクラス 'プロパティ colorCode に色のコードを与える 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_PREVENTFULLOPEN = &H4 Private Const CC_RGBINIT = &H1 Private Const GMEM_MOVEABLE = &H2 Private Const GMEM_ZEROINIT = &H40 Private Const GHND = (GMEM_MOVEABLE Or GMEM_ZEROINIT) Private Declare Function Color_Choose Lib "comdlg32.dll" Alias "ChooseColorA" (pChoosecolor As YCHOOSECOLOR) As Long Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long 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 Function ColorDialog(ByRef color As Long) As Long '戻り値は、1の場合は色の選択、0の場合はキャンセルボタンのクリックになります。 '引数colorに選択された色コードをセットします。 Dim col As YCHOOSECOLOR Dim longret As Long Dim longret2 As Long Dim custcol(15) As Long Dim rescol As Long Dim I As Integer Dim colorsize As Long Dim colorAddress As Long Dim memhandle As Long rescol = 0 longret2 = 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 longret2 = Color_Choose(col) longret = GlobalUnlock(memhandle) longret = GlobalFree(memhandle) Else longret = GlobalFree(memhandle) End If End If color = col.rgbResult 'Color_Choose関数の戻り値をを戻す 0:キャンセル、1:色が選択された ColorDialog = longret2 End Function Public Property Get colorCode() As Long Dim ret As Long ret = ColorDialog(myColorCode) colorCode = myColorCode End Property

iapetus
質問者

お礼

この短時間に、これほど高度なご回答を頂けるとは夢にも思っていませんでした。 素晴らしいスキルをお持ちの方だとお見受け致します。 実は、VBA初心者からやっと頭一つ抜け出した程度なので、ガッカリなさらないで頂きたいのですが。 DLLを呼ぶ手法は経験がなく、些か戸惑いが無くはないですが、これは完全なクリアランスです。 クラスモジュールを使うのも、初めての経験ですが、多分これで意味と使い方が理解できます。 そういう意味で、自分にとって勉強の機会でもあり、コードを惜しげもなく公開して下さったことに、いくら言葉を並べても感謝しきれません。 恐縮ですが、私のスキル不足のせいで動作しない可能性も鑑み、少しの間、ここを閉じずに置き、補足を入れさせて頂くかもしれません。 その節は、お手間でなければ、ご指導を仰がせて頂けたら幸いです。 この度は、本当にありがとうございました。

関連する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 以下のような行をコマンドボタンに登録してみたのですが、実行するとコマンドメニュー上の「フォントの色」ボタンの下に、色の選択肢がポップアップされてしまいます。ユーザーフォーム上のボタンのしたに、色選択のポップアップを表示したいのですが、どなたか方法をご教示いただけますと幸いです。