#15_1 イベントマクロの作成
改めてイベントマクロの定義を学ぼう
ユーザーフォームの項目でちょいちょい出てきましたが、ここで改めてイベントマクロとはなんぞやという所から始めましょう。
通常のマクロはVBEから実行するか、ショートカットキー、あるいは[フォームコントロール]のボタンによって実行します。一方で「イベントマクロ」とは「ブックを閉じる」「セルのダブルクリック」「セルの値を変える」などユーザー操作「イベント」に反応して自動的に実行されるマクロです。
この章では様々なイベントマクロを体験し、その利便性を学んでください。
まずはブックのイベントから始めよう
それでは手始めにブックのイベントマクロを作成してみましょう。まずは新規ブックを用意します。するとVBEのプロジェクトエクスプローラ上に「ThisWorkbook」ができます。
その後、[オブジェクト]ボックスでWorkbookを選択し、[プロシージャ]ボックスからOpenを選択しましょう。
すると、ブックを開いたときに自動的に実行されるマクロを作ることができるので、以下のように、他のブックも同時に開くマクロを作ってみましょう。
イベントマクロの作成場所
イベントマクロがどのようなものかを体験できたと思うので、今回はより深くイベントマクロを理解しましょう。焦点は「イベントマクロの作成場所」「マクロのタイトル」「イベントマクロ内の変数」に当てていきましょう。
まず、イベントマクロの作成場所です。イベントマクロは「オブジェクト」にどのような「イベント」が発生したのかに反応しますが、標準モジュールに作成するのではなく、「オブジェクトモジュール」に作成します。
上記の例で言えば、ブックのイベントに反応するイベントマクロを作成するために、プロジェクトエクスプローラで「ThisWorkbook」を選択し、コードウィンドウ上にマクロ(上記の例ではOpenというイベントに反応するマクロ)を記述します。
イベントマクロのタイトル
既に気づいている方も多いと思いますが、イベントマクロのタイトルはユーザーが任意につけるものではなく、規則に従った意味のあるものです。例えばブックを開くときのイベントマクロは次のようなタイトルでした。
Private Sub Workbook_Open()
実はこれは次のような規則になっています。
Private Sub オブジェクト_イベント()
このように、[オブジェクト]ボックスで選択したオブジェクトと、[プロシージャ]ボックスで選択したイベントによって、イベントマクロのタイトルは決定します。
例として、ブックを保存する直前に行うマクロの例を示します。
イベントマクロ内の変数
先の「ThisWorkbook」のようなモジュールを、標準モジュールに対してオブジェクトモジュールと呼びます。その他にもオブジェクトエクスプローラ上にてシートを表す「Sheet1」「Sheet2」もオブジェクトモジュールです。
そのオブジェクトモジュール内で宣言した変数は、そのマクロ内のみで使用することができます。もしモジュールレベル変数を使用したければ、イベントマクロの宣言セクションで変数を定義する必要があります。
オブジェクトモジュールにおけるパブリック変数
マクロレベル変数(マクロ内の変数)とモジュールレベル変数(宣言セクションで宣言する変数。モジュール内のすべてのマクロで利用可能)に関して、その適用範囲は標準モジュールもオブジェクトモジュールも同じです。しかし、パブリック変数(Pablicキーワードで宣言した変数)においては大きな違いがあります。
標準モジュール内で宣言したパブリック変数は、どのモジュールでも利用できるものでしたが、オブジェクトモジュール内で宣言したパブリック変数は、他のモジュールのマクロでは使用できません。なので、パブリック変数を使いたい場合には、必ず標準モジュール内で宣言するようにしてください。