好吧我正在进行一些有趣的互动,我想从我的经验丰富的VBA猫的一些建议,以帮助我看看是否有一种更优雅的方式来处理我的情况。
详细说明:
所以问题是,我需要能够强制执行数据完整性,而不是尽可能地阻碍UI流。值得注意的是,在beforeupdate事件中我不能使用Cancel = True,因为当您尝试将焦点切换到子表单时,beforeupdate事件会触发,这显然会在UI流中创建一个INF锁定。另一个问题是一旦更新事件触发,复选框值就会写入表中。取消选中该复选框最终会创建另一个排序循环。
到目前为止我的解决方案:
在更新前事件
If Checkbox = True and IsNull(Me!ComboBox) = True Then
lastRecord = Me.CurrentRecord
chkBool = True
end if
Form_Current事件中的
currRecord = Me.CurrentRecord
If currRecord <> lastRecord And chkBool = True Then
DoCmd.GoToRecord acDataForm, "form", acGoTo, lastRecord
GoTo Exit_Form_Current
ElseIf currRecord = lastRecord And chkBool = True Then
'do stuff
vbSql = "Update Statement"
DoCmd.RunSQL vbSql
chkBool = False
Me.Refresh
End If
有没有更好的方法来解决这个问题?或者是那种不可思议的工作,我必须如何接近它?可悲的是,由于子窗体需要是连续的子窗体,我无法重新设计以避开它。
答案 0 :(得分:0)
首先,您需要正确检查 Null :
If Me!Checkbox = True And IsNull(Me!ComboBox) Then
lastRecord = Me.CurrentRecord
chkBool = True
End If
然后评估它如何与第二段代码一起工作。
答案 1 :(得分:0)
你说“在主窗体上的beforeupdate事件中,有数据验证检查Checkbox是否为True然后组合框不能为空。”一种方法是不要等到主表单上的beforeupdate事件;选中复选框后立即进行检查。如果组合框为空,则不允许进行检查;首先强制用户进入子表单。这可能会带来其他问题,但......