|
▼North さん:
先ほども言ったように,グラフの既存の右クリックメニューへの追加はできませんが,以下のように独自の右クリックメニューを作成することはできます。
下記のコードをそれぞれのモジュールにコピーして,プロシージャ"実行するマクロ"を実行してみてください。
グラフ上で[Shift]キーを押しながら右クリックを押すことで独自右クリックメニュー(Test)がポップアップするようになっています。
※これでは各ブックで行わなくてはならないので,実装するならアドインファイルとした方が良いかと思います。
【Microsoft Excel Objects ThisWorkbook】
Private WithEvents xApp As Application
【標準モジュール】
Option Explicit
Public MyMenu
Private ChrtEvents As New Collection
'■はじめに起動する場所
Sub 実行するマクロ()
'独自右クリックメニューの作成
subSettingMyMenu
'独自右クリックメニューのグラフへの割り当て
Dim CH As ChartObject
Dim WS As Worksheet
'アクティブブック上のすべてのグラフに独自右クリックメニューを割り当てる
For Each WS In ActiveWorkbook.Worksheets
For Each CH In WS.ChartObjects
Dim ChartEvent As New Class1 '"Class1"の箇所はクラスモジュールの名前と揃える
Set ChartEvent.xChart = CH.Chart
ChrtEvents.Add ChartEvent
Next
Next
End Sub
'■独自右クリックメニューの作成
Private Sub subSettingMyMenu()
Set MyMenu = Application.CommandBars.Add(Position:=msoBarPopup, Temporary:=True)
With MyMenu
With .Controls.Add
.Caption = "Test" 'そちらの"調整"に相当
.OnAction = "subTest" 'そちらの"mAdj"に相当
End With
End With
End Sub
'■最終的に実行したいマクロ
Private Sub subTest()
MsgBox "Hello world"
End Sub
【クラスモジュール(Class1)】
Option Explicit
Public WithEvents xChart As Chart
Dim Flag As Boolean
'■グラフ上でマウスボタンが押されたら…
Private Sub xChart_MouseDown(ByVal Button As Long, ByVal Shift As Long, ByVal X As Long, ByVal Y As Long)
If Button = 2 Then
If Shift = 1 Then
MyMenu.ShowPopup
End If
End If
Flag = True
End Sub
'■グラフが右クリックされたら…
Private Sub xWorksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If Flag = True Then
Cancel = True
Flag = False
End If
End Sub
|
|