| 
    
     |  | ▼VBA初心者 さん: おはようございます。
 >ご回答ありがとうございます。確認してみたところ、確かにこの方法ならイベントは発生しますね。この方法は気づきませんでした。もっともこのコードを書きこんだブックのグラフを選択した場合のみに適応され、その他のブックの場合はやはり同様にイベントが発生しない状況になってしまいますね。。。 実は私の作成したブックででは自前のメニューを表示させてるのですが、このブックを複数立ち上げた場合メニューが増えてしまいうっとうしい為、アクティブなブックのメニューのみ表示させているのです。メニューの表示(非表示)のタイミングはブックのactivate時(deactivate時)なのですが、この時、既述の現象が発生してしまいメニューが切り替わらない状況が発生しています。。。やっぱりEXCELのバグなんでしょうか・・・。おっしゃるとおり仕様変更しかないかなぁ。。。
 
 不特定のブックの既存グラフを選択した状態で
 
 Workbook_WindowActivateイベントや
 
 Workbook_WindowDeactivateイベントを発生させることは
 
 前回のコードの応用で可能です。
 
 不特定なブックにあるグラフのイベントを管理するブックを作ります。
 仮にこのブックをmng.xlsとしましょう。
 
 
 このブックにクラスモジュールを作成します
 (クラス名は自動作成されるClass1)。
 ここに
 '=======================================================
 Private WithEvents cht As Chart
 Private svwn As Window
 '======================================================================
 Private Sub cht_Activate()
 Application.EnableEvents = False
 svwn.Activate
 DoEvents
 cht.Parent.Select
 Application.EnableEvents = True
 End Sub
 '=====================================================================
 Sub set_cht(chtobj As ChartObject, wn As Window)
 Set cht = chtobj.Chart
 Set svwn = wn
 End Sub
 
 
 このブックのThisworkbookモジュールに
 '====================================================================
 Private chtcls() As Class1
 Private clscnt As Long
 Dim WithEvents app As Application
 '================================================================
 Sub stt_mng()
 Set app = Application
 End Sub
 '========================================================================
 Private Sub app_WindowActivate(ByVal Wb As Workbook, ByVal wn As Window)
 Dim idx As Long
 Dim sht As Worksheet
 clscnt = 0
 For Each sht In Wb.Worksheets
 For idx = 1 To sht.ChartObjects.Count
 ReDim Preserve chtcls(1 To clscnt + 1)
 Set chtcls(clscnt + 1) = New Class1
 chtcls(clscnt + 1).set_cht sht.ChartObjects(idx), wn
 clscnt = clscnt + 1
 Next
 Next
 End Sub
 '=================================================================
 Private Sub app_WorkbookDeactivate(ByVal Wb As Workbook)
 Erase chtcls()
 clscnt = 0
 End Sub
 
 として、stt_mngを実行後、不特定のブックのグラフを選択した状態で
 イベントが発生するか確認してください。
 
 私ならこのmng.xlsをアドインブックにして使用します。
 
 
 但し、ちょっと考えただけでもまだ問題はあります。
 
 例えば、上記のコードは、予め作成されているグラフに関しては有効ですが、
 新たに作成するグラフに関してはClass1のインスタンスをどのタイミングで
 作成するかを考えなければなりません。
 
 シートをユーザーに自由に触らせる環境でのプログラムは
 やっぱり大変です。
 
 |  |