|
▼kamikaya さん:
解決しました。
新規にグラフを追加した際にはNewChartイベントが発生するみたいなので次のように改良しました。
またNorthさんの追加したい項目が"調整"となっていましたが,これはグラフのサイズなどを調整するということでしょうか??
もしそうでしたらVectorでグラフ調整ソフト"GrapgAdjust"というものを配布しているので良ければ使ってみてください(ステマ(笑))
【Microsoft Excel Objects ThisWorkbook】
Option Explicit
Private WithEvents xApp As Application
'■アドインファイル(これ)が起動したとき…
Private Sub Workbook_Open()
' アドイン起動時、Applicationオブジェクトのイベントをキャッチ
Set xApp = Me.Application
'独自右クリックメニューの作成
subSettingMyMenu
End Sub
'■既存のブックが開いたとき…
Private Sub xApp_WorkbookOpen(ByVal wb As Workbook)
Dim Chrt As ChartObject
Dim WS As Worksheet
'グラフの割り当て
For Each WS In wb.Worksheets
For Each Chrt In WS.ChartObjects
subChartEventSetting Chrt.Chart
Next
Next
End Sub
'■新規ブックが作成されたとき…(新規ブックにはグラフはないはずなので要らないかも)
Private Sub xApp_NewWorkbook(ByVal wb As Workbook)
Dim Chrt As ChartObject
Dim WS As Worksheet
For Each WS In wb.Worksheets
For Each Chrt In WS.ChartObjects
subChartEventSetting Chrt.Chart
Next
Next
End Sub
'■新しくグラフが追加されたとき…
Private Sub xApp_WorkbookNewChart(ByVal wb As Workbook, ByVal Ch As Chart)
'グラフの割り当て
subChartEventSetting Ch
End Sub
【標準モジュール】
Option Explicit
Public MyMenu
Public MyMenu2
Private ChrtEvents As New Collection
'■グラフの割り当て
Public Sub subChartEventSetting(Ch As Chart)
'アクティブブック上のすべてのグラフに独自右クリックメニューを割り当てる
Dim ChartEvent As New Class1
Set ChartEvent.xChart = Ch
ChrtEvents.Add ChartEvent
End Sub
'■独自右クリックメニューの作成
Public Sub subSettingMyMenu()
Dim i As Integer
Set MyMenu = Application.CommandBars.Add(Position:=msoBarPopup, Temporary:=True)
With MyMenu
With .Controls.Add
.Caption = "Test"
.OnAction = "subTest"
End With
End With
End Sub
'■最終的に実行したいマクロ
Private Sub subTest()
MsgBox "Hello world"
End Sub
'■何らかの原因でイベント処理が割り当てられなかったとき用の手動割り当て
Sub 実行するマクロ()
Dim Chrt As ChartObject
Dim WS As Worksheet
'独自右クリックメニューの作成
subSettingMyMenu
'グラフの割り当て
For Each WS In ActiveWorkbook.Worksheets
For Each Chrt In WS.ChartObjects
subChartEventSetting Chrt.Chart
Next
Next
End Sub
【クラスモジュール(Class1)】
Option Explicit
Public WithEvents xChart As Chart
'■グラフ上でマウスボタンが押されたら…
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
End Sub
|
|