Автор Тема: VBA: Можно ли обращаться к элементам управления используя переменные?  (Прочитано 4193 раз)

NotikM

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

Оффлайн Администратор

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

NotikM

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

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

Оффлайн Администратор

  • Administrator
  • Сообщений: 1939
Вариант 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

NotikM

  • Гость
Спасибо огромное, сейчас попробую!