• ベストアンサー

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

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

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.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 とやるとポップアップを閉じたタイミングで反映します。 ...あまり深く考えてないです。&そんなに検証してないのでうまくいかなかったら工夫してみてください。

tosa0507
質問者

お礼

無事に解決致しました。 いろいろと御教示いただきましてありがとうございました。

その他の回答 (1)

  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

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関数を使って取得するようにしたほうが良いかもしれません。

tosa0507
質問者

お礼

>end-u様 ご回答ありがとうございます。 上記の方法でイメージどおりです。 一点追加でご質問させてください。 現在、CommandButton1の色を便宜上、黒で塗っているのですが、CommandButton1を直近に選ばれた色(たとえば緑)で塗ることはできるのでしょうか? 趣旨は、よりエクセルのコマンドバーに近づけたいというものです。 【イメージしている動作】 CommandButton1を押すとボタンの色(例えば緑)を適用。 ↓ CommandButton1の横に新たに設ける↓ボタンを押すと上でご教示いただいたマクロが走り、例えば(赤)を選んだ場合にはフォントが赤色になり、ポップアップを閉じた後にはCommandButton1の色が赤色になる。 考え方の道筋をご教示いただけますと幸甚です。