VBA Обратитесь к TextBox или Label, используя цикл - PullRequest
3 голосов
/ 19 мая 2011

Я пытаюсь заменить следующее:

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

На:

Dim cCont As Control

For Each cCont In Me.Controls

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

Как мне обратиться к текстовому полю, используя универсальный 'Control'?

1 Ответ

7 голосов
/ 19 мая 2011

У вас уже есть контроль в 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

Если вас смущает тот факт, что вы не получаете свойство Text от IntelliSense, просто приведите Control к болеепроизводный тип:

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

При этом будет использоваться раннее связывание вместо позднего связывания, и вы получите предложения по коду.

...