• 締切済み

ExeclVBAユーザーフォームから右クリックでショートカットメニューで困っています。

ExcelVBAのユーザーフォーム上で、テキストなどを編集する際に右クリックしてコピー&ペーストとかのショートカットメニューを出したいんでけど、出せないものなのでしょうか?書籍などにはワークシート上で自作の右クリックのショートカットマクロを割り付ける、というTipsが掲載されていますが、参考にコードを書いてもうまくいきません。

みんなの回答

回答No.4

NO1です。 ユーザーフォーム上ですね。 失礼しました。 サンプルは、ワークシート上です。 無視してください。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

こんにちは。 Userform1 に Textbox1 を配置し、以下のコードをそれぞれコメントにある モジュールにコピペして下さい。 右クリックは「MouseUp」イベントで検知できます。 とりあえず、コピー&ペーストを簡単...と言うかかなり手抜きですが、 実装してみました。例外処理は最小限しかしてません。 ' // Userform1 ------------------------------------------------------ Private Const MENUNAME As String = "RIGHT_CLICK_MENU" Private mCB As CommandBar Private Sub UserForm_Initialize()   Call CreatePopupMenu End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)   Call DeletePopupMenu End Sub ' // 右クリックメニュー作成 Private Sub CreatePopupMenu()      Call DeletePopupMenu   Set mCB = Application.CommandBars _        .Add(Name:=MENUNAME, _          Position:=msoBarPopup, _          MenuBar:=False, _          Temporary:=True)   With mCB.Controls.Add(Type:=msoControlButton)     .Caption = "コピー(&C)"     .OnAction = "CopyText"     .FaceId = 19   End With   With mCB.Controls.Add(Type:=msoControlButton)     .Caption = "貼り付け(&V)"     .OnAction = "PasteText"     .FaceId = 22   End With End Sub ' // 右クリックメニュー削除 Private Sub DeletePopupMenu()   On Error Resume Next   Application.CommandBars(MENUNAME).Delete   Set mCB = Nothing   On Error GoTo 0 End Sub '// Textbox1 の右クリックで PopupMenu を呼び出し Private Sub TextBox1_MouseUp(ByVal Button As Integer, _                ByVal Shift As Integer, _                ByVal X As Single, _                ByVal Y As Single)   If Button = xlSecondaryButton Then     mCB.ShowPopup   End If End Sub ' // 標準モジュール ------------------------------------------------- ' // かなり手抜きです。この方法は必ずうまくいくとは限りません。 ' // コピーコマンド Sub CopyText()   On Error Resume Next   AppActivate (UserForm1.Caption)   If Err.Number = 0 Then SendKeys "^c", True End Sub '// ペーストコマンド Sub PasteText()   On Error Resume Next   AppActivate (UserForm1.Caption)   If Err.Number = 0 Then SendKeys "^v", True End Sub

headaqe
質問者

お礼

スゲエ。こんなのがやりたかったんです。大変ありがとう御座いました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 Excel VBAのUserFormのテキストボックスなどには、右クリックイベント自体はありますが、UserForm上の右クリックメニューは用意できないと思います。

回答No.1

ワークブックをオープンした時に右クリックのメニューをセット 閉じる時にメニューをクリアするサンプルです。 ThisWorkbookに貼り付けて使います。 Private Sub Workbook_Open() Dim Newb As Variant Set Newb = Application.CommandBars("Cell").Controls.Add(Temporary:=True, before:=1) With Newb .Caption = "転送ファイル作成" .OnAction = "転送ファイル作成" .BeginGroup = True .FaceId = 283 End With Set Newb = Application.CommandBars("Cell").Controls.Add(Temporary:=True, before:=1) With Newb .Caption = "月次更新" .OnAction = "GetujiKosin" .BeginGroup = True .FaceId = 1015 End With Set Newb = Application.CommandBars("Cell").Controls.Add(Temporary:=True, before:=1) With Newb .Caption = "個別明細書印刷" .OnAction = "KOPRINT" .BeginGroup = False .FaceId = 4 End With Set Newb = Application.CommandBars("Cell").Controls.Add(Temporary:=True, before:=1) With Newb .Caption = "総括明細書印刷" .OnAction = "PPRINT" .BeginGroup = True .FaceId = 4 End With Set Newb = Application.CommandBars("Cell").Controls.Add(Temporary:=True, before:=1) With Newb .Caption = "受信データー変換" .OnAction = "Import" .BeginGroup = True .FaceId = 4 End With End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) On Error Resume Next Err.Clear Do Application.CommandBars("cell").Controls("総括明細書印刷").Delete Loop While Err.Number = 0 Err.Clear Do Application.CommandBars("cell").Controls("個別明細書印刷").Delete Loop While Err.Number = 0 Err.Clear Do Application.CommandBars("cell").Controls("月次更新").Delete Loop While Err.Number = 0 Err.Clear Do Application.CommandBars("cell").Controls("転送ファイル作成").Delete Loop While Err.Number = 0 Err.Clear Do Application.CommandBars("cell").Controls("受信データー変換").Delete Loop While Err.Number = 0 End Sub

headaqe
質問者

補足

回答ありがとう御座います。早速試してみました。Excelワークシート上で右クリックをするとショートカットメニューが出るのですが、 作成したユーザーフォーム上では出ませんでした。 Application.CommandBarsの引数が"Cell"になっているのは、ワークシート上だからと思い、引数を"UserForm"などに変えてみてもエラーなってしまい、うまくいきません。なにか有効なパラメータとか、そうでないものがあるのでしょうか?

関連するQ&A