|
▼kamikaya さん:
ちょっと加筆修正しました。
下記のコードはアドインファイルに記述します。既存のブックが開かれるたびにグラフの割り当てを自動的に行います。
ただし,これの問題はすでに開いているブックで新たにグラフを作成した場合,そのグラフには手動でイベント割り当てを行う必要があります(そのためのマクロ"実行するマクロ")。
逆質問で申し訳ないのですが,シート上でグラフが新規作成された場合にイベントを発生させる方法を知っている方がいらっしゃいましたらご教授のほどお願いします。
【Microsoft Excel Objects ThisWorkbook】
Option Explicit
Private WithEvents xApp As Application
'■アドインファイル(これ)が起動したとき…
Private Sub Workbook_Open()
' アドイン起動時、Applicationオブジェクトのイベントをキャッチ
Set xApp = Me.Application
End Sub
'■既存のブックが開いたとき…
Private Sub xApp_WorkbookOpen(ByVal WB As Workbook)
'グラフの割り当て
subChartEventSetting WB
End Sub
【標準モジュール】
Option Explicit
Public MyMenu
Private ChrtEvents As New Collection
'■はじめに起動する場所
Sub 実行するマクロ()
subChartEventSetting ActiveWorkbook
End Sub
'■グラフの割り当て
Public Sub subChartEventSetting(WB As Workbook)
'独自右クリックメニューの作成
subSettingMyMenu
'独自右クリックメニューのグラフへの割り当て
Dim CH As ChartObject
Dim WS As Worksheet
'アクティブブック上のすべてのグラフに独自右クリックメニューを割り当てる
For Each WS In WB.Worksheets
For Each CH In WS.ChartObjects
Dim ChartEvent As New 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"
End With
End With
End Sub
'■最終的に実行したいマクロ
Private Sub subTest()
MsgBox "Hello world"
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
|
|