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

このQ&Aに関連する最新のQ&A

A 回答 (2件)

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



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

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

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

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

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

Controlsコレクションを使ってみたらいかがでしょうか?


使い方はヘルプを見てください。

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

この回答への補足

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

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

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

補足日時:2001/02/21 19:35
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング