ツールバーを作る方法は「新しいツールバーを作る」をご覧ください。
さて、マクロで作成したツールバーは、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プロパティで取得します。詳しくは「実行されたメニューを取得する」をご覧ください。
ツールバーのボタンを押された状態にするのは、メニューにチェックマークを付けるのと同じです。詳しくは「メニューにチェックマークを付ける」をご覧ください。