4月, 2006 のアーカイブ

MOUGのスキルアップ講座に「クラスモジュールを使った究極のVBAプログラミング」と題されたコラムの5ページ目にコントロール配列に関する記述があり、フォーム上に配置した5つのコマンドボタンをクリックしたときに走らせるコードをひとつで済ませる方法が説明されています。通常は各ボタンに共通した動きをさせるプロシージャを用意してサブルーチン化し、それぞれのイベントプロシージャから走らせる、という面倒なことをしなければならないわけですから、ここで紹介されているやり方はCoolです。

これと同じようなことをテキストボックスにおいてもやってみたいと考えて試してみたのですが、何故かイベントプロシージャには存在するAfterUpdateイベントがクラスモジュールにはない様なのです。VBEのオブジェクトブラウザから見ても、MSForms.TextboxのメンバにAfterUpdateはありません。イベントとしてChangeとかDblClickとかはあるのですが、テキストボックスという性質上、やはりユーザーが入力を完了した時点で動作をさせたいわけで、Changeだと一文字打ち込むごとに動いてしまうのでよろしくありません。

何をさせたいのかというと、現行バージョンでも行っている3桁ごとにカンマを入れることに加え、次回からは入力が終了した時点でBlinkしたりフォント色を変えたりさせれば無愛想なフォームに多少は彩が出るのかな、と(余計と思われる方もいるかもしれませんが…)。

検索してみるとメンバにAfterUpdateがあるのはMSForms.Controlだけのようですねぇ。クラスモジュールにMSForms.Controlとして用意した変数に無理やりテキストボックスを入れてAfterUpdateイベントのメソッドを書いてみましたが見事はねられました。
何故フォームに存在するイベントがクラスモジュールでは使えないのか不思議です。