【发布时间】:2014-12-04 12:36:04
【问题描述】:
我在 MS Access 2002 中有一个表单,在命令按钮后面有以下 sn-p 代码。
'Requery subform to make sure total is calculated
Me.fsubUpdateShipments.Requery
DoEvents
'Confirm quantities have been entered
If Form_fsubUpdateShipments.txtTotalShipmentQty.Value <= 0 Then
MsgBox "Cannot create shipment, no quantities have been entered", vbCritical
Exit Sub
End If
这几个月来一直运行良好,但今天一位同事来找我并解释说,即使他们输入了数量,错误消息也会显示。
经过一番挖掘后,我确定.Value <= 0 表达式在相关文本框完成计算其值之前被评估:=Sum([QtyToShip])。这似乎只发生在子表单有大量记录(大约 10 条或更多)并且显然是一个严重问题时。
在包含If 语句的行上添加断点可以使代码正确运行,但我显然不能永久使用此方法。
有什么方法可以强制代码暂停,直到子窗体控件完成重新计算它们的值?
【问题讨论】:
-
我想说WAITING 是这里唯一的解决方案。
-
或者,如果您决定更改当前解决方案以在记录集上使用
ADO.Recordsetthen calling a.Requery,则会触发RecordsetChangeComplete 事件,这将允许您在RecorodsetChangeCompleted触发后立即继续执行IF 语句。 -
@vba4all 如果我错了,请纠正我,但 Application.Wait 仅在 Excel 中有效?
-
看看here有一个访问权限,或者你可以添加对Excel对象模型的引用,如果你真的想使用
application.wait -
@Smandoli 如果我删除
.Requery,我仍然会遇到同样的问题。我不知道为什么过去我把它放在那里,我可能没有它也可以生活,但是如果用户在焦点位于时单击主窗体上的命令按钮,我仍然会遇到If语句被评估得太早子窗体。似乎无齿翼龙的答案是我能得到的最好的答案。
标签: ms-access vba ms-access-2002