独自のコマンドバーを作る

コントロールツールボックスを使い、ワークシート上にボタンを作ることができますが、どのシートをアクティブにしていても利用できるボタンといえば、やはりVBAによるコマンドバーを作る以外にはありません。さらに既定のコマンドバーを消してしまえば、独自の環境を作り上げることができます。

Public MyCB As CommandBar

Sub 独自のコマンドバーを作る()
  With Application.CommandBars.Add("MyCommandBar", msoBarTop, False, True)
    .Visible = True
    With .Controls
      With .Add(msoControlButton)
        .Style = msoButtonIconAndCaption       ' アイコンを表示する場合
 '       .Style = msoButtonCaption                          ' アイコンを表示しない場合
        .Caption = "Button1(&A)"
        .OnAction = "Macro1"
        .FaceId = 2                                     ' アイコンを表示する場合
      End With
      With .Add(msoControlPopup)
        .Caption = "Popup(&B)"
        With .Controls
          With .Add(msoControlButton)
            .Style = msoButtonIconAndCaption   ' アイコンを表示する場合
 '          .Style = msoButtonCaption                       ' アイコンを表示しない場合
            .Caption = "Button2"
            .OnAction = "Macro2"
            .FaceId = 3                                 ' アイコンを表示する場合
          End With
        End With
      End With
      With .Add(msoControlComboBox)
        .Caption = "ComboBox"
        .AddItem "List1"
        .AddItem "List2"
        .AddItem "List3"
        .Text = "List1"
        .OnAction = "Macro3"
      End With
      With .Add(msoControlEdit)
        .Caption = "EditBox"
        .OnAction = "Macro4"
        .Text = "Input Please"
      End With
    End With
  End With
  Set MyCB = Application.CommandBars("MyCommandBar")
End Sub

Sub Macro1()
  MsgBox "Button1 が押されました"
End Sub

Sub Macro2()
  MsgBox "Button2 が押されました"
End Sub

Sub Macro3()
  MsgBox "コンボボックスの値: " & MyCB.Controls("ComboBox").Text
End Sub

Sub Macro4()
  MsgBox "エディットボックスの値: " & MyCB.Controls("EditBox").Text
End Sub
  • 4行目のAddメソッドの引数の詳細はExcelのヘルプを参照してください。
  • StyleプロパティはControlButtonに対してのみ使用できます。
  • ControlButtonとControlPopupにはアクセスキーを設定できます。
  • ControlPopupをつなげれば階層を増やせます。
  • ComboBoxの値はリストの値以外でも取得できます。