Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA表格没有';t显示第二次_Vba_Userform - Fatal编程技术网

VBA表格没有';t显示第二次

VBA表格没有';t显示第二次,vba,userform,Vba,Userform,我的VBA登录表单有问题,它应该可以保护我的书。 我已经创建了登录页面和两个登录表单:学生和教师。它们在使用上相似,但不能正常工作 若我选择了“以教师身份登录”按钮,但随后决定关闭此窗口以供学生登录,那个么QueryClose方法应该可以工作。但这只起作用一次。 在登录页面中,当我按下命令按钮时,TeacherForm也只显示一次。正如你们已经理解的,我需要在这些表单之间轻松切换 我的代码(登录页面)是: 教师表格: Private Sub UserForm_QueryClose(Cancel

我的VBA登录表单有问题,它应该可以保护我的书。 我已经创建了登录页面和两个登录表单:学生和教师。它们在使用上相似,但不能正常工作

若我选择了“以教师身份登录”按钮,但随后决定关闭此窗口以供学生登录,那个么QueryClose方法应该可以工作。但这只起作用一次。 在登录页面中,当我按下命令按钮时,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

如果我做错了什么,请帮助我。谢谢

问题是您正在卸载表单的默认实例。您应该实例化Userforms的新实例并隐藏它们,而不是卸载它们。本文对此进行了最好的解释


你应该考虑下载,它的免费代码格式化功能将节省你大量的时间。

@ Timman是正确的——你应该绝对地创建你的用户表单的新实例并直接与这些实例一起工作。p> 此外,我不建议显示

UserForm\u QueryClose
事件中的下一个表单

当使用多个用户表单时,使用“presenter”类来保存实例并控制不同表单的显示/隐藏是非常有用的。 下面是一个与您的需求类似的简单示例:


使用以下代码和一个名为“ShowUF2”的按钮创建一个简单的用户表单(UserForm1),该按钮将打开第二个用户表单。这是你的主要形式

Public Event ShowUF2ButtonClicked()

Private Sub ShowUF2_Click()
    RaiseEvent ShowUF2ButtonClicked
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Cancel = True
    Me.Hide
End Sub
仅使用QueryClose代码创建另一个UserForm(UserForm2):

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Cancel = True
    Me.Hide
End Sub
现在创建presenter类(presenter)来保存实例并控制显示和隐藏

Private WithEvents UF1 As UserForm1
Private UF2 As UserForm2

Private Sub Class_Initialize()
    Set UF1 = New UserForm1
End Sub

Public Sub Present()
    UF1.Show vbModal
End Sub

Private Sub UF1_ShowUF2ButtonClicked()
    UF1.Hide
    Set UF2 = New UserForm2
    UF2.Show vbModal
    UF1.Show vbModal 'when UF2 is closed, show UF1 again
End Sub
最后,您只需要创建一个演示者并点击“Present”子按钮。这需要在标准模块中

Public Sub ShowUF1()
    With New Presenter
        .Present
    End With
End Sub

完成了!在MsgBox之后,我又添加了一个卸载,现在我正在我的主页上工作。谢谢!
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Cancel = True
    Me.Hide
End Sub
Private WithEvents UF1 As UserForm1
Private UF2 As UserForm2

Private Sub Class_Initialize()
    Set UF1 = New UserForm1
End Sub

Public Sub Present()
    UF1.Show vbModal
End Sub

Private Sub UF1_ShowUF2ButtonClicked()
    UF1.Hide
    Set UF2 = New UserForm2
    UF2.Show vbModal
    UF1.Show vbModal 'when UF2 is closed, show UF1 again
End Sub
Public Sub ShowUF1()
    With New Presenter
        .Present
    End With
End Sub