プロが教える店舗&オフィスのセキュリティ対策術

エクセルVBAのユーザーフォーム上のコマンドボタンに「フォントの色」の機能を搭載したいのですが、具体的にどういうマクロを書けばいいのかわからずに困っています。

CommandBars.FindControl(ID:=401).Execute

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

A 回答 (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

とやるとポップアップを閉じたタイミングで反映します。
...あまり深く考えてないです。&そんなに検証してないのでうまくいかなかったら工夫してみてください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/02/24 00:39

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関数を使って取得するようにしたほうが良いかもしれません。
    • good
    • 0
この回答へのお礼

>end-u様

ご回答ありがとうございます。
上記の方法でイメージどおりです。

一点追加でご質問させてください。
現在、CommandButton1の色を便宜上、黒で塗っているのですが、CommandButton1を直近に選ばれた色(たとえば緑)で塗ることはできるのでしょうか?

趣旨は、よりエクセルのコマンドバーに近づけたいというものです。

【イメージしている動作】
CommandButton1を押すとボタンの色(例えば緑)を適用。

CommandButton1の横に新たに設ける↓ボタンを押すと上でご教示いただいたマクロが走り、例えば(赤)を選んだ場合にはフォントが赤色になり、ポップアップを閉じた後にはCommandButton1の色が赤色になる。

考え方の道筋をご教示いただけますと幸甚です。

お礼日時:2010/01/27 22:48

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