テキストボックスの一括処理について。 現在、ユーザーフォームにテキストボックスが50個設置されています。 フォームを読み込んだ時は、テキストボックス1以外は非表示設定です。
テキストボックスの一括処理について。 現在、ユーザーフォームにテキストボックスが50個設置されています。 フォームを読み込んだ時は、テキストボックス1以外は非表示設定です。 テキストボックス1に値が入力されたらテキストボックス2を表示、テキストボックス2に値が入力されたらテキストボックス3を表示としています。 Private Sub TextBox1_change() TextBox2.visible = True End Sub このコードをテキストボックスごとに50個書くのは大変なので、一括処理する方法などないでしょうか?
Visual Basic | Excel・114閲覧・50
ベストアンサー
ちょっと敷居が高いと思いますが、クラスモジュールを使わないと簡略化出来ないと思います。 クラスモジュールに Private WithEvents tbox As MSForms.TextBox Public Sub SetCtrl(new_ctrl As MSForms.TextBox) Set tbox = new_ctrl End Sub Private Sub tbox_Change() Dim no As Integer If tbox.Value <> "" Then no = Replace(tbox.Name, "TextBox", "") * 1 + 1 UserForm1.Controls("TextBox" & no).Visible = True End If End Sub ユーザーフォームのコードは Private ctrl(1 To 50) As New Class1 Private Sub UserForm_Initialize() Dim i As Integer For i = LBound(ctrl) To UBound(ctrl) ctrl(i).SetCtrl Me("TextBox" & i) Next For i = 2 To UBound(ctrl) Controls("TextBox" & i).Visible = False Next End Sub
1人がナイス!しています
質問者からのお礼コメント
ありがとうございました。 コンボボックスにも適用できそうなので、今後の勉強に役立ちました。
お礼日時:5/17 20:07