Script事業案内エクセル以外トップマクロVBAVBAクラス入門VBAクラスを使ったイベント作成(Event,RaiseEvent,WithEvents)最終更新日:2020-01-06VBAクラスを使ったイベント作成(Event,RaiseEvent,WithEvents)VBAクラスを使う事で、ユーザー定義イベントを作成したり、動的にイベントを割り当てる事が出来ます。ユーザー独自のイベントを作成したり、フォームに動的に追加したコントロールにイベントを設定することができます。EventステートメントとRaiseEventステートメントを使う事で、ユーザー定義イベントつまりユーザー独自のイベントを作成できます。変数宣言にWithEventsキーワードを指定することで、クラスで発生するイベントに応答することができます。ここでは、ユーザーフォームを使って、極めて単純なイベントを実装しています。このVBAサンプルは、これで何かができるというものではなく、クラスのイベントを理解する為に極めて単純化したVBAコードになります。Eventステートメントユーザー定義イベントを宣言します。プロシージャー名[(引数リスト)]引数リストは、プロシージャーの引数リストと同様ですが、イベントに名前付き引数、省略可能な引数、またはParamArray引数を指定することはできません。モジュールレベルで宣言します。値を返すようにイベントを宣言することはできません。RaiseEventステートメントを使用してイベントを発生させます。イベントは、それが宣言されているモジュール内でしか生成できません。RaiseEventステートメントモジュールレベルで宣言したイベントを発生させます。イベント名[(引数リスト)]イベント名は、モジュール内でEventステートメントで宣言されたイベントの名前です。イベントが発生したモジュール内で、そのイベントが宣言されていない場合は、エラーが発生します。WithEventsキーワードWithEventsキーワードは、次の構文で使用します。変数がイベントに対応するためのオブジェクト変数であることを指定するキーワードです。オブジェクトのモジュールのみで使えます、つまり、標準モジュールでは使用できません。WithEventsは任意の数の変数に宣言できます。WithEventsでは配列は作成できません。キーワードNewとWithEventsは一緒には使用できません。Excel.Applicationこのように、WithEventsとNewは分けて使わなければなりません。標準モジュールと動作概要ユーザーフォームにボタンが2つだけ存在し、クリックでメッセージボックスを表示します。これだけですが、ボタン1とボタン2では全く違った実装となります。ボタン1ユーザーフォームに最初から配置されているボタンです。クリックすると、3秒後にセッメージボックスが表示されます。ボタン2ユーザーフォームの初期化(Initialize)で動的に追加したボタンです。クリックすると、直ぐにセッメージボックスが表示されます。起動するプロシージャーは以下になります。Sub記述場所およびプロシージャー名等、特に何も制限はありません。UserForm1を表示さえすれば、どのような方法でも構いません。"がクリックされました。Subクラスを使ったイベントの解説2つのボタンは全く互いに関係はありません、基本的に独立したボタンです。(ボタン2を配置する時だけボタン1を使っています。・EventステートメントとRaiseEventステートメントでの、ユーザー定義イベント・WithEventsキーワードでの、クラス発生イベントの応答これらを別々に解説するところなのでしょうが、ここではこの2つを一緒にしたものになります。クラスを使ったイベントとして、混乱しやすく覚えづらい部分なので、その違いを比較しやすいようにと言う目的があります。VBAの中でのコメントとして、ボタン1:ボタン2:その変数またはプロシージャーが使われているボタンを指しています。変数およびプロシージャーは、それぞれのボタンで全く別々のものが使用されています。ボタン1の動作順ユーザーフォームに最初から配置されているボタンです。ユーザーフォームが表示された後にボタン1クリック。TimerEventここでEventステートメントで定義されているTimerEventを発生させる・mTimer_TimerEventプロシージャーWithEventsキーワード定義したmTimerのTimerEventが呼ばれるここでの動作自体は、単にClickイベントでメッセージ表示している事と何も変わりません。あくので、EventとRaiseEventの使い方のサンプルVBAとしての意味合いだけのものです。ボタン2の動作順フォームに動的に追加したコントロールにイベントを設定しています。ボタン2は、ユーザーフォームには最初は配置されていないボタンです。・addButtonここで動的にボタンを作成し、クラスにボタンを登録しています。ユーザーフォームが表示された後にボタン2クリック。MSForms.CommandButtonフォーム標準のボタンを割り当てています。Clickはボタンに標準で存在するイベントです。・EventステートメントとRaiseEventステートメントでの、ユーザー定義イベント・WithEventsキーワードでの、クラス発生イベントの応答いずれも頻繁に使うものではないと思います。したがって、全部を覚えようとすることは無いと思います。動作の仕組みを理解しておき、実際に使う時に調べながら記述できるようにしておくだけで良いでしょう。Next)|VBA入門7.マクロって何?VBAって何?|VBA入門8.セルに文字を入れるとは(Range,Value)|VBA入門9.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説10.ひらがな⇔カタカナの変換|エクセル基本操作トップマクロVBAVBAクラス入門VBAクラスを使ったイベント作成(Event,RaiseEvent,WithEvents)このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。GASスプレッドシート入門スプレッドシート応用GAS入門GAS応用トップマクロVBAVBAクラス入門VBAクラスを使ったイベント作成このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。