Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

VBA Refer to TextBox or Label using a loop

I am trying to replace the following:

txt1.Text = ""
txt2.Text = ""
txt3.Text = ""
txt4.text = ""
...continues for quite awhile

With:

Dim cCont As Control

For Each cCont In Me.Controls

If TypeName(cCont) = "TextBox" Then
'reset textbox value
   ???
End If
Next cCont

How do I refer to the textbox using the generic 'Control'?

like image 218
John M Avatar asked Oct 28 '25 13:10

John M


1 Answers

You already have your control in cCont.

Dim cCont As Control

For Each cCont In Me.Controls
  If TypeOf cCont Is MSForms.TextBox Then
    cCont.Text = "hi"
    MsgBox cCont.Name
  End If
Next

If you're confused by the fact you don't get the Text property from IntelliSense, just cast the Control to a more derived type:

Dim cCont As Control

For Each cCont In Me.Controls
  If TypeOf cCont Is MSForms.TextBox Then
    Dim cText As MSForms.TextBox

    Set cText = cCont

    cText.Text = "hi"
    MsgBox cText.Name
  End If
Next

This will use early binding instead of late binding, and you'll get your code suggestions.

like image 72
GSerg Avatar answered Oct 30 '25 04:10

GSerg