- ベストアンサー
エクセルVBAのユーザーフォーム上のコマンドボタンに「フォントの色」の
エクセルVBAのユーザーフォーム上のコマンドボタンに「フォントの色」の機能を搭載したいのですが、具体的にどういうマクロを書けばいいのかわからずに困っています。 CommandBars.FindControl(ID:=401).Execute 以下のような行をコマンドボタンに登録してみたのですが、実行するとコマンドメニュー上の「フォントの色」ボタンの下に、色の選択肢がポップアップされてしまいます。ユーザーフォーム上のボタンのしたに、色選択のポップアップを表示したいのですが、どなたか方法をご教示いただけますと幸いです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
モジュール冒頭に追加。 Option Explicit Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMillsecounds As Long) Private Sub CommandButton1_Click()の後半を変更。 : With Application.CommandBars("Font Color") .Position = msoBarFloating .Left = L * DPI / PPI .Top = T * DPI / PPI .Visible = True While .Visible Sleep 1 DoEvents Wend End With Me.CommandButton1.BackColor = ActiveCell.Font.Color End Sub とやるとポップアップを閉じたタイミングで反映します。 ...あまり深く考えてないです。&そんなに検証してないのでうまくいかなかったら工夫してみてください。
その他の回答 (1)
- end-u
- ベストアンサー率79% (496/625)
Private Sub CommandButton1_Click() Const DPI As Long = 96 'Dot per inch Const PPI As Long = 72 'Point per inch Dim L As Single Dim T As Single With Me L = .Left + (.Width - .InsideWidth) / 2 T = .Top + .Height - .InsideHeight With .CommandButton1 L = L + .Left T = T + .Top + .Height End With End With With Application.CommandBars("Font Color") .Position = msoBarFloating .Left = L * DPI / PPI .Top = T * DPI / PPI .Visible = True End With End Sub 概ねこんな感じでCommandButton1下にポップアップさせます。 DPIは固定してますが、環境によるのでWinAPIのGetDeviceCaps関数を使って取得するようにしたほうが良いかもしれません。
お礼
>end-u様 ご回答ありがとうございます。 上記の方法でイメージどおりです。 一点追加でご質問させてください。 現在、CommandButton1の色を便宜上、黒で塗っているのですが、CommandButton1を直近に選ばれた色(たとえば緑)で塗ることはできるのでしょうか? 趣旨は、よりエクセルのコマンドバーに近づけたいというものです。 【イメージしている動作】 CommandButton1を押すとボタンの色(例えば緑)を適用。 ↓ CommandButton1の横に新たに設ける↓ボタンを押すと上でご教示いただいたマクロが走り、例えば(赤)を選んだ場合にはフォントが赤色になり、ポップアップを閉じた後にはCommandButton1の色が赤色になる。 考え方の道筋をご教示いただけますと幸甚です。
お礼
無事に解決致しました。 いろいろと御教示いただきましてありがとうございました。