右クリックメニューを作る
フォームの空白部分を右クリックしたときだけ一時的なメニューを作り、操作後に自分で作ったメニューを削除します。
実行前に確認
- Windows版デスクトップExcelの従来型CommandBarsを使う応用例です。リボンへ項目を追加する例ではありません。
- 既存のメニューを名前で削除・Resetしません。作成直後に保持したmenuだけを片付けます。
- フォームの空白部分が対象です。TextBoxなどの上の右クリックは別のコントロールのイベントになります。
- コードと公式仕様を照合した学習用の例です。Excel実機での実行確認は行っていません。
1サンプルコード
'【貼付先1:UserForm1 のコードモジュール】
Option Explicit
Private Sub UserForm_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, _
ByVal X As Single, ByVal Y As Single)
Dim menu As Office.CommandBar
Dim item As Office.CommandBarButton
Dim errorText As String
If Button <> 2 Then Exit Sub
On Error GoTo Failed
Set menu = Application.CommandBars.Add(Position:=msoBarPopup, Temporary:=True)
Set item = menu.Controls.Add(Type:=msoControlButton)
item.Caption = "あいさつを表示"
item.OnAction = "'" & Replace(ThisWorkbook.Name, "'", "''") & "'!FormPopupGreeting"
menu.ShowPopup
CleanUp:
On Error Resume Next
If Not menu Is Nothing Then menu.Delete
On Error GoTo 0
If Len(errorText) > 0 Then MsgBox errorText
Exit Sub
Failed:
errorText = "メニューを表示できませんでした:" & Err.Description
Resume CleanUp
End Sub
'【貼付先2:標準モジュール。ここから下は別の場所へ】
Option Explicit
Public Sub OpenPopupForm()
UserForm1.Show vbModeless
End Sub
Public Sub FormPopupGreeting()
MsgBox "右クリックメニューから実行しました。"
End Sub図で見る一時メニューの寿命
イメージ図フォームの空白部分を右クリックしたときだけ一時的なメニューを作り、操作後に自分で作ったメニューを削除します。
右クリック
空白部分のMouseUpでButton=2を判定
一時メニュー
CommandBarを作りOnActionであいさつ
片付け
実行・取消後に作ったmenuだけをDelete
各操作は、このガイドに指定されたフォームのコードで行います。
コードの処理を説明する模式図です。実際の画面や実行結果を撮影したものではありません。
使い方・実行手順を確認する5つの手順で、コードの使い方を確認できます
- 1
Windows版デスクトップExcelの練習用ブックを.xlsmで保存し、Alt+F11→[挿入]→[ユーザーフォーム]で、名前がUserForm1の空のフォームを用意します。各例は別々に試します。
- 2
この例は空のUserForm1で試します。「貼付先1」をフォームのコード、「貼付先2」を標準モジュールへ分けて貼ります。
- 3
標準モジュールのOpenPopupFormを実行します。F5で直接フォームだけを開くのではなく、このマクロからモードレスで開きます。
- 4
フォームの空白部分を右クリックして「あいさつを表示」を選びます。「右クリックメニューから実行しました。」と出ることを確認します。
- 5
右クリック→Escで取り消す場合も試します。メニューはその都度削除され、フォームは×で閉じられます。