'
'
Option Explicit
'######################################################################
'右クリックメニュー(="Cell")に、オリジナルのメニューを追加する
'######################################################################
Sub OrgMenuAdd()
Dim NewMenu01 As CommandBarButton
'空の新しいメニューを作成
Set NewMenu01 = Application.CommandBars("Cell").Controls.Add() 'セルに対しての右クリックメニューン場合は、("Cell") と書きます。他のものは他の書き方になります。
'空のメニューに対して各種設定をします。
NewMenu01.Caption = "テストメニュー" 'メニューの文言は「テストメニュー」にする。
NewMenu01.OnAction = "TestProc01" '「TestProc01()」プロシージャを呼び出すようにする。「TestProc01()」は標準モジュールのプロシージャ名
NewMenu01.BeginGroup = False 'どこかのグループには含めず、一番下に表示??(まだちゃんを分かっていません。すみません。)
End Sub
'######################################################################
'追加したテストメニューから呼び出されるプロシージャ
'######################################################################
Sub TestProc01()
MsgBox "あああああああああ"
End Sub
'######################################################################
'テストメニューのインデックス番号を調べたいので、
'For Eachでキャプション(表示文言)と番号を調査
'######################################################################
Sub OrgCommandCtl_ItemNumber_Search01()
Dim bb As CommandBarControl 'bbにしたのは特に意味はありません。
'さっと調べたかっただけなので短くしたかっただけです。
For Each bb In Application.CommandBars("Cell").Controls
Debug.Print bb.Index & "---" & bb.Caption
Next bb
End Sub
'######################################################################
'調べたインデックス番号で、追加したメニューを削除
'######################################################################
Sub OrgCommandCtl_Del()
Dim MigiMenuCtls_01 As CommandBarControls
Set MigiMenuCtls_01 = Application.CommandBars("Cell").Controls
MigiMenuCtls_01.Item(27).Delete
' MigiMenuCtls_01.Item("テストメニュー").Delete
' MigiMenuCtls_01("テストメニュー").Delete
'削除は↑この書き方でも可。
'メニューの特定・指定は、インデックス番号のほかに、キャプションでもできるようです。
'インデックス番号だと、並び順を変えた場合に、
'もろともで インデックス番号も変わってしまうため、
'独自メニューの指定がめんどくさくなるので、
'キャプションで指定してしまうほうがラクちんっぽいです。
End Sub
'######################################################################
'「セル」に対しての右クリックメニューのリセット(初期状態に戻す)
'######################################################################
Sub CellMigiClickMenuReset()
Application.CommandBars("Cell").Reset
End Sub
'######################################################################
'調べたインデックス番号で、追加したテストメニューの
'「OnAction(=呼び出すプロシージャ)」の内容と、並び順を変更
'######################################################################
Sub OrgCommandCtl_OnAction_Add()
Dim MigiMenuCtls_01 As CommandBarControls 'CommandBarControlsコレクションを格納するためのオブジェクト変数を定義。
Set MigiMenuCtls_01 = Application.CommandBars("Cell").Controls
MigiMenuCtls_01.Item(27).OnAction = "Personal.xls!TestProc200" '個人用マクロブックの「TestProc200」プロシージャが呼び出されるように差し替え
'↑拡張子は「xls」じゃなかったら、「xlsb」に変更してください。
MigiMenuCtls_01.Item(27).Move Before:=1
'↑並び順の変更。独自メニューの並び順の位置を一番上にもってくる。
'(3番目にもってきたいなら、一番下などにあるときに Before:=3 と書きます。
' その時点で上から3番目にあるメニューの上に挿入されます。)
'MigiMenuCtls_01.Item(27).Move Before:=1 を・・・・、
'「MigiMenuCtls_01(27).Move Before:=1」とか、
'「MigiMenuCtls_01.Item("テストメニュー").Move Before:=1」
'「MigiMenuCtls_01("テストメニュー").Move Before:=1」と書いても可、です。
'基本、「Item」は各コレクションオブジェクトの既定のプロパティ(必ず内包
'しているプロパティ?)のため、そのため、省略することもできるので、
'もしそうしたい場合は、「MigiMenuCtls_01("テストメニュー")・・・・」と
'書くこともできます。
'
'基本、メニューの特定・指定は、インデックス番号のほかに、
'キャプションでもできるようです。
'メニューの並び順を変えた場合には、
'もろともでインデックス番号も変わってしまうため、
'もし何度もメニューの並び順を変えたい場合は、インデックス番号ではなくて
'キャプションで指定してしまうほうがラクちんっぽいです。
End Sub
'
'