Как передавать значения между пользовательскими формами в Excel

#excel #vba #userform

#преуспеть #vba #пользовательская форма

Вопрос:

Я бы хотел использовать две пользовательские формы в Excel. первая пользовательская форма имеет две кнопки. Первая кнопка «Перейти» может присвоить a номер 1 и перейти ко второй пользовательской форме.

 Public a as Integer
Private Sub Go_Click()
UserForm2.Show
a = 1
End Sub
 

И еще одна кнопка «Показать» может показать мне значения a и b.

 Private Sub Show_Click()
Load UserForm2
Debug.Print a, b
End Sub
 

Во второй пользовательской форме он может распределить 2 на b (и закрыть окно userform2).

 Public b as Integer
Private Sub Back_Click()
Load UserForm1
b = 2
UserForm2.Hide
End Sub
 

Я хочу, чтобы, когда я нажимаю «Показать» в первой пользовательской форме, она могла показывать мне как a, так и b (1 и 2). Как я мог бы исправить свой код, пожалуйста?

Ответ №1:

Имейте этот код в Userform1 :

 Public a As Integer
Public frm As UserForm2

'Userform1 code.
Private Sub Go_Click()
    Set frm = New UserForm2
    a = 1
End Sub

Private Sub Show_Click()
    Debug.Print a, frm.b
    Set frm = Nothing
End Sub
 

И это в userform2 :

 Public b As Integer

'UserForm2 code
Private Sub UserForm_Initialize()
    b = 2
End Sub
 

‘Go_Click’ в Userform1 создает новый экземпляр класса Userform2 , который запускает Userform_Initialise событие Userform2 и устанавливает значение в переменную b . Затем вы можете ссылаться на него из frm переменной in Userform1 .

Вы можете ввести текст в Userform2 и скрыть форму:
Код Userform1:

 Public a As Integer
Public frm As UserForm2

'Userform1 code.
Private Sub Go_Click()
    Set frm = New UserForm2
    a = 1
    frm.Show
End Sub

Private Sub Show_Click()
    Debug.Print a, frm.b, frm.TextBox1
    Set frm = Nothing
End Sub  
 

Код UserForm2:

 Public b As Integer

Private Sub btnClose_Click()
    Me.Hide
End Sub

'UserForm2 code
Private Sub UserForm_Initialize()
    b = 2
End Sub
 

введите описание изображения здесь

Комментарии:

1. Большое вам спасибо. Я попробовал ваш код, и он работает хорошо. И у меня все еще есть вопрос по этому поводу. Во второй пользовательской форме я хочу использовать буттон вместо инициализации. Потому что во второй пользовательской форме пользователь вводит что-то в текстовое поле, и я хочу использовать их в первой пользовательской форме. Возможно ли это? Или у вас есть несколько лучших способов?

2. И я попытался добавить новый бот, чтобы закрыть userform2, но есть ошибка 402, говорит, что я должен закрыть окно в первую очередь.

3. Я добавил код для извлечения текста из Userform2. Кнопка закрыть скрывает пользовательскую форму и Userform1.commandbutton2 удаляет frm ее из памяти.