Attribute VB_Name = "Module1" '■ マクロ500連発<第2段> ' ' メニューボタンの状態(レ)をトグル化する ' ' Copyright(C) 2000 Sunago ' '  Macro1を実行するとWorksheet Menu Barに拡張メニュー」項目を ' 追加し、サブメニューにアクティブブックのシート名を追加します。 ' サブメニューをクリックすると該当するシートがアクティブし、ボタンの ' 状態も合わせて変更します(トグル化を実現しています)。 ' Option Explicit Const CMNUBAR = "Worksheet Menu Bar" Const CMNUEXT = "拡張メニュー" Sub Macro1() Dim mnuPopup As CommandBarControl Dim mnuButton As CommandBarControl Dim objSheet As Object With Application.CommandBars(CMNUBAR) Set mnuPopup = .Controls.Add _ (Type:=msoControlPopup) With mnuPopup .Caption = CMNUEXT .OnAction = "Macro1Sub" 'サブメニューにシート名を追加する For Each objSheet In ActiveWorkbook.Sheets Set mnuButton = .Controls.Add _ (Type:=msoControlButton) With mnuButton .Caption = objSheet.Name .OnAction = "Macro2" .Parameter = .Caption End With Next End With End With End Sub Private Sub Macro1Sub() 'このプロシージャはサブメニューの編集に用いる。 'このサンプルでは該当機能は実装しない。 ' End Sub Private Sub Macro2() 'Buttonメニュー項目から呼び出されるプロシージャ Dim a a = Application.Caller With Application.CommandBars(CMNUBAR).Controls(CMNUEXT) Sheets(.Controls(a(1)).Parameter).Activate 'メニュー項目の状態(レ)を変更する If .Controls(a(1)).State <> msoButtonDown Then .Controls(a(1)).State = msoButtonDown Else .Controls(a(1)).State = msoButtonUp End If End With End Sub Sub Macro1Reset() 'Worksheet Menu Bar を初期状態にする Application.CommandBars("Worksheet Menu Bar").Reset End Sub