← コード一覧へ戻る
実務UserForm

右クリックメニューを作る

フォームの空白部分を右クリックしたときだけ一時的なメニューを作り、操作後に自分で作ったメニューを削除します。

実行前に確認

  • 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

図で見る一時メニューの寿命

イメージ図

フォームの空白部分を右クリックしたときだけ一時的なメニューを作り、操作後に自分で作ったメニューを削除します。

  1. 右クリック

    空白部分のMouseUpでButton=2を判定

  2. 一時メニュー

    CommandBarを作りOnActionであいさつ

  3. 片付け

    実行・取消後に作ったmenuだけをDelete

各操作は、このガイドに指定されたフォームのコードで行います。

コードの処理を説明する模式図です。実際の画面や実行結果を撮影したものではありません。

使い方・実行手順を確認する5つの手順で、コードの使い方を確認できます
  1. 1

    Windows版デスクトップExcelの練習用ブックを.xlsmで保存し、Alt+F11→[挿入]→[ユーザーフォーム]で、名前がUserForm1の空のフォームを用意します。各例は別々に試します。

  2. 2

    この例は空のUserForm1で試します。「貼付先1」をフォームのコード、「貼付先2」を標準モジュールへ分けて貼ります。

  3. 3

    標準モジュールのOpenPopupFormを実行します。F5で直接フォームだけを開くのではなく、このマクロからモードレスで開きます。

  4. 4

    フォームの空白部分を右クリックして「あいさつを表示」を選びます。「右クリックメニューから実行しました。」と出ることを確認します。

  5. 5

    右クリック→Escで取り消す場合も試します。メニューはその都度削除され、フォームは×で閉じられます。

使っている機能の公式ドキュメント(Microsoft Learn)