Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Excel 2010)
UserFormの右クリックメニューについて
投稿日時: 21/08/22 17:21:30
投稿者: コレ

 こんにちは。ご質問させていただきます。
 
 UserFormに右クリックメニューを下記のコードで表示させています。
 自ブックがアクティブの状態であれば問題なく右クリックメニューが表示されますが、
複数のブックを開いて自ブック以外がアクティブの場合にUserFormを右クリックすると、
「myComm.ShowPopup」でエラーとなりますが、エラーとならない方法はありますでしょうか?
 
Private myComm As CommandBar
 
Private Sub UserForm_Initialize()
    Set myComm = Application.CommandBars.Add(Position:=msoBarPopup, Temporary:=True)
    With myComm
        With .Controls.Add
            .Caption = "テスト"
            .OnAction = "test"
        End With
    End With
End Sub
 
Private Sub UserForm_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If Button = 2 Then
        myComm.ShowPopup
    End If
End Sub
 
 エラーからすると、各ブックにコマンドバーを追加しないといけないと推測しているのですが、
解決方法ご存じの方いましたら宜しくお願い致します。

回答
投稿日時: 21/08/22 23:14:36
投稿者: WinArrow
投稿者のウェブサイトに移動

Userformは、vbModelessで開いているのでしょうか?

回答
投稿日時: 21/08/22 23:27:39
投稿者: WinArrow
投稿者のウェブサイトに移動

標準モジュールで、
Sub test()
    UserForm1.Show vbModeless
End Sub
で開いている前提で
 
フォームモジュールのコードを↓のように変更してみてください。
 

Option Explicit
Private myComm As CommandBar

Private Sub UserForm_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If Button <> 2 Then Exit Sub
    Set myComm = Application.CommandBars.Add(Position:=msoBarPopup, Temporary:=True)
    With myComm
        With .Controls.Add
            .Caption = "テスト"
            .OnAction = "test"
        End With
        myComm.ShowPopup
        myComm.Delete
    End With
End Sub

投稿日時: 21/08/23 08:40:56
投稿者: コレ

 おはようございます。
 返信が遅れて申し訳ございませんでした。
 
 WinArrow様
 ご回答ありがとうございます。
 ご質問の、UserFormのShowModalプロパティはFalseに設定にしているためvbModeless表示です。
UserFormを表示する条件がご指摘の通りとなります。
 提示していただいたコードから、UserForm_MouseUpイベントで右クリック時に
追加、表示、削除をその都度することが良いのですね。
 
 非常に勉強になりました。
 ありがとうございました。