问题
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'?
回答1:
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.
来源:https://stackoverflow.com/questions/6060142/vba-refer-to-textbox-or-label-using-a-loop