我的 excel 用户窗体在我下次加载时变得无响应

My excel userform becomes unresponsive the next time I load it

我有两个表单,一个是验证用户进入系统的登录表单,另一个是在验证成功时使用的主表单。我使用访问数据库来搜索有效用户,并在主窗体中填充列表。

这里是代码:

Private Sub CancelCommandButton_Click()
    CloseDatabase
    Unload Me
End Sub

Private Sub ConfirmCommandButton_Click()
    ...

End Sub

Private Sub UserForm_Initialize()
    ConnectDatabase
End Sub

Private Sub OpenMainForm()
    Unload Me
    MainForm.Show
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = vbFormControlMenu Then
        Cancel = True
    End If
End Sub

这里是管理主窗体加载和关闭的代码:

Public Sub UpdateControls()
    PopulateUserList
End Sub

Private Sub UserForm_Activate()
    sTag = Split(Me.Tag, "|")

    If sTag(0) <> "1" Then
        Me.MainFormMultiPage.Pages(0).Enabled = False
        Me.MainFormMultiPage.Value = 1
    Else
        Me.MainFormMultiPage.Pages(0).Enabled = True
        Me.MainFormMultiPage.Value = 0
        UpdateControls
    End If

    UserLabel1.Caption = sTag(1)
    UserLabel2.Caption = sTag(1)
    UserLabel3.Caption = sTag(1)
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

    If CloseMode = vbFormControlMenu Then
        ' Tip: If you want to prevent closing UserForm by Close (×) button     in the right-top corner of the UserForm, just uncomment the following line:
        ' Cancel = True

        Dim answer As Integer
        answer = MsgBox("ÂíÇ ãØãÆäíÏ ˜å ãí ÎæÇåíÏ ÇÒ ÓÇãÇäå ÎÇÑÌ ÔæíÏ¿",     vbYesNo + vbQuestion, "ÎÑæÌ ÇÒ ÓÇãÇäå")

        If answer = vbYes Then
            CloseDatabase
        Else
            Cancel = True
        End If
    End If

End Sub

Private Sub UserForm_Terminate()
    loginForm.Show
End Sub

当我通过单击 'X' 按钮关闭主窗体时,登录窗体重新出现并且主窗体关闭;但是当我再次登录时(最好使用相同的凭据)显示主表单但完全没有响应(没有列表填充,'X' 按钮不起作用或表单中的任何其他控件)。

我该怎么办? UserForm_CloseQuery() 中的代码是否卸载了主窗体及其所有宏,我无法使所需的事件恢复正常运行,还是我遗漏了什么?

现在不是我开始编码的时候VBA,当出现新问题时,我不能轻易地搞定它的头或尾。任何帮助,将不胜感激。谢谢

假设您的表单是模态的,将登录表单代码更改为:

Private Sub OpenMainForm()
    Me.Hide
    MainForm.Show
    Me.Show
End Sub

并从主窗体中删除 Userform_Terminate 代码。这意味着登录表单会在主表单关闭时自动显示。