実行されたメニュー項目をTagで判定する
2つの項目のどちらを選んだかをTagの値で確認できます。 ActionControlはクリックされたコントロールです。表示名ではなくTagで用途を区別します。
実行前に確認
- CommandBarsは旧式のメニューAPIです。リボンのタブを追加するコードではありません。
- 既存のセル右クリックメニューは変更せず、独立した一時メニューを表示します。Escで閉じられます。
- 表示終了後は自作メニューを削除します。実行を強制停止した場合でもTemporary=TrueによりExcel終了時に消えます。
- 組み込みアイコンや表示はOfficeの版によって異なる場合があります。
- Excel実機での動作は未確認です。コピーした練習用ブックで試してください。
1サンプルコード
Option Explicit
Sub ShowPracticeMenu5505()
Dim menu As Office.CommandBar
Dim button As Office.CommandBarButton
Dim second As Office.CommandBarButton
Dim subMenu As Office.CommandBarPopup
On Error GoTo Failed
Set menu = Application.CommandBars.Add(Position:=msoBarPopup, Temporary:=True)
Set button = menu.Controls.Add(Type:=msoControlButton, Temporary:=True)
button.Caption = "確認メッセージ"
button.Tag = "LabPractice5505"
button.OnAction = "'" & Replace(ThisWorkbook.Name, "'", "''") & "'!PracticeAction5505"
Set second = menu.Controls.Add(Type:=msoControlButton, Temporary:=True)
second.Caption = "別の確認"
second.Tag = "Second"
second.OnAction = button.OnAction
menu.ShowPopup
CleanUp:
On Error Resume Next
If Not menu Is Nothing Then menu.Delete
On Error GoTo 0
Exit Sub
Failed:
MsgBox Err.Description, vbExclamation
Resume CleanUp
End Sub
Public Sub PracticeAction5505()
Dim clicked As Office.CommandBarControl
Set clicked = Application.CommandBars.ActionControl
If clicked Is Nothing Then
MsgBox "メニューから選択してください"
Exit Sub
End If
MsgBox "選択した項目: " & clicked.Tag
End Sub図で見るメニュー操作の流れ
イメージ図既存メニューを変更しない練習例です。
作成
独立した一時ポップアップを作る
選択
2つの項目のどちらを選んだかをTagの値で確認できます。
終了
表示後に自作メニューを片付ける
ActionControlはクリックされたコントロールです。表示名ではなくTagで用途を区別します。
コードの処理を説明する模式図です。実際の画面や実行結果を撮影したものではありません。
使い方・実行手順を確認する4つの手順で、コードの使い方を確認できます
- 1
Windows版Excelの練習用.xlsmを開き、すべてのコードを同じ標準モジュールへ貼り付けます。
- 2
ShowPracticeMenu5505を実行し、表示されたポップアップの項目を選びます。
- 3
ActionControlはクリックされたコントロールです。表示名ではなくTagで用途を区別します。
- 4
2つの項目のどちらを選んだかをTagの値で確認できます。