ツールバーを作る方法は「新しいツールバーを作る」をご覧ください。
さて、マクロで作成したツールバーは、VisibleプロパティにTrueを設定すると画面に表示されます。このとき、ただTrueにしただけでは、ツールバーがワークシート上にフローティング状態で表示されてしまいます。別に決まっていませんが、ツールバーといえばやはり画面の上部に居てほしいものです。ツールバーの表示位置を決めるにはPositionプロパティに表示位置を表す定数を指定します。次のコードは、新しいツールバーを作り、ワークシートの左側に表示します。
Sub Sample1() Dim myBar As CommandBar, i As Long Set myBar = CommandBars.Add ''新しいツールバーを作成します For i = 1 To 3 myBar.Controls.Add ID:=i + 1 ''ダミーのボタンを追加します Next i myBar.Position = msoBarLeft ''ツールバーを左に表示します myBar.Visible = True End Sub
ツールバーのPositionプロパティに設定できるのは次の定数です。
定数 | 値 | 位置 |
---|---|---|
msoBarLeft | 0 | 左 |
msoBarTop | 1 | 上 |
msoBarRight | 2 | 右 |
msoBarBottom | 3 | 下 |
msoBarFloting | 4 | フローティング |
ツールバーのProtectionプロパティを使うと、表示位置を変更できなくしたり、ボタンの表示/非表示を禁止することなどができます。次のコードは、新しいフローティング状態のツールバーを作り、移動できなくします。
Sub Sample2() Dim myBar As CommandBar, i As Long Set myBar = CommandBars.Add ''新しいツールバーを作成します For i = 1 To 3 myBar.Controls.Add ID:=i + 1 ''ダミーのボタンを追加します Next i myBar.Position = msoBarFloating ''フローティングにします myBar.Protection = msoBarNoMove ''移動を禁止します myBar.Visible = True End Sub
上図はツールバーのタイトルバー上でマウスボタンを押し下げているところです。マウスポインタが変化せず、移動することができません。ちなみに、移動できる場合は下図のようにマウスポインタが変化します。
Protectionプロパティに設定できるのは次の定数です。
定数 | 値 | 制限 |
---|---|---|
msoBarNoProtection | 0 | 保護しない |
msoBarNoCustomize | 1 | ユーザー設定しない |
msoBarNoResize | 2 | サイズ変更しない |
msoBarNoMove | 4 | 移動しない |
msoBarNoChangeVisible | 8 | 非表示にしない |
msoBarNoChangeDock | 16 | フリーにしない |
msoBarNoVerticalDock | 32 | 垂直に固定しない |
msoBarNoHorizontalDock | 64 | 水平に固定しない |
一般的なツールバーのProtectionプロパティは、msoBarNoProtectionが設定されている状態です。
複数の制限を同時に設定するには、定数を足し算してください。「msoBarNoMove + msoBarNoChangeVisible + msoBarNoCustomize」みたくすると、ワークシート上にフローティング状態で表示され、[ユーザー設定]ダイアログボックスで非表示にすることも、削除することもできない、極悪非道なツールバーになります(^^; よい子は真似しちゃダメだよ。
もし、そんな極悪非道なツールバーを発見したら、次のコードで解除してから削除してやってください。
Sub Sample4() Dim c For Each c In CommandBars If c.BuiltIn = False Then c.Protection = msoBarNoProtection Next c End Sub
BuiltInプロパティは、そのツールバーがExcelの標準ツールバーかどうかを判定します。標準ツールバーの場合はProtectionプロパティを変更できませんので、BuiltInプロパティがFalseとなるユーザーが作成したツールバーだけ制限を解除します。
実用的には、次のような使い方でしょうか。次のコードは、新しいツールバーを作り、右端のボタンをクリックすると「移動可能」と「移動禁止」の状態を切り替えます。
Sub Sample5() Dim myBar As CommandBar, i As Long Set myBar = CommandBars.Add ''新しいツールバーを作成します For i = 1 To 3 myBar.Controls.Add ID:=i + 1 ''ダミーのボタンを追加します Next i With myBar.Controls.Add .OnAction = "myMacro2" ''ボタンがクリックされたとき実行するマクロを設定します .BeginGroup = True ''区切り線を表示します .FaceId = 277 ''ボタンイメージの番号を指定します End With myBar.Visible = True End Sub Sub myMacro2() With CommandBars.ActionControl If .Parent.Protection = msoBarNoMove Then ''移動禁止だったら .Parent.Protection = msoBarNoProtection ''移動禁止を解除する .State = False ''ボタンが押されていない状態にする Else ''移動禁止ではなかったら .Parent.Protection = msoBarNoMove ''移動禁止にする .State = True ''ボタンが押されている状態にする End If End With End Sub
最初はツールバーを自由に移動できます。
右端の鍵ボタンをクリックすると移動できなくなります。ボタンの表示を"押された状態"にすることで、現在の状態をユーザーに伝えます。
クリックされたボタンはActionControlプロパティで取得します。詳しくは「実行されたメニューを取得する」をご覧ください。
ツールバーのボタンを押された状態にするのは、メニューにチェックマークを付けるのと同じです。詳しくは「メニューにチェックマークを付ける」をご覧ください。