[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ユーザーフォーム上の右クリックメニューが再度表示されてしまう』(田吾作)
officetanakaさんの↓の記述を参考にユーザーフォームのテキストボックス上で右クリックすることによって メニューを表示し、選択したメニューを実行する、ということをしようとしています。
http://officetanaka.net/excel/vba/tips/tips02.htm
出来ているコードは下記の通りです。
'ユーザーフォーム
Dim myBar As Variant ''(1)
Private Sub TextBox1_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() Set myBar = CommandBars.Add(Position:=msoBarPopup, Temporary:=True) ''(3) With myBar With .Controls.Add ''(4) .Caption = "選択再転記" .OnAction = "saitenki" '.FaceId = 594 End With With .Controls.Add .Caption = "選択コピー" .OnAction = "selcpy" '.FaceId = 595 End With End With End Sub
'標準モジュール
Sub saitenki() Dim seltxt As String seltxt = UserForm1.TextBox1.SelText UserForm1.TextBox1.Value = seltxt End Sub
Sub selcpy() UserForm1.TextBox1.Copy End Sub
いま躓いているのは、右クリッックで表示したメニューをクリックで実行するところまでは出来ている のですが、実行後再度メニューが表示されてしまう、ということです。
試しに実行するメニューを選択状態でEnterキーで実行しても再度メニューが表示されてしまいました。
実行後メニューが再度表示されてしまうのを回避するにはどのようにすればいいでしょうか? ご存知の方、ご教示お願いいたします。
※リストボックスでは再度メニューが表示される、ということはありませんでした。
< 使用 Excel:Excel2007、使用 OS:WindowsVista >
Private Sub TextBox1_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
このイベントをmousedownではなく、mouseupイベントで行ってみてください。
私は、この右クリックメニューは、全部クラスモジュールに管理させるようにしています。
この右クリックメニューで私の場合、よく見かける 切り取り コピー 貼付け機能を付けています。
これは、ユーザーフォームを使うときには、必ずと言ってよいほど使うので クラスモジュールで 管理させて、使う場合は、このオブジェクトのインタンスを作成し、メニューを使うコントロールを 登録するだけにしています。
私の場合は、このコピー&ペースト専門に使用しているので全部オブジェクトに任していますが、 右クリックメニューをカスタマしたい場合は、クラス(オブジェクト)にイベントを用意し、 ユーザーフォーム内にそのメニュー機能処理をコード化できるような構造にするとよいでしょう
コピー&ペーストのクラスモジュール例です。
( ichinose) 2015/03/15(日) 11:43
ichinoseさん、ご回答ありがとうございます。
MouseUpイベントにすることで解決しました。
リンク先のクラスモジュールの例も勉強させていただきます。 アドイン化しておくと汎用的になるので便利ですね。 ありがとうございました。 (田吾作) 2015/03/15(日) 12:19
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.