Excel (VBA)

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

 
(Windows 10 Pro : Excel 2019)
ユーザーフォームのコントロールに設定したショートカットメニューの表示について
投稿日時: 23/08/27 11:08:44
投稿者: WinArrow

windows10 Pro Office2019(64bit)の環境です。
 
ユーザーフォームに幾つかのコントロールを配置し、右クリックでショートカットメニューを表示するようにしています。
その「ショートカットメニュー」の表示の現象に関する疑問です。
 
右クリック時、「ショートカットメニュー」が表示されると思いますが、
マウスかーソルを下にずらさないと表示されない‥‥という現象があります。
 
この部分(右クリック操作部分)だけを個別に新しいブックに複写して実行すると、問題なく、表示されます。
 
ですから、コードそのものは間違っていないと思いますが、
何処を調査すればよいのか、ご存知の方は、アドバイスをお願します。
 
一応、右りック操作関連のコードを掲示て置きます。
対象はコマンドボタンですが、リストボックスでも同じ現象が出ています。
 

Private Sub ChangeGCODE(ByVal CTRL As MSForms.Control)
    With Application.CommandBars.Add(Position:=msoBarPopup)
        If CTRL.Tag <> "" Then
            With .Controls.Add(msoControlButton)
                .Caption = "解除する"
            End With
        End If

        With .Controls.Add(msoControlButton)
            .Caption = "分別組合せを【" & "】に"
            .FaceId = 352
        End With
        With .Controls.Add(msoControlButton)
            .Caption = "分別組合せを【" & "】に"
            .FaceId = 352
        End With
        With .Controls.Add(msoControlButton)
            .Caption = "分別組合せを【" & "】に"
            .FaceId = 352
        End With
        .ShowPopup
        DoEvents
        .Delete
    End With

    Exit Sub

End Sub

回答
投稿日時: 23/08/28 16:27:26
投稿者: Suzu

引用:
マウスかーソルを下にずらさないと表示されない‥‥という現象があります。
 
この部分(右クリック操作部分)だけを個別に新しいブックに複写して実行すると、問題なく、表示されます。

 
新規ブックだと希望通りとの事ですので、
そのブック特有なのか、
或いはどこかで オブジェクトの TOP/LELT を設定(ユーザー操作含む)したのが残っているのか
にはなるのでしょうね。
 
今回のコードは、多分、
コントロールの MouseDownイベントで、 Button が 2の場合、ChangeGCODE を実行するのだと思いますが
 
その直前に、MsgBox を表示する様にすると、そのメッセージボックスの位置にメニューが表示されてしまいます。
 
検証中に、ボタン位置に表示される様になった事もあるので。。再現性がつかめませんが、情報まで。
あとは、MouseDownで Addしに行くのではなく、UserForm_Initialize だとどうかとかでしょうか。

回答
投稿日時: 23/08/28 16:36:18
投稿者: gombohori

>右クリックでショートカットメニュー
っていうのは、

Private Sub ListBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  If Button = 2 Then ChangeGCODE Me.ListBox1
End Sub

のような感じですか?
 
>マウスかーソルを下にずらさないと表示されない‥‥という現象
MouseDownじゃなくてMouseUpをつかっているとそういう動作になりますが、まさか...ですよね?

投稿日時: 23/08/28 20:12:58
投稿者: WinArrow

Suzuさん
ご回答ありがとうございます。
<MouseDownで Addしに行くのではなく、UserForm_Initialize だとどうかとかでしょうか。
 
この件はテスト済です。
 
gombohoriさん
ご回答ありがとうございます。
>MouseDownじゃなくてMouseUpをつかっているとそういう動作になりますが、まさか...ですよね?
 
そのまさかです。
昔は、MouseDownをよく使っていたんですが、何かのきっかけ(記憶していない)で、MouseUpを使うようにしました。
しかし、MouseDownに変更しても同じです。
 
 

回答
投稿日時: 23/08/30 09:22:13
投稿者: Suzu

引用:
<MouseDownで Addしに行くのではなく、UserForm_Initialize だとどうかとかでしょうか。
  
この件はテスト済です。

 
結局、そのファイル特有とも言える状況の様ですし
WEBで似たようなコメントが無い様であれば、
1ステップづつ検証するしか無さそうな気がします。
 
推測としては、別の表示の影響を受けていそうな気がしますので
その辺りをコメントアウトしていってどうか と言う感じでしょうか。
 
どうしても原因を掴みたいなら、時間が掛かってしまうのはしょうがないでしょうね。
 
 
対策と言うなら
ショートカットメニューの組み込み方は何種類かあった記憶があります。
別の実装を試してみるのもかりかと。
 
でも、目的は 目的の動作を実装する事であり
ショートカットメニューは そこへ導くGUI。 別の GUIの使用を検討するのもあるのかもですね。
 
 
当方には ヒントとなる様な情報も持ち合わせておりません。
お力になれずに。。失礼します。

投稿日時: 23/08/30 10:39:25
投稿者: WinArrow

Suzu さん
ご回答ありがとうございます。
一部、他のGUIは、検討して対応しています。
 
 
コマンドボタン右クリックは、コンボボックスに変更しました。
リストボックスでは、
行送り(1つ上へ、1つ下へ、先頭行へ、最下位行へ)のような操作は、
アクションが増えてしまうので、他GUI切替は難しいと思っています。
リスト項目の変更の場合は、テキストボックス等に転送するので、ダブルクリクで対応しました。
友人の相談して、他PCでの挙動を調査しようと考えています。
 
もう少し、頑張ってみます。
 

投稿日時: 23/09/05 14:57:51
投稿者: WinArrow

原因?らしきものが分かりました。
 
事象は、リストボックスのお右クリックメニューがリアルタイムで表示されない
問題のユーザーフォーム(Userform3)までの、工程を記述します。
 
変数の初期化
ブックA(初期化した変数に対応した年度)を開く
Userfom0開く
  Useform0の中で、条件により Userform3 開く
  Userform3の中にリストボックスを設置、右クリックメニュー表示
 
変数の初期化中にある
 Application.ScreenUpdating = False
を消しました。
右クリック(ショートアット)メニューは、即表示されました。
因果関係は、納得していませんが・・・・
 
 
 
 

投稿日時: 23/09/07 16:27:29
投稿者: WinArrow

>Application.ScreenUpdating = False
は画面のちらつきをなくす・・・・ということなので、
それがユーザーフォームであっても、対象になりということは、理解したのですが、
マウスをずらすと表示する点に、違和感がのこっています。
 
一応、目的は達成できたので、解決とします。
ありがとうございました。