3

如果我没有填写表单中的所有必填字段,当我单击右上角的“x”时会出现一个丑陋的错误。我想用自定义错误消息覆盖默认错误,但我无法确定将此代码与哪个 VBA 事件相关联。当我在其中放置错误处理程序时,Form_Close 事件似乎不起作用。

访问 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

4 回答 4

3

http://office.microsoft.com/en-us/access-help/order-of-events-for-database-objects-HP005186761.aspx

同样,当您关闭表单时,会发生以下事件序列:

Exit(控件)→ LostFocus(控件)→ Unload(表单)→ Deactivate(表单)→ Close(表单)

如果您更改了控件中的数据,则控件和窗体的 BeforeUpdate 和 AfterUpdate 事件都会在控件的 Exit 事件之前发生。

当表单尝试保存您的更改但由于您没有填写必填字段而失败时,可能导致您的错误的是 BeforeUpdate 事件。您可以创建一些验证代码并在表单的 BeforeUpdate 事件中运行它,以确保一切正常并向用户发送适当的消息。

于 2012-12-21T22:50:36.360 回答
3

当您尝试关闭对表单的当前记录有未保存更改的表单时,Access 将首先尝试提交这些更改。您无法从Form_Unload或拦截该操作Form_Close

顺便说一句,虽然您没有提到它,但如果您要导航的记录包含未保存的更改且必填字段缺少值,我希望您在导航到不同的记录时看到相同的内容。

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

但是,如果这样做的全部目的是为必填字段中的缺失值获取更友好的消息,请查看更改表的属性是否令人满意。例如,您可以设置RequiredNo,然后使用Is Not Null字段的Validation Rule,这将允许您将友好的文本消息分配为字段的Validation Text属性。

表设计必需和验证属性

于 2012-12-23T18:15:00.430 回答
2

您可能喜欢使用:

Private Sub Form_Unload(Cancel As Integer)

End Sub
于 2012-12-21T21:37:18.797 回答
1

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

于 2012-12-24T22:17:48.047 回答