即効テクニック

メニューバー・ツールバー関連のテクニック

メニューが押された状態にする

(Excel 97/2000/2002/2003/2007)
セルの右クリックメニューにコマンドを追加するには、次のようにします。

Sub Sample1()
  With CommandBars("Cell").Controls.Add(Type:=msoControlButton)
    .Caption = "Button"
    .OnAction = "myMacro"
  End With
End Sub

Sub myMacro()
  MsgBox "Hello"
End Sub
Sample1を実行すると、右クリックメニューに[Button]コマンドが追加され、クリックするとmyMacroが実行されます。 追加したコマンドを削除するには、Deleteメソッドを実行します。
Sub Sample2()
  CommandBars("Cell").Controls("Button").Delete
End Sub
メニューには、コマンドを実行するだけでなく、現在の状況を表すものがあります。 たとえば、Excel 2003の[書式]-[ふりがな]-[表示/非表示]などです。 この[表示/非表示]メニューは、選択したセルでふりがなが表示されていると、コマンドの左側が押された状態になります。 このように、メニューを押された状態にするには、StateプロパティにTrueを設定します。 次のコードは、[Button]コマンドが押された状態にします。
Sub Sample3()
  CommandBars("Cell").Controls("Button").State = True
End Sub
コマンドにアイコン(FaceId)が設定されていない場合は、チェックマークが表示されます。 アイコンが設定されていると、アイコンの背景が押されたようになります。 こうしたメニューの場合、実行するたびに、ONだったらOFFに、OFFだったらONへと状況を反転させるのが一般的です。 そのとき、現在のStateプロパティの状態をIfやSelect Caseで調べる必要はありません。 True/Falseを反転させるNot演算子を使うと便利です。
Sub myMacro()
  With CommandBars("Cell").Controls("Button")
    .State = Not .State
    MsgBox "現在の状況:" & Cbool(.State)
  End With
End Sub