I've got a problem with my VBA Login Form which should protect my book. I've created LoginPage and 2 login forms: for a student and for a teacher. They are similar in use, but does not work correctly.
If I chose "Log as a Teacher" button but then decided to close this window for logging by a student, QueryClose method should work. But this works once. And in the LoginPage when I press CommandButton TeacherForm shows only once too. So as you have already understood I need to switch easily between these forms.
My code(LoginPage) is:
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
TeacherForm:
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
Help me if I do something wrong. Thanks
The issue is that you are unloading the Form's Default Instance. You should be instantiating new instances of the Userforms and hiding them instead of unloading them. This article explains it best 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
You should consider downloading Rubberduck VBA, its Free The code formatting feature will save you a ton of time.