Вызов userform и возврат значения
у меня есть код vba, который Auto_Open. Он выполняет некоторые проверки, затем запрашивает форму пользователя, которая запрашивает имя пользователя и пароль. Я назвал эту userform с userform_name.show
.
моя проблема в том, как я могу вернуть Boolean
мой Auto_Open
sub из кода userform.
я связал код, который проверяет правильность учетных данных, с кнопкой "вход" в форме. это код, который создает логическое значение. Мне нужно вернуть его в Auto_Open.
Private Sub loginbutton()
Dim bool As Boolean
Dim lrup
Dim r As Long
Dim pass As String
loginbox.Hide
'are fields empty
Do While True
If unBox.Text = "" Or pwBox.Text = "" Then
MsgBox ("You must enter a Username and Password")
Else
Exit Do
End If
loginbox.Show
Exit Sub
Loop
'find pw reated to username (if existant)
lrup = UserPass.Range("A1").Offset(UserPass.Rows.Count - 1, 0).End(xlUp).Row
If unBox = "b0541476" And pwBox = "theone" Then
bool = True
Else
MsgBox ("Invalid username or password. Please try again.")
loginbox.Show
Exit Sub
End If
For r = 2 To lrup
If unBox = Cells(r, 1) Then
pass = Cells(r, 2).Value
Exit For
End If
Next
If pass = "" Then
MsgBox ("Invalid username or password. Please try again.")
loginbox.Show
Exit Sub
Else
bool = True
End If
End Sub
3 ответов
удалить Dim bool As Boolean
из области кода userform и объявите его в модуле, как показано ниже
вот как будет выглядеть ваш код в модуле
Public bool As Boolean
Sub Auto_Open()
'
'~~> Rest of the code
'
UserForm1.Show
If bool = True Then
'~~> Do Something
Else
'~~> Do Something
End If
'
'~~> Rest of the code
'
End Sub
Как насчет использования функции вместо sub?
Function loginbutton()
' your code
loginbutton = bool
End Function
теперь в вашем вызывающем коде вы можете проверить true/false
if loginbutton() then
'true responce
else
'false responce
end if
вы можете сделать это без использования общедоступных переменных.
кажется, есть разница между show/hide и load / unload.
если вы скрываете форму, пока она все еще загружена, она не будет очищена, поэтому вы можете ссылаться на состояние элементов управления в форме.
например, я использовал выбор даты (называемый DTPicker1
) на форме, мой код в модуль выглядит примерно так:
Dim NewDay As Date
Load FrmDayPicker
FrmDayPicker.Show
NewDay = FrmDayPicker.DTPicker1.Value
Unload FrmDayPicker
Debug.Print NewDay
на вашей форме, вы можете просто использовать Me.Hide
insteaded из Unload Me
и это должно работать