Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3543 / 13645 ツリー ←次へ | 前へ→

【61525】右クリックで表示されるメニューを変えたい よちよち 09/5/14(木) 15:22 質問[未読]
【61526】Re:右クリックで表示されるメニューを変え... もも 09/5/14(木) 15:44 回答[未読]
【61529】Re:右クリックで表示されるメニューを変え... タッちゃん 09/5/14(木) 17:05 お礼[未読]
【61534】Re:右クリックで表示されるメニューを変え... arajin 09/5/14(木) 19:51 回答[未読]

【61525】右クリックで表示されるメニューを変えた...
質問  よちよち  - 09/5/14(木) 15:22 -

引用なし
パスワード
   久しぶりに投稿します。
マウスで右クリックすると、「切り取り(T)」〜「リサーチ(L)」の
ポップアップメニューが表示され各コマンドを選択できます。

使うと困るコマンドが含まれており、このポップアップをやめて、
新規に作成したポップアップメニューに変更したいのですが可能でしょうか?
色々検索すると、現メニューにコマンドの追加する方法は見つかるのですが、
まったく別のメニューに変える方法が見つかりません。

サンプルや参考資料があれば教えて下さい。宜しくお願い致します。
なお、小生は Excel 2003 を使用しています。

【61526】Re:右クリックで表示されるメニューを変...
回答  もも  - 09/5/14(木) 15:44 -

引用なし
パスワード
   For Each c In Application.CommandBars("cell").Controls
 c.Delete
Next

とかで全部消してから

>色々検索すると、現メニューにコマンドの追加する方法は見つかるのですが、
で解った方法で追加すればよろしいかと。

で、ブックの終了時にでも

Private Sub Workbook_BeforeClose(Cancel As Boolean)
 Application.CommandBars("cell").Reset
End Sub

リセットする。

【61529】Re:右クリックで表示されるメニューを変...
お礼  タッちゃん  - 09/5/14(木) 17:05 -

引用なし
パスワード
   ▼もも さん:ありがとうございます。
早速試して見ます。

他のBookも一緒に変更されるのでしょうね。(自分で確認します。)

【61534】Re:右クリックで表示されるメニューを変...
回答  arajin  - 09/5/14(木) 19:51 -

引用なし
パスワード
   右クリックした時のコンテキストメニューは、その右クリックした場所によって
いろいろバリエーションがあると思いますが、
おっしゃっているのはセル上における右クリックなんでしょうね。
また、専用のメニューで表示したいのは、自ブック上のセルだけで、
よそのブックでは標準のままとしたいというのがお望みでしょうか?

であれば、標準のものはそのままにしておき、
SheetBeforeRightClickイベントで表示させるコンテキストメニューを
自前のものを出して、標準のものは出さないようにCancelさせるのがいいと思います。

ブックモジュールに以下記述。
Option Explicit
Private myCmdBar As Office.CommandBar

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  CmdBarDelete
End Sub

Private Sub CmdBarMake()
Dim myCtrl As Office.CommandBarControl
Dim NewCtrl As Office.CommandBarControl
Dim cnt As Long
  If myCmdbarExists Then Exit Sub
  Set myCmdBar = Application.CommandBars.Add(, msoBarPopup, , True)
  For Each myCtrl In Application.CommandBars("Cell").Controls
    cnt = cnt + 1
    If cnt > 6 Then Exit For
    Set NewCtrl = myCtrl.Copy(myCmdBar)
    NewCtrl.Tag = Me.Name & "Cell"
  Next
End Sub

Private Sub CmdBarDelete()
  If myCmdbarExists Then
    myCmdBar.Delete
    Set myCmdBar = Nothing
  End If
End Sub

Private Property Get myCmdbarExists() As Boolean
Dim dmy As Object
  If myCmdBar Is Nothing Then
    Set dmy = Application.CommandBars.FindControl(Tag:=Me.Name & "Cell")
    If Not dmy Is Nothing Then
      Set myCmdBar = dmy.Parent
      myCmdbarExists = True
    End If
  Else
    myCmdbarExists = True
  End If
End Property

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
  If Target.Rows.Count = Sh.Rows.Count Then Exit Sub
  If Target.Columns.Count = Sh.Columns.Count Then Exit Sub
  If myCmdBar Is Nothing Then CmdBarMake
  myCmdBar.ShowPopup
  Cancel = True
End Sub


(注意点)
なお、使っては困るコマンドボタンが何か不明でしたので、
この例示では、標準のコマンドバー"Cell"にあるコントロールの内、
自前のメニューへは、頭から6個分のコマンドを使ってもいいものとしコピーして、
それ以降のものを不可のものとして除外しました。
なので、その考慮は専用のコマンドバーを作成するCmdBarMakeを
カスタマイズしてください。


なお、よちよちさんとタッちゃんさんを同一人と判断し回答してます。

3543 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free