Страницы: 1
RSS
Передача в другой модуль ссылки на объект
 
Добрый день, Уважаемые!

На пользовательской форме (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 - 04.11.2018 23:34:11
 
обьявите без определения типа
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Вот так не сработало
Код
Dim CheckYelow

Sub Check()
CheckYelow = UserForm1.TextBox1
MsgBox CheckYelow.Value
End Sub
 
а так?
Код
Set CheckYelow = UserForm1.TextBox1
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, да, так сработало :)
А как передать ссылку на активное поле?
 
Цитата
Вопрос - Какого типа нужно объявить переменную "perem", что бы в ней можно было хранить ссылку на объект?
Объявляйте тип Object

Цитата
А как передать ссылку на активное поле?
Сначала определите какое поле у вас активное в данный момент, а потом передавайте ссылку на это поле (опять же предварительно объявив его как Object)
 
Цитата
tsap написал: Сначала определите какое поле у вас активное в данный момент, а потом передавайте ссылку на это поле
Вот это я и не понимаю, как сделать
 
Цитата
Allleksey написал:
как передать ссылку на активное поле?
А что такое активное поле? C модальными (открытыми) формами в VBA обычно работают из процедур обработки событий объектов формы. Там такой вопрос не возникает.
После того, как форма обработана пользователем и скрыта, "активное поле" тоже не имеет смысла.
Изменено: sokol92 - 04.11.2018 21:48:30
Владимир
 
Раз у вас после каждого изменения поля запускается процедура отлавливающая изменения, то в данной процедуре и присваивайте объекту ссылку на поле, которое изменилось. К примеру, у Вас есть событие TextBox1_Change() в котором отслеживается изменение данных в текстовом поле. В нем у Вас будет что-то наподобие

Код
Sub TextBox1_Change()
Dim perem as object
Set perem = UserForm1.TextBox1
Call Chang (perem)
End Sub


Я правильно Вас понял?
Изменено: tsap - 04.11.2018 22:32:58
 
Цитата
Allleksey написал:
А как передать ссылку на активное поле?
ActiveControl не подойдёт?
 
Юра,
ты видишь в теме царь! нужно сначала царя спросить
Всемилостивейший Государь, ничего что я о Вас в Вашем присутствии в 3-ем лице?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Козел (цап) и царь... Хотя, да - иногда похожи :)
 
Цитата
Юрий М написал:
ActiveControl не подойдёт
Если я правильно понимаю, то ActiveControl используется только для чтения. С его помощью я не могу изменять свойства :(

tsap, да, именно так я сейчас и делаю. Но хотелось унифицировать код, что бы каждый раз не корректировать его под изменение конкретного поля, а что бы код сам определял, в каком именно поле произошли изменения.
Изменено: Allleksey - 05.11.2018 14:37:51
 
Посмотрите здесь, у Дмитрия Щербакова.
Владимир
 
Модуль класса штука хорошая, но ..., например событие
Код
TextBox_Exit

там отсутствует
Как получить активный Texbox?
Изменено: RAN - 05.11.2018 14:39:22
 
Цитата
vikttur написал:
Цитата - не копирование

Цитата сообщения с кодом не работает. Цитируется именно так, как у меня в сообщении. (было)
 
А зачем там вообще цитата?
 
поправил
 
Ранее скрытые сообщения отображаются.
 
Цитата
Юрий М написал:
ActiveControl не подойдёт?
Цитата
Allleksey написал:
Если я правильно понимаю, то ActiveControl используется только для чтения. С его помощью я не могу изменять свойства
Вы проверили это утверждение?
Страницы: 1
Наверх