- ベストアンサー
大量のオブジェクトで同様のイベント処理をしたい場合の記述
Excel VBAでフォームなどに大量のオブジェクトを配置して、各々のオブジェクトで同様のイベントを処理したいのですが、まとめて記述する方法はあるのでしょうか。 ユーザーフォーム上に大量の数値入力ボックス(TextBoxオブジェクト)を配置して、全てのボックスに同様の入力値制限を課そうとして、コードが肥大化して困っています。どうかよろしくお願い致します。 例) Sub TextBox1_change() <プロシージャー> end sub Sub TextBox2_change() <プロシージャー> end sub ・・・・・・ Sub TextBox10_change() <プロシージャー> end sub (<プロシージャー>部分は共通)のように延々と記述しなくても済む方法はあるのでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
引導を渡しに来ました(笑い) イベントを一箇所で記述するのは無理です。 ただし、下記のように、 Sub TextBox1_change() Call イベント処理 end sub Sub TextBox2_change() Call イベント処理 end sub ・・・・・・ Sub TextBox10_change() Call イベント処理 end sub Sub イベント処理 <プロシージャー> End Sub のようにして、楽をする方法は、あります。 (イベントによって、引数の数が違うので、そのあたりをどうするかと言う問題はありますけどね。)
その他の回答 (1)
- shigatsu
- ベストアンサー率26% (511/1924)
Controlsコレクションを使ってみたらいかがでしょうか? 使い方はヘルプを見てください。 要はフォーム上のオブジェクトをぜーんぶ配列にしちゃったようなもんです。
補足
早速のご解答ありがとうございます。 Controlコレクションは1つのイベントに対して複数のコントロールを一括処理する場合には使えますよね。(たとえば、あるCommandButtonオブジェクトをクリックしたら全てのTextBoxオブジェクトをクリアするなど…) 質問は、複数のオブジェクトで発生するイベントに対して一括でコードを記述したいということです。イメージ的には下記のような記述方法がないかということです。(下記のコードそのものは動きません。無理がありますね・・・) コードの美しさの問題だけなのですが・・・ 例) For Each MyTextBox In Controls Sub MyTextBox_change() ・・・・・ End Sub Next MyTextBox 『無理に決まってんじゃん』と断定できる方がいましたら(笑)、私に引導を渡して下さい。よろしくお願い致します。
お礼
引導を渡して頂いてありがとうございました。私はarataさんのやり方で引数にイベントを起こしたオブジェクト自身を渡して以下のようにしています。 Sub TextBox1_change() Call イベント処理(TextBox1,...) end sub Sub TextBox2_change() Call イベント処理(TextBox2,...) end sub ・・・・・・ Sub TextBox10_change() Call イベント処理(TextBox10,...) end sub Sub イベント処理 (EventObj As Object,...) <プロシージャー> End Sub あきらめて、根気良く作成を続けることにします。