マクロを起動したりエクセルの機能を呼び出すボタンを、配置する方法としてツールバーがあります。ツールバーにはマクロを呼出すボタンだけでなく、Excelのボタンも置くことができるので、特定の機能をまとめたルーツバーも作成できます。Excel2007以降ツールバーがなくなり、リボンになりました。作成したツールバーはリボンのアドインタブの中にユーザー設定のツールバーとして表示されます。
 

1.作成方法

まずコマンドバー(変数型:CommandBar)を作成しその上にコマンドバーにボタン(変数型:CommandBarButton)を作成して行きます。コマンドバーの名前には他のコマンドバーと重複しないようにユニークな名前をつけます。作成したコマンドバーを表示したり、削除するプロシージャも作成します。特にコマンドバーが残ったままにならないように、削除するプロシージャをWorkbookを閉じる前に必ず実行させます。
作成するときはApplication.CommandBars.Addですが、削除する時はCommandBars(インデックス).Deleteです。ボタンは作成したツールバーのControlsプロパティーのAddメソッドで作成します。ボタンのプロパティーは以下のように設定します。
ショートカットキーはCaptionの最後に(&X)のように&+アルファベットをカッコで囲んだものを付けます。
FaceIdについてはこちらを参照下さい。

    .Caption = "Close(&X)"  'ショートカットキーにXを設定した場合。
    .FaceId = 358           'Excel内のアイコンを表示させる場合
    .OnAction = "Tool_Close"  '実行させるプロシージャ名。
    .BeginGroup = True      'ボタンの前に区切り線を入れる場合。

2.サンプル

以下はボタンを2つ表示する簡単なサンプルです。

    Public Const CmdBarName As String = "CompassToolBar"    'コマンドバーの名前です。
   '複数の場所で使用するのでPublicで宣言します。

Public Sub ToolBar_Create()
   Dim ToolBar As CommandBar
   Dim ToolBarCtrl As CommandBarButton
   

   On Error Resume Next
   CommandBars(CmdBarName).Delete      'コマンドバーが残っていた場合に削除するためです。
     '無かった場合エラーが発生してもいいように
     'On Error Resume Nextを入れておきます。
    
   Set ToolBar = Application.CommandBars.Add(Name:=CmdBarName, Temporary:=True)
   'ツールバーを作成します。
   'Temporary:=TrueはExcel終了時にコマンドバーを削除していれば基本的に不要です。
   '何らかの異常によりコマンドバーを削除せずに終わった場合、
   '再びExcelを立ち上げた時にコマンドバーを作成しないために入れておきます。

   Set ToolBarCtrl = ToolBar.Controls.Add(Type:=msoControlButton)   'ボタンを作成します。
      With ToolBarCtrl
         .Caption = "実行(&R)"
         .FaceId = 2151
         .OnAction = "main"
      End With
       
  
   Set ToolBarCtrl = ToolBar.Controls.Add(Type:=msoControlButton)
      With ToolBarCtrl
           .Caption = "終了(&X)"
           .FaceId = 358
           .OnAction = "example401_Close"
      End With

'Excel既存のコマンドボタンを追加する場合。
'以下のようにそのIDをセットします。
   ToolBar.Controls.Add Type:=msoControlButton, ID:=2640

   With Application.CommandBars(CmdBarName)
      .Visible = True
      .Position = msoBarLeft   '←リボンになってから無効な設定となりました。
   End With

End Sub

Public Sub ToolBar_Delete()

   On Error Resume Next
   CommandBars(CmdBarName).Delete
    
End Sub
   '以下の2つのプロシージャは普通不要ですが、処理の中で
   'コマンドバーを非表示にしたり、表示する場合に使って下さい。
Public Sub ToolBar_Visible()

   On Error Resume Next
   CommandBars(CmdBarName).Visible = True
    
End Sub

Public Sub ToolBar_Hide()

   On Error Resume Next
   CommandBars(CmdBarName).Visible = False
    
End Sub

またワークブックの各イベントに以下のような処理を追加します。

Private Sub Workbook_Open()

    ToolBar_Create

End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
   
   ToolBar_Delete

End Sub

メニューバーをドロップダウンリストにする場合は以下のようにします。

        With ToolBar.Controls.Add(Type:=msoControlPopup, Before:=4)  '←Typeに注意。
            .Caption = "リスト(&L)"   '←何のプルダウンか分かるように必ず入れましょう。
            With .Controls.Add(Type:=msoControlButton)
                .Caption = "入力"
                .FaceId = 1191
                .OnAction = "Input"
            End With
    
            With .Controls.Add(Type:=msoControlButton)
                .Caption = "計算"
                .FaceId = 1190
                .OnAction = "Calc"
            End With
        End With

最終更新のRSS
Last-modified: 2014-03-11 (火) 01:58:42 (3698d)