ExcelのVBAで新しいツールバーを追加する解説はネットでもよく見かける。しかし、複雑な処理を行うマクロの場合は、既存の組み込みのツールバーを拡張したほうが使いやすい場合がある。参考になるサンプルを見つけたので、処理部分を整理してみた。
(1) 既存のボタンをツールバー上にコピーする場合
他のツールバーや、ツールバー内のサブバー中の既存のボタンをコピーして配置できる。これをVBAで行うには、ボタンIDが必要となるので、以下のより取得する。
① メインメニューの[表示]-[ツールバー]で、コピー先のツールバーを表示させる。
② メインメニューで、新しいマクロの記録を開始。
③ メインメニューの[ツール]-[ユーザー設定]で、ユーザー設定ダイアログを表示。
④ 「コマンド」タブで、「分類」でコピー元のバーを選び、「コマンド」で目的のボタンを探す。
⑤目的のボタンが見つかったら、クリックし①で表示しておいた目的のツールバーへドラッグする。もし、移動できない場合は、そのボタンは目的のツールバーには設置できない。
⑤ マクロ記録を終了し、VBEでコードを確認
(例) 図形描画ツールバーの6番目に「グループ化」ボタンを追加
Application.CommandBars("Drawing").Controls.Add Type:=msoControlButton, ID:=164, Before:=6
(2) マクロを起動するための新規ボタンを追加する場合
よく解説されている新規ツールバーへのボタン追加と同じ。ボタンアイコンを変えたい場合は、「FaceId」により組み込みのアイコンが使える。以下を参照のこと。
・ツールバー操作 (Excelでお仕事)
・ツールバー追加の基本 (Office TANAKA)
・FaceIDの表ダウンロード (Office TANAKA)
(3) ボタン配置の順番とツールバーの中の「改行」
ボタン配置の順番は、Before:=1 のように設定する。この番号は中間を飛ばさず、必ず1からの連番をつけること。
ツールバー内の改行は、行の先頭となるボタンで「.BeginGroup = True」を加える。
(4) VBAのサンプルコード
描画ツールバーに機能をボタンを追加する。以下をThisWorkbookに記述すると、起動時にツールバーを表示する。
マクロを組む上で非常に便利だったツールバーだが、マイクロソフトは何を勘違いしたか、Excel 2007で「リボン」という史上最悪の改悪を行い、ツールバーを廃止してしまった。元に戻すように要求するため、不買運動として2003以前を使い続けたい。
(1) 既存のボタンをツールバー上にコピーする場合
他のツールバーや、ツールバー内のサブバー中の既存のボタンをコピーして配置できる。これをVBAで行うには、ボタンIDが必要となるので、以下のより取得する。
① メインメニューの[表示]-[ツールバー]で、コピー先のツールバーを表示させる。
② メインメニューで、新しいマクロの記録を開始。
③ メインメニューの[ツール]-[ユーザー設定]で、ユーザー設定ダイアログを表示。
④ 「コマンド」タブで、「分類」でコピー元のバーを選び、「コマンド」で目的のボタンを探す。
⑤目的のボタンが見つかったら、クリックし①で表示しておいた目的のツールバーへドラッグする。もし、移動できない場合は、そのボタンは目的のツールバーには設置できない。
⑤ マクロ記録を終了し、VBEでコードを確認
(例) 図形描画ツールバーの6番目に「グループ化」ボタンを追加
Application.CommandBars("Drawing").Controls.Add Type:=msoControlButton, ID:=164, Before:=6
(2) マクロを起動するための新規ボタンを追加する場合
よく解説されている新規ツールバーへのボタン追加と同じ。ボタンアイコンを変えたい場合は、「FaceId」により組み込みのアイコンが使える。以下を参照のこと。
・ツールバー操作 (Excelでお仕事)
・ツールバー追加の基本 (Office TANAKA)
・FaceIDの表ダウンロード (Office TANAKA)
(3) ボタン配置の順番とツールバーの中の「改行」
ボタン配置の順番は、Before:=1 のように設定する。この番号は中間を飛ばさず、必ず1からの連番をつけること。
ツールバー内の改行は、行の先頭となるボタンで「.BeginGroup = True」を加える。
(4) VBAのサンプルコード
描画ツールバーに機能をボタンを追加する。以下をThisWorkbookに記述すると、起動時にツールバーを表示する。
Private Sub Workbook_Open()
Dim cmbar As Object
With Application.CommandBars("Drawing") '描画ツールバー指定
.Protection = msoBarNoChangeVisible
' 図形描画ツールバーの1個目に直線ボタンを追加
.Controls.Add Type:=msoControlButton, ID:=130, Before:=1
' 2個目にグループ化ボタンの追加し、改行
' 改行設定のためcbにSetしているが、上記と違いAddメソッドが
' カッコ書きになっていることに注意
Set cmbar = .Controls.Add(Type:=msoControlButton, ID:=164, Before:=2)
cmbar.BeginGroup = True ' 改行後の1個目に設定
' 自作マクロを呼び出すボタンを追加
Set cmbar = .Controls.Add(Type:=msoControlButton, Before:=3)
With cmbar
.Caption = "自作マクロ"
.FaceId = 1000
.OnAction = "my_macro"
End With
.Position = msoBarFloating ' バーを画面内に切り離し
.Width = 100
.Height = 345
.Visible = True ' 表示する
End With
End Sub
' ----------------------------------------------
改悪されたExcel 2007Dim cmbar As Object
With Application.CommandBars("Drawing") '描画ツールバー指定
.Protection = msoBarNoChangeVisible
' 図形描画ツールバーの1個目に直線ボタンを追加
.Controls.Add Type:=msoControlButton, ID:=130, Before:=1
' 2個目にグループ化ボタンの追加し、改行
' 改行設定のためcbにSetしているが、上記と違いAddメソッドが
' カッコ書きになっていることに注意
Set cmbar = .Controls.Add(Type:=msoControlButton, ID:=164, Before:=2)
cmbar.BeginGroup = True ' 改行後の1個目に設定
' 自作マクロを呼び出すボタンを追加
Set cmbar = .Controls.Add(Type:=msoControlButton, Before:=3)
With cmbar
.Caption = "自作マクロ"
.FaceId = 1000
.OnAction = "my_macro"
End With
.Position = msoBarFloating ' バーを画面内に切り離し
.Width = 100
.Height = 345
.Visible = True ' 表示する
End With
End Sub
' ----------------------------------------------
マクロを組む上で非常に便利だったツールバーだが、マイクロソフトは何を勘違いしたか、Excel 2007で「リボン」という史上最悪の改悪を行い、ツールバーを廃止してしまった。元に戻すように要求するため、不買運動として2003以前を使い続けたい。