如果我没有在表单中填写所有必填字段,当我点击右上角的“x”时会出现一个难看的错误。 我想用自定义错误消息覆盖默认错误,但我无法确定将此代码与之关联的VBA事件。当我在其中放置错误处理程序时,Form_Close事件似乎不起作用。
Access 2010
Private Sub Form_Unload(Cancel As Integer)
On Error GoTo Err_Unload ' Initialize error handling.
'insert routine
Exit_Unload: ' Label to resume after error.
Exit Sub ' Exit before error handler.
Err_Unload: ' Label to jump to on error.
'MsgBox Err & " " & Error$ ' Place error handling here.
Resume Exit_Unload
End Subenter code here
即使在使用此代码时仍会收到错误。
Private Sub Form_Unload(Cancel As Integer)
On Error GoTo Err_Unload ' Initialize error handling.
' Code to do something here.
Exit_Unload: ' Label to resume after error.
Exit Sub ' Exit before error handler.
Err_Unload: ' Label to jump to on error.
'MsgBox Err & " " & Error$ ' Place error handling here.
Resume Exit_Unload
End Sub
答案 0 :(得分:3)
来自http://office.microsoft.com/en-us/access-help/order-of-events-for-database-objects-HP005186761.aspx,
同样,当您关闭表单时,会发生以下事件序列 发生:
退出(控制)→LostFocus(控制)→卸载(窗体)→取消激活 (表格)→关闭(表格)
如果您已更改控件中的数据,则为BeforeUpdate和AfterUpdate 控件和表单的事件发生在Exit事件之前 对于控制。
当表单尝试保存您的更改时,可能导致您的错误的是BeforeUpdate事件,但由于您尚未填写必填字段而失败。您可以创建一些验证代码并在表单的BeforeUpdate事件中运行它,以确保一切正常并将相应的消息发送给用户。
答案 1 :(得分:3)
当您尝试关闭对表单当前记录未保存更改的表单时,Access将首先尝试提交这些更改。您无法从Form_Unload
或Form_Close
拦截该操作。
如果表单的记录源包含带有自动编号字段的表,请使用更新前的表单事件来检查是否存在必需的值。如果没有涉及自动编号字段,请考虑在插入之前和更新事件之前从表单进行检查。
但是,如果这一点的重点是在必填字段中获取缺失值的更友好的消息,请查看更改表的属性是否令人满意。例如,您可以将Required
设置为No
,然后使用Is Not Null
作为字段的Validation Rule
,这样您就可以将友好的短信分配为字段Validation Text
} property。
答案 2 :(得分:2)
您可能想要使用:
Private Sub Form_Unload(Cancel As Integer)
End Sub
答案 3 :(得分:1)
实际上有一个名为On Error
的表单事件,它有两个参数:错误是什么以及Access应该执行什么响应。