- ベストアンサー
ExcelVBAでコントロールのイベントについて
例えばTextbox1~Textbox100まであるとします 全てに対してChangeイベントを使いたいのですが、ひとつひとつに対してマクロを記述しないといけないのでしょうか?全て同じ処理をさせたいのですが・・・ なにかよい方法は無いでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 とりあえずテキストボックスが5個だとこんな感じ。 ユーザーフォーム上にテキストボックスを5個配置します。 フォームのオブジェクト名はUserForm1、 テキストボックスのオブジェクト名はTextBox1~5 とします。 クラスモジュールを挿入して以下のコード Option Explicit Public WithEvents fmTxt As MSForms.TextBox Private Sub fmTxt_Change() MsgBox fmTxt.Name & ":" & fmTxt.Text End Sub (オブジェクト名はClass1) ユーザーフォームのモジュールに Option Explicit Private clstxt(5) As New Class1 Private i As Integer Private Sub UserForm_Initialize() For i = 1 To 5 Set clstxt(i).fmTxt = Me.Controls("TextBox" & i) Next End Sub Private Sub UserForm_Terminate() For i = 1 To 5 Set clstxt(i).fmTxt = Nothing Next End Sub テキストボックスが100個でも同様にすれば出来ると思います。 クラスモジュールの Private Sub fmTxt_Change() がテキストボックスのChangeイベントのプロシージャになります。
その他の回答 (1)
- pauNed
- ベストアンサー率74% (129/173)
こんにちは。 Private Sub TextBox1_Change() Call test End Sub Private Sub TextBox2_Change() Call test End Sub : とコピー作成し、本体testプロシージャを別にしてまとめるとか。 それでも面倒な場合はクラスモジュールを使って、擬似コントロール配列を作成するとできると思います。 http://www.moug.net/skillup/opm/opm08-01.htm
お礼
VBAではコントロール配列ができないと聞いていましたが、擬似的にできることは知りませんでした! ありがとうございます!
お礼
クラスモジュールですか! まだ使ったことが無いので知りませんでした・・・ やってみます!ありがとうございました!