Страницы: 1
RSS
Передача переменных из UserForm в процедуру обычного модуля., Нужно передать переменную из процедуры кнопки UserForm в процедуру обычного модуля для дальнейшего использования этой переменной.
 
Господа, здравствуйте. Я в тупике. По задумке пользователь вводит в UserForm данные, которые потом должны использоваться в различных процедурах обычных модулей. Очевидно, что для этого нужно передать переменные из UserForm в обычный модуль.
В частности, нужно при нажатии кнопки "Отмена" присвоить переменной pubIfExitSub значение True. И эту переменную передать в обычный модуль и в нём уже обработать. К сожалению, не получается, даже если сделать её глобальной.
Это только пример. Моя UserForm планируется быть значительно сложней. Обрабатывать данные внутри UserForm вообще не вариант.
Спасибо.

Модуль. Процедура 1.
Код
Public pubIfExitSub as Boolean

Sub Test ()
Dim uf1UserSettings As UserForm1

Set uf1UserSettings = VBA.UserForms.Add(UserForm1.Name)
uf1UserSettings.Show vbModal

End Sub

UserForm. При нажатии на кнопку "Отмена" переменной должно присвоиться значение True.

Код
Private Sub CommandButton_Cancel_Click()
    
    pubIfExitSub = True 'При нажатии кнопки "Отменить выполнение программы", данная глобальная переменная становится True, и в 
                         основной процедуре она проверяется и прекращается выполнение программы.

End sub

Модуль. Процедура 2.

Код
Sub Processing_pubIfExitSub ()
        Select Case pubIfExitSub1 'Если в пользовательской форме нажата кнопка "Отменить выполнение программы", нужно выйти из процедуры.
            Case pubIfExitSub1 = True
                Exit Sub
        End Select

End sub
 
Добрый день.
На мой дилетантский взгляд, после обработки кода формы переменная обнуляется (паблик она там, или не паблик). Для того, чтобы она сохраняла значение после работы процедуры, по-моему, существует декларация Static.
Насколько я помню. Вроде бы. :)
Кому решение нужно - тот пример и рисует.
 
Обычно записывают такую информацию в свойство Tag формы. Например, для кнопки Отмена:
 
Код
  UserForm1.Tag = "0"
  UserForm1.Hide

Для кнопки OK соответствующий фрагмент может присвоить "1".
Владимир
 
Цитата
написал:
Добрый день.
На мой дилетантский взгляд, после обработки кода формы переменная обнуляется (паблик она там, или не паблик). Для того, чтобы она сохраняла значение после работы процедуры, по-моему, существует декларация Static.
Насколько я помню. Вроде бы.
Огромное спасибо. Всё работает.
 
Цитата
Пытливый: после обработки кода формы переменная обнуляется (паблик она там, или не паблик)
переменная уровня модуля (вне процедуры) продолжает жить (даже Dim). Другое дело, что её не видно из других модулей. Для этого нужна Public переменная уровня модуля в отдельном модуле (не в форме).
Или перед закрытием формы вызывать процедуру и передавать в неё переменную аргументом.
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх