В шаге "Шаг 46 - Доступ к одинаковым элементам управления" я показывал код как можно пройтись по всем элементам управления, но ничего практически не рассказал. Давайте обсудим это подробнее. VBA предоставляем массив включающий все элементы на форме с именем массива Controls:
У этого массива есть ряд методов, но только одно свойство. Это свойство Count. Данное свойство возвращает количество элементов на форме.
Private Sub CommandButton1_Click() MsgBox UserForm1.Controls.Count End Sub
С помощью этого массива можно ссылаться на элемент по индексу или по имени. У меня на форме два текстовых элемента, вот я их и спрячу двумя способами по нажатию на кнопку.
Private Sub CommandButton1_Click() Controls(0).Visible = False Controls("TextBox2").Visible = False End Sub
Для того, чтобы пробежаться по всем элементам можно использовать цикл For Each. Следующий код скрывает все текстовые элементы управления:
Private Sub CommandButton1_Click() Dim ctrl As Control For Each ctrl In Controls If TypeName(ctrl) = "TextBox" Then ctrl.Visible = False End If Next ctrl End Sub
Функция TypeName возвращает значение типа String, представляющее тип переменной за исключением типа определенного пользователем с помощью Type.