我正在创建一个包含多个子表单的表单。它的工作方式是:
BASIC
MACHINE NAME
,TOOL SEQUENCE NO.
,TOOL NO.
和TOOL DESCRIPTION
发生了变化。MACHINE DESCRIPTION
和MACHINE TYPE
取决于MACHINE NAME
,这意味着我用查询来描述BASIC
和MACHINE NAME
之间以及MACHINE NAME
和MACHINE DESCRIPTION
之间的关系。
最终发生的事情是,当我改变BASIC
时,MACHINE NAME
会发生变化,但MACHINE DESCRIPTION
不会立即改变。 MACHINE DESCRIPTION
仅在我第二次改变BASIC
之后发生变化(并且它变为与之前选择的MACHINE DESCRIPTION
相匹配的MACHINE NAME
)。
我相信这是因为MACHINE DESCRIPTION
等到MACHINE NAME
被更改为重新查询数据,这可以解释为什么机器描述的值被“延迟”一次点击。
一旦MACHINE DESCRIPTION
改变,我如何使MACHINE NAME
改变?
如果需要,我愿意使用VBA代码。
VBA通常被称为触发语言,因为它通常用于响应应用程序中的事件,MS Access对象库中的事件包括表格和报告等GUI对象中的AfterUpdate
,OnOpen
,ButtonClick
等,甚至可以扩展到在宏和模块中调用函数。
因为您有子窗体显示“快照”结果集到屏幕派生的参数指向表单值的查询,所以在使用Form.Requery保存用户条目以获取更新的“快照”之后,请考虑实际重新检查子表单。事实上,没有Form.Requery
更新任何子表单是一个奇迹!
将以下VBA代码放在BASIC文本框后面的AfterUpdate
事件中。不要重复Public Sub
和End Sub
。在更新BASIC条目中的值后,这将使用主窗体的Forms.Controls属性循环遍历所有子窗体。
Private Sub BASIC_AfterUpdate()
Dim ctrl As Control
' SAVE CURRENT RECORD
DoCmd.RunCommand acCmdSaveRecord
' REQUERY ALL SUBFORMS
For Each ctrl in Me.Form.Controls
If ctrl.Type = acSubform Then
Me.Form.Controls(ctrl.Name).Form.Requery
End If
Next ctrl
Set ctrl = Nothing
End Sub