从主窗体中,运行 VBA 以验证子窗体中的总计

Aik*_*ken 5 ms-access vba ms-access-2002

我在 MS Access 2002 中有一个表单,命令按钮后面有以下代码片段。

'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
Run Code Online (Sandbox Code Playgroud)

几个月来,这一直工作正常,但今天一位同事来找我并解释说,即使他们输入了数量,错误消息也会显示。

经过一番挖掘后,我确定在.Value <= 0相关文本框完成计算其值之前正在计算表达式:=Sum([QtyToShip])。这种情况似乎仅在子表单具有大量记录(大约 10 条或更多)时才会发生,并且显然是一个严重的问题。

在包含该语句的行上添加断点If可以使代码正确运行,但我显然不能永久使用此方法。

有什么方法可以强制代码暂停,直到子表单控件完成重新计算其值?

pte*_*don 4

我会完全跳过使用用户界面并查看表格。如果这是在主窗体命令按钮上运行,则子窗体将失去焦点并保存其值。无需重新查询。只需在 DSum 的标准(第三个参数)中重新创建父子关系即可:

If DSum("QtyToShip", "ShipmentDetails", "ShipmentID = " & Me!ShipmentID) <= 0 Then
    MsgBox "Cannot create shipment, no quantities have been entered", vbCritical
    Exit Sub
End If
Run Code Online (Sandbox Code Playgroud)