На пользовательской форме (UserForm1) есть TextBox1 (объект может быть так же и ComboBox) Ссылку на этот объект надо передать в другой модуль, что бы в нем произвести например изменение цвета фона.
Вопрос - Какого типа нужно объявить переменную "perem", что бы в ней можно было хранить ссылку на объект? Что бы в дальнейшем определить:
Код
Set perem = UserForm1.TextBox1
Call Chang (perem)
А во втором модуле выполнить процедуру
Код
Sub Chang (perem)
If perem.Value = "" Then
perem.BackColor = &HC0FFFF
Else
perem.BackColor = &HFFFFFF
End If
End Sub
Задача: На UserForm есть несколько объектов, которые при запуске формы пустые. Если объект пустой, то фоновый цвет желтый, если не пустой, то фоновый цвет белый. Подобную проверку хочу сделать отдельной процедурой.
Вопрос 2. Как переменной "perem" присвоить ссылку на активный объект? У меня после каждого изменения поля на форме запускается процедура SetKod Вот в этой процедуре переменной "perem" присвоить ссылку на активный объект и далее вызвать процедуру Chang
Allleksey написал: как передать ссылку на активное поле?
А что такое активное поле? C модальными (открытыми) формами в VBA обычно работают из процедур обработки событий объектов формы. Там такой вопрос не возникает. После того, как форма обработана пользователем и скрыта, "активное поле" тоже не имеет смысла.
Раз у вас после каждого изменения поля запускается процедура отлавливающая изменения, то в данной процедуре и присваивайте объекту ссылку на поле, которое изменилось. К примеру, у Вас есть событие TextBox1_Change() в котором отслеживается изменение данных в текстовом поле. В нем у Вас будет что-то наподобие
Код
Sub TextBox1_Change()
Dim perem as object
Set perem = UserForm1.TextBox1
Call Chang (perem)
End Sub
Если я правильно понимаю, то ActiveControl используется только для чтения. С его помощью я не могу изменять свойства
tsap, да, именно так я сейчас и делаю. Но хотелось унифицировать код, что бы каждый раз не корректировать его под изменение конкретного поля, а что бы код сам определял, в каком именно поле произошли изменения.