Excel VBA質問箱 IV

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

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


4065 / 76734 ←次へ | 前へ→

【78297】Re:グラフを右クリック時のメニュー追加
発言  kamikaya  - 16/6/17(金) 21:05 -

引用なし
パスワード
   ▼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

4 hits

【78283】グラフを右クリック時のメニュー追加 North 16/6/17(金) 9:07 質問[未読]
【78285】Re:グラフを右クリック時のメニュー追加 kamikaya 16/6/17(金) 9:20 発言[未読]
【78293】Re:グラフを右クリック時のメニュー追加 kamikaya 16/6/17(金) 14:36 発言[未読]
【78294】Re:グラフを右クリック時のメニュー追加 North 16/6/17(金) 14:45 お礼[未読]
【78295】Re:グラフを右クリック時のメニュー追加 kamikaya 16/6/17(金) 15:18 質問[未読]
【78297】Re:グラフを右クリック時のメニュー追加 kamikaya 16/6/17(金) 21:05 発言[未読]

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