• ベストアンサー

ExcelVBAでコントロールのイベントについて

例えばTextbox1~Textbox100まであるとします 全てに対してChangeイベントを使いたいのですが、ひとつひとつに対してマクロを記述しないといけないのでしょうか?全て同じ処理をさせたいのですが・・・ なにかよい方法は無いでしょうか?

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

  • ベストアンサー
  • masa_019
  • ベストアンサー率61% (121/197)
回答No.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イベントのプロシージャになります。

jobvba
質問者

お礼

クラスモジュールですか! まだ使ったことが無いので知りませんでした・・・ やってみます!ありがとうございました!

その他の回答 (1)

  • pauNed
  • ベストアンサー率74% (129/173)
回答No.1

こんにちは。 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

jobvba
質問者

お礼

VBAではコントロール配列ができないと聞いていましたが、擬似的にできることは知りませんでした! ありがとうございます!

関連するQ&A