機能と数式 | VBA | セミナー | オンラインソフト | お問い合わせ | その他
Top > Excel > VBA

UserForm上でショートカットメニューを使う





上図のように、UserForm 上のコントロールで独自のショートカット メニューを使う方法です。ここでは、リスト ボックスを右クリックしたときにショートカット メニューを表示してみます。

Dim myBar As Variant    ''(1)

Private Sub ListBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, _
                                                     ByVal X As Single, ByVal Y As Single)
    If Button = 2 Then myBar.ShowPopup    ''(5)
End Sub

Private Sub UserForm_Initialize()
    Dim i As Long
    For i = 1 To 5
        ListBox1.AddItem "アイテム " & i    ''(2)
    Next i
    
    Set myBar = CommandBars.Add(Position:=msoBarPopup, Temporary:=True)    ''(3)
    With myBar
        With .Controls.Add    ''(4)
            .Caption = "先頭に移動"
            .OnAction = "UpToHead"
            .FaceId = 594
        End With
        With .Controls.Add
            .Caption = "1つ上に移動"
            .OnAction = "UpToOne"
            .FaceId = 595
        End With
        With .Controls.Add
            .Caption = "1つ下に移動"
            .BeginGroup = True
            .OnAction = "DownToOne"
            .FaceId = 596
        End With
        With .Controls.Add
            .Caption = "最後に移動"
            .OnAction = "DownToTail"
            .FaceId = 597
        End With
    End With
End Sub

(1) ショートカット メニューを格納する変数 myBar を広域変数として宣言しておきます。
(2) これは必要ありません。リスト ボックスが寂しかったのでダミーのデータを入れました。
(3) UserForm の Initialize イベントでショートカット メニューを定義しておきます。
(4) ショートカット メニューに独自のコマンドを登録する部分です。
Caption プロパティはショートカット メニューに表示される文字列です。
OnAction プロパティには、メニューがクリックされたときに実行するプロシージャの名前を設定します。
ここで実行するプロシージャは、標準モジュールに書いてください。
FaceId プロパティはアイコンです。BeginGroup プロパティを True にすると区切り線が表示されます。
(5) ListBox1 でマウスのボタンが押されると MouseDown イベントが発生します。
もし右ボタンが押されたら、定義しておいた MyBar を表示します。



このエントリーをはてなブックマークに追加