肖恩给出了一个几乎正确的答案,但它留下了空白。
一般来说,FORM'sBeforeUpdate
是最重要的表单事件。这是您的最后一道防线,并且无论什么提示保存(表单关闭、新记录、您自己的保存按钮、单击子表单等),始终在保存记录之前运行。虽然我偶尔使用该控件也是如果您的验证涉及多个字段,您将使用的事件。如果您正在使用任何其他控件或事件级别的事件,那么您就是在浪费时间。你的“陷阱”总是很远,你的表几乎肯定包含无效数据。BeforeUpdate
事件因此用户会更快地收到错误消息,我编写的大部分验证代码都会在Form_BeforeUpdate
事件中运行。如果要确保某些控件不为空,则必须使用此事件。在所有情况下,没有任何控制级别事件能够可靠地做到这一点。主要是因为如果控件永远不会获得焦点,则不会触发控件级别事件。 Form_BeforeUpdate
关于OP的问题。如果您想强制人们使用您自己的保存按钮并在他们不使用时提示他们,那么您需要一个表单级别的变量,正如 Sean 的建议所暗示的那样。唯一的区别是您需要在表单的 Current 事件而不是 Open 事件中将其设置为 False。您希望为每条新记录重置标志,而不仅仅是在表单打开时。然后在你的保存按钮点击事件中将它设置为 True,就在你强制记录保存之前DoCmd.RunCommand acCmdSaveRecord
。
最后,在Form_BeforeUpdate
事件中,您检查变量的值。
If bClose = False Then
If MsgBox("Do you want to save the changes?", vbYesNo) = vbNo Then
Cancel = True
If MsgBox("Do you want to discard the Changes?", vbYesNo) = vbYes Then
Me.Undo
End If
Exit Sub
End If
End If