绕过BeforeUpdate事件

时间:2013-11-18 15:57:44

标签: ms-access access-vba

是否可以绕过BeforeUpdate事件?我在我的BeforeUpdate事件中有一些代码,它在尝试保存记录时运行,但是在同一个表单上我有一个子表单,要求用户在该子表单中选择一个记录。由于这会改变当前记录的焦点,因此会触发我的BeforeUpdate代码,我不希望它这样做。

当用户点击表单子表单中的记录时,有没有办法绕过表单的BeforeUpdate事件?

1 个答案:

答案 0 :(得分:2)

“当用户点击表单子表单中的记录时,有没有办法绕过表单的BeforeUpdate事件?”

当您将焦点切换到主窗体中具有未保存记录的子窗体时,Access将自动尝试保存“脏”主窗体记录。

该行为内置于Access中,您无法阻止它。

我认为你应该采用不同的方法。目前(根据​​评论讨论),您有一个命令按钮来保存主表单记录。但是,如果某些控件包含Null,则从表单的 BeforeUpdate 事件中止保存。

从我的角度来看,当任何控件包含Null时,用户甚至不能单击命令按钮。 (为什么让他们点击一个按钮然后通知他们操作无效?)所以我建议你只在所有控件包含非Null值时启用命令按钮。

考虑名为 cmdSave 的命令按钮和3个文本框: txtOne txtTwo txtThree 。创建一个过程 SetButtonAvailability ,并在所有3个文本框的 AfterUpdate 事件中调用该过程。

Private Sub SetButtonAvailability
    If IsNull(Me.txtOne) Or IsNull(Me.txtTwo) Or IsNull(Me.txtThree) Then
        Me.cmdSave.Enabled = False
    Else
        Me.cmdSave.Enabled = True
    End If
End Sub

同样在表单的 OnCurrent 事件中,您将执行Me.cmdSave.Enabled = False,因为当前记录尚未保存任何更改。