VBA: Можно ли обращаться к элементам управления используя переменные?

Автор NotikM, 12 ноября 2016, 01:03

NotikM

Добрый вечер! Вопрос такой. Имеется несколько управляющих элементов с именами Label1, Label2, ... Label19
Можно изменить свойства элемента обратившись к нему по имени:
Label19.Caption = ComboBox1.Value
А можно ли как нибудь автоматизировать обращение к элементам управления? Что бы цифры содержались в переменной или даже имя всего элемента. И используя переменную изменять свойства этого управляющего элемента.

Администратор

Опишите, для какой цели вам это нужно. Правильнее задавать вопрос, указывая конечную цель.

NotikM

Например, хочу сделать что-то типа такого калькулятора перевода. У меня там много однотипных элементов Label или textbox надпись которым присваивается исходя из алгоритма. Вот и хотелось бы зациклить этот процесс, а не составлять линейную программу из 11 присваиваний.

[вложение удалено администратором]

Администратор

Вариант 1. Обращение к контролам с помощью объекта "Controls"

В этом варианте нужно, чтобы у лейбелов имена имели одинаковый корень (в этом пример у лейбелов корень "Label"), а после корня должен быть порядковый номер.

Private Sub CommandButton1_Click()
    Dim i As Long
    For i = 1 To 2 Step 1
        Me.Controls("Label" & i).Caption = "Caption"
    Next i
End Sub
[свернуть]

Вариант 2. Обращение к контролам с помощью массива

Массив можно заполнять без цикла. Это я привёл пример с циклом.

Private Sub CommandButton1_Click()

    Dim arr() As MSForms.Label, i As Long
   
    '1. Создание ячеек в массиве.
    ReDim arr(1 To 2)
   
    '2. Привязка контролов к массиву.
    For i = 1 To UBound(arr) Step 1
        Set arr(i) = Me.Controls("Label" & i)
    Next i
   
    '3. Работа с контролами через массив.
    For i = 1 To UBound(arr) Step 1
        arr(i).Caption = "Caption"
    Next i

End Sub
[свернуть]