Excel VBA質問箱 IV

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

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


46426 / 76735 ←次へ | 前へ→

【35280】Re:埋め込みグラフ選択時イベントが発生しない
発言  ichinose  - 06/2/25(土) 9:06 -

引用なし
パスワード
   ▼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のインスタンスをどのタイミングで
作成するかを考えなければなりません。

シートをユーザーに自由に触らせる環境でのプログラムは
やっぱり大変です。
2 hits

【35173】埋め込みグラフ選択時イベントが発生しない VBA初心者 06/2/22(水) 21:28 質問
【35176】Re:埋め込みグラフ選択時イベントが発生し... ichinose 06/2/23(木) 9:00 発言
【35277】Re:埋め込みグラフ選択時イベントが発生し... VBA初心者 06/2/24(金) 22:37 お礼
【35280】Re:埋め込みグラフ選択時イベントが発生し... ichinose 06/2/25(土) 9:06 発言

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