我有一块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
的按钮退出时出现错误。任何方式?
答案 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