我的 VBA 登录表单出现问题,它应该可以保护我的书。 我已经创建了 LoginPage 和 2 个登录表单:一个学生和一个老师。它们在使用上相似,但不能正常工作。
如果我选择了“作为教师登录”按钮,但随后决定关闭此窗口以供学生登录,QueryClose 方法应该可以工作。但这一次有效。 在 LoginPage 中,当我按下 CommandButton TeacherForm 时也只显示一次。因此,正如您已经了解的那样,我需要在这些形式之间轻松切换。
我的代码(登录页面)是:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then
Cancel = True
ActiveWorkbook.Saved = True
Application.Quit
End If
End Sub
Private Sub TeacherLogin_Click()
Unload Me
Load TeacherForm
TeacherForm.Show
End Sub
教师表格:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then
Cancel = True
Me.Hide
Unload Me
Load LoginPage
LoginPage.Show
End If
End Sub
Private Sub PTTB_Change()
PTTB.PasswordChar = "*"
End Sub
Private Sub SubmitTeacher_Click()
If LTTB.Value = "User" Then
If PTTB.Value = "SuperUser" Then
MsgBox ("Access granted!")
Else
MsgBox ("Access denied!")
End If
Else
MsgBox ("Access denied!")
End If
End Sub
如果我做错了什么,请帮助我。谢谢
最佳答案
问题是您正在卸载表单的默认实例。您应该实例化用户窗体的新实例并隐藏它们而不是卸载它们。这篇文章解释得最好Rubberduck VBA: UserForm1.Show .
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then
Cancel = True
ActiveWorkbook.Saved = True
Application.Quit
End If
End Sub
Private Sub TeacherLogin_Click()
Dim Form As TeacherForm
Set Form = New TeacherForm
Form.Show
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then
Cancel = True
Me.Hide
Dim Form As LoginPage
Set Form = New LoginPage
Form.Show
End If
End Sub
Private Sub PTTB_Change()
PTTB.PasswordChar = "*"
End Sub
Private Sub SubmitTeacher_Click()
If LTTB.Value = "User" Then
If PTTB.Value = "SuperUser" Then
MsgBox ("Access granted!")
Else
MsgBox ("Access denied!")
End If
Else
MsgBox ("Access denied!")
End If
End Sub
您应该考虑下载 Rubberduck VBA ,它的免费代码格式化功能将为您节省大量时间。
关于VBA 窗体不显示第二次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53568772/