首页 > 解决方案 > 访问 VBA,无法关闭当前窗体。错误 2585 处理表单或报表事件时无法执行此操作

问题描述

这应该很简单但是!

我的打开表单显示一个下拉列表来选择用户名(从选择查询中填充)和一个未绑定的文本框来输入密码。密码与固定字符串进行比较,如果匹配,我需要关闭此表单并打开主菜单。如果您不知道密码,还有一个按钮可以关闭整个系统。选项卡顺序是下拉菜单、文本框、退出按钮。

经过AfterUpdate,BeforeUpdate,lostFocus的多种变体后,我将这段代码放在退出按钮的Got Focus事件中,这样从密码框退出就会触发它。每个函数都将焦点设置回适当的不正确条目,但如果一切正确,程序将转到最后两行。

    Private Sub btnExitAll_GotFocus()
        If PasswordNotOk() Then Exit Sub
        If UserNotOK() Then Exit Sub
        DoCmd.OpenForm "Main Menu"
        DoCmd.Close acForm, "Opening screen", acSaveNo
   End sub

“关闭”行以 2585 失败。我尝试颠倒最后两行的顺序。我什至将最后两行放在临时按钮的单击事件中,它们完全按预期工作!所以我尝试从这个 sub 调用该按钮的单击事件,但得到了同样的错误。我试过卸载我,但会引发错误 361 无法加载或卸载此对象,但我无法让此表单自行关闭。如果有帮助,当我尝试在 UNBOUD 文本框的更新前事件中执行此操作时,我收到错误消息,提示我在保存数据之前无法执行此操作。

请问有人我做错了什么?

标签: vbams-access-2010

解决方案


我正在使用Me.Name从自身关闭表单。您可能需要在关闭之前清除更改。

Private Sub btnExitAll_Click()
    If PasswordNotOk() Then Exit Sub
    If UserNotOK() Then Exit Sub

    DoCmd.OpenForm "Main Menu"

    ' Discard changes so we can close without saving
    If Me.Dirty = True Then
        Me.Undo
    End If

    DoCmd.Close acForm, Me.Name, acSaveNo
End Sub

推荐阅读