VBA 窗体不显示第二次

标签 vba userform

我的 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/

相关文章:

vba - 如何使用 Excel VBA 拆分和重组单元格

vba - 访问剪贴板的第 N 项

excel - 从excel vba用户表单组合框中选定行的列中提取数据

excel - 通过引用文件路径在用户表单中设置图像控件的值

VBA代码在工作簿中的所有工作表中使用for循环来选择变量内容?

vba - Ms Project VBA Macro Organizer 到子项目复制问题

VBA Excel更改多个选项卡的颜色

excel - 关闭按钮有效 卸载我 无效

excel - 鼠标滚动在用户窗体 VBA 中不起作用

vba - 在 VBA 中的用户窗体上使用 DoEvents 比 Repaint 有什么好处?