消息框,用于确认用户是否要离开表单

时间:2015-07-23 18:34:30

标签: vba ms-access access-vba

我有一块VBA正在运行,由于某种原因,它突然停止了工作。

在我的表单卸载事件中,我有代码:

if isnull(me.field) then
    ans=MsgBox("Warning you have not entered all the data. Do you want to exit the form", vbYesNo, "Error")
    If ans=vbNo then
        Cancel=True
    end if
end if

这工作了几个月,当用户退出警告消息时会出现,如果他们选择没有,表格就不会退出。现在,当我点击否时,我收到错误:

  

运行时错误3270.找不到属性

我将代码更改为:

if isnull(me.field) then
    ans=MsgBox("Warning you have not entered all the data. Do you want to exit the form", vbYesNo, "Error")
    If ans=vbNo then
        docmd.cancelevent
    end if
 end if

现在我收到错误:

  

运行时错误'2001'您取消了以前的操作

这就是我想要的。

如何获取消息框以确认用户想要退出表单?

编辑:我意识到当我通过按右上角的x退出表单时退出警告有效,但是当我使用带docmd.close的按钮退出时出现错误。任何方式?

2 个答案:

答案 0 :(得分:2)

只需使用按钮点击事件即可。

其中CommandButton14是退出按钮的名称。

编辑用户评论。

让您的退出按钮调用UserForm_QueryClose事件。

Private Sub CommandButton14_Click()
    'UserForm_QueryClose 0, 0
    Unload Me
End Sub

在那个事件中提出你的问题。如果他们说是结束应用程序或卸载表单。如果他们拒绝,请取消。

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

' Displays a message box with the yes and no options.
Response = MsgBox("Warning you have not entered all the data. Do you want to exit the form?", vbYesNo)

' If statement to check if the yes button was selected.
If Response = vbYes Then
   'Cancel = False
   End
Else
   Cancel = True
End If
End Sub

您可以从卸载事件中取出所有内容。

答案 1 :(得分:1)

我觉得我错过了一些东西,因为你选择的路径看起来有点过于复杂。

首先,在我的数据库中,我始终确保将所有表单Close Button属性设置为“否”,这样您就可以控制用户何时关闭表单。

从那时起,您只需将此代码附加到关闭按钮:

 
Private Sub btnClose_Click()

    Dim blnClose As Boolean
    Dim strResponse As String

    'Default to true so it always closes unless one or more future checks fail
    blnClose = True

    If IsNull(Me.Field) Then
        strResponse = MsgBox("Warning you have not entered all the data. Do you want to exit the form", vbYesNo, "Error")

        'User wants to cancel close toggle Boolean to false
        If strResponse = vbNo Then
            blnClose = False
        End If
    End If

    'If nothing has toggled to false then close the form
    If blnClose = True Then
        DoCmd.Close , ""
    End If

End Sub