こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

大量のオブジェクトで同様のイベント処理をしたい場合の記述

Excel VBAでフォームなどに大量のオブジェクトを配置して、各々のオブジェクトで同様のイベントを処理したいのですが、まとめて記述する方法はあるのでしょうか。
ユーザーフォーム上に大量の数値入力ボックス(TextBoxオブジェクト)を配置して、全てのボックスに同様の入力値制限を課そうとして、コードが肥大化して困っています。どうかよろしくお願い致します。
例)
Sub TextBox1_change()
<プロシージャー>
end sub
Sub TextBox2_change()
<プロシージャー>
end sub
・・・・・・
Sub TextBox10_change()
<プロシージャー>
end sub
(<プロシージャー>部分は共通)のように延々と記述しなくても済む方法はあるのでしょうか。

投稿日時 - 2001-02-21 12:57:21

QNo.43085

すぐに回答ほしいです

質問者が選んだベストアンサー

引導を渡しに来ました(笑い)

イベントを一箇所で記述するのは無理です。
ただし、下記のように、

Sub TextBox1_change()
Call イベント処理
end sub
Sub TextBox2_change()
Call イベント処理
end sub
・・・・・・
Sub TextBox10_change()
Call イベント処理
end sub

Sub イベント処理
<プロシージャー>
End Sub

のようにして、楽をする方法は、あります。
(イベントによって、引数の数が違うので、そのあたりをどうするかと言う問題はありますけどね。)

投稿日時 - 2001-02-22 06:30:47

お礼

引導を渡して頂いてありがとうございました。私は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

あきらめて、根気良く作成を続けることにします。

投稿日時 - 2001-02-22 12:37:27

ANo.2

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

Controlsコレクションを使ってみたらいかがでしょうか?
使い方はヘルプを見てください。

要はフォーム上のオブジェクトをぜーんぶ配列にしちゃったようなもんです。

投稿日時 - 2001-02-21 18:17:07

補足

早速のご解答ありがとうございます。
Controlコレクションは1つのイベントに対して複数のコントロールを一括処理する場合には使えますよね。(たとえば、あるCommandButtonオブジェクトをクリックしたら全てのTextBoxオブジェクトをクリアするなど…)

質問は、複数のオブジェクトで発生するイベントに対して一括でコードを記述したいということです。イメージ的には下記のような記述方法がないかということです。(下記のコードそのものは動きません。無理がありますね・・・)
コードの美しさの問題だけなのですが・・・
例)
For Each MyTextBox In Controls
 Sub MyTextBox_change()
  ・・・・・
 End Sub
Next MyTextBox

『無理に決まってんじゃん』と断定できる方がいましたら(笑)、私に引導を渡して下さい。よろしくお願い致します。

投稿日時 - 2001-02-21 19:35:45

あなたにオススメの質問