技術情報
[04] 埋め込みグラフでイベントを使用する
ExcelのシートにはWorksheetとChartがあります。
WorksheetはセルがあるExcelの基本となるシートですが、Chartはグラフ専用のシートです。
グラフは、Worksheetに埋め込みとして表示することもできますし、Chartに表示することもできます。

Chartにグラフを作成した場合には、Chartにデフォルトでセットされているモジュールにはあらかじめグラフ用のイベントが定義されています。
一方で、DragOverイベントなどChartモジュールにはあらかじめ定義されていても実際には使えないものも含まれています。
そのような場合には、Worksheetに埋め込んだグラフにイベントを定義することですべてのイベントを使用することができるようになります。

ここでは、Worksheetに埋め込んだグラフにイベントを定義する方法を説明します。


Visual Basic Editorのメニューから「挿入」→「クラスモジュール」を選択します。



クラスモジュールを追加すると、デフォルトでは「Class1」のような名前が付けられています。
(クラスモジュールのプロパティで名前は変更することができます。)
追加したクラスモジュールに、
  Public WithEvents myGraph As Chart
というChartオブジェクト変数を定義します。
どのモジュールからも参照できるように"Public"として定義します。
"myGraph"の部分は自由に定義して構いませんが、定義を変更した場合には、この後の説明を変更したものに読み替えてください。


この状態でクラスモジュールのコード記述エリアにあるドロップダウンリストに定義したオブジェクト変数と使用できるイベントの一覧が表示されます。
しかし、このままではWorksheetに埋め込まれたグラフとの結びつけができていませんので、実際にグラフに対するイベントは実行されません。


結びつけの処理はどのモジュールでも構いませんが、ここではグラフが埋め込まれているWorksheetのモジュールに記述します。
(1)では追加したクラスモジュールのオブジェクト変数を宣言しています。
(2)ではグラフを関連づけるための処理を定義しています。
ここでは、グラフが埋め込まれたWorksheetがアクティブになったときに自動的に結びつけを実行するようにしています。
ユーザ定義のサブルーチンに記述して、結びつけ実行のタイミングをユーザが制御しても構いません。
(1)で定義したクラスモジュールのオブジェクト変数には、クラスモジュールで宣言したChartオブジェクト変数の"myGraph"が含まれていますので、このオブジェクト変数に埋め込みグラフのオブジェクトを代入します。
"ChartObjects(1).Chart"はWorksheetに埋め込んだグラフを表していますが、これは作成した環境により数値が変わりますので注意してください。
また、Worksheet名の"Sheet1"も同様に環境によって変わります。