#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
ее из памяти.