Форум по VBA, Excel и Word

VBA, Excel => VBA, макросы в Excel => Тема начата: NotikM от 12 Ноябрь 2016, 01:03

Название: VBA: Можно ли обращаться к элементам управления используя переменные?
Отправлено: NotikM от 12 Ноябрь 2016, 01:03
Добрый вечер! Вопрос такой. Имеется несколько управляющих элементов с именами Label1, Label2, ... Label19
Можно изменить свойства элемента обратившись к нему по имени:
Label19.Caption = ComboBox1.Value
А можно ли как нибудь автоматизировать обращение к элементам управления? Что бы цифры содержались в переменной или даже имя всего элемента. И используя переменную изменять свойства этого управляющего элемента.
Название: Re: VBA: Можно ли обращаться к элементам управления используя переменные?
Отправлено: Администратор от 12 Ноябрь 2016, 08:19
Опишите, для какой цели вам это нужно. Правильнее задавать вопрос, указывая конечную цель.
Название: Re: VBA: Можно ли обращаться к элементам управления используя переменные?
Отправлено: NotikM от 12 Ноябрь 2016, 10:39
Например, хочу сделать что-то типа такого калькулятора перевода. У меня там много однотипных элементов Label или textbox надпись которым присваивается исходя из алгоритма. Вот и хотелось бы зациклить этот процесс, а не составлять линейную программу из 11 присваиваний.

[вложение удалено администратором]
Название: Re: VBA: Можно ли обращаться к элементам управления используя переменные?
Отправлено: Администратор от 12 Ноябрь 2016, 10:50
Вариант 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
Название: Re: VBA: Можно ли обращаться к элементам управления используя переменные?
Отправлено: NotikM от 12 Ноябрь 2016, 14:40
Спасибо огромное, сейчас попробую!