关闭表单时会触发什么VBA事件?

时间:2012-12-21 21:36:00

标签: ms-access

如果我没有在表单中填写所有必填字段,当我点击右上角的“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

4 个答案:

答案 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_UnloadForm_Close拦截该操作。

顺便说一下,虽然你没有提到它,但如果您导航的记录包含未保存的更改以及所需字段缺失值,我希望您在导航到其他记录时看到相同的内容。

如果表单的记录源包含带有自动编号字段的表,请使用更新前的表单事件来检查是否存在必需的值。如果没有涉及自动编号字段,请考虑在插入之前和更新事件之前从表单进行检查。

但是,如果这一点的重点是在必填字段中获取缺失值的更友好的消息,请查看更改表的属性是否令人满意。例如,您可以将Required设置为No,然后使用Is Not Null作为字段的Validation Rule,这样您就可以将友好的短信分配为字段Validation Text } property。

Table design Required and Validation properties

答案 2 :(得分:2)

您可能想要使用:

Private Sub Form_Unload(Cancel As Integer)

End Sub

答案 3 :(得分:1)

实际上有一个名为On Error的表单事件,它有两个参数:错误是什么以及Access应该执行什么响应。