最終更新日:2020-01-13第23回.イベントプロシージャーの共通化ユーザーフォームに部品コントロールを配置していくとき、同種のコントロールを繰り返し何個も配置することは良くあります。コピペしながらようやく配置し終わったと思ったら、今度はVBAで同じイベントプロシージャーを何個も作成しなければならなくなります。いずれも開発初期の作業としてコピペしながら作成すれば良いものですが、どうしても、同じ作業の繰り返しは何とかならないものかと思ってしまうのは当然の事でしょう。今回は、この同じイベントプロシージャーを共通化して1つにするテクニックをお伝えします。こちらて紹介したフォームと同じものを使用します。ユーザーフォームは、事前に画面デザインを考えて、それにそって部品コントロールを配置するものです。ユーザーの操作に応じて、動的に部品コントロールを変更したい場合があります。このような場合の対処方法としては、大きく以下の2通りの方法があります。こちらをご参照ください。このフォームモジュールのVBAでは、5つのチェックボックスのChangeイベントが5つ並んでいます。数が増えても追記しなくて済むように、イベントプロシージャーを1つにまとめます。Functionフォームモジュールモジュール名:何でも構いません。標準モジュールでの.Showに合わせてください。こちらとの違いは太字部分だけになります。WithEventsの使い方が分かれば、イベントプロシージャーは決まったパターンでしかありません。WithEventsのイベントプロシージャーは、WithEvents変数名_イベント名これはVBAの規則となっています。スペル間違いに注意してください。実際に動かして、VBAがどのように動作しているか確認してみましょう。イベントプロシージャーの共通化の問題点コントロールの型ごとにWithEventsが必要WithEventsの型に指定するのは、MSFormsの当該の具体的なコントロールの型を指定します。抽象型のMSForms.Controlでは、実行時に以下のエラーが発生します。したがって、コントロールの種類ごとにWithEventsを定義する必要があります。