use*_*809 6 excel vba excel-vba userform excel-2010
我有一个Auto_Open的vba代码.它会进行一些检查,然后提示用户表单询问用户名和密码.我用这个用户表单调用了userform_name.show.
我的问题是如何从userform代码返回Boolean到我的Auto_Opensub.
我将验证凭据是否正确的代码链接到表单上的"登录"按钮.这是产生布尔值的代码.我需要将它返回到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
Run Code Online (Sandbox Code Playgroud)
小智 7
您可以在不使用公共变量的情况下设法做到这一点。
显示/隐藏和加载/卸载之间似乎存在差异。
如果您在表单仍在加载时隐藏该表单,则该表单不会被清除,因此您可以引用表单上控件的状态。
例如,我DTPicker1在表单上使用日期选择器(称为 ),模块中的代码如下所示:
Dim NewDay As Date
Load FrmDayPicker
FrmDayPicker.Show
NewDay = FrmDayPicker.DTPicker1.Value
Unload FrmDayPicker
Debug.Print NewDay
Run Code Online (Sandbox Code Playgroud)
在您的表单上,您可以使用Me.Hide而不是Unload Me,这应该可以工作
从用户窗体代码区中删除Dim bool As Boolean并在模块中声明它,如下所示
这就是模块中代码的样子
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
Run Code Online (Sandbox Code Playgroud)