我有一个子窗体,可根据用户输入更改其记录源(Form.SourceObject
)。我正在开发一个更改跟踪系统,它依赖于子窗体中某些字段的Before Update
属性(如果它有所不同,则在工作表视图中)。如果我没有更改记录来源,则Before Update
会正确触发。如果我确实改变它,它就会丢失,我需要重新分配触发器。问题是,我无法找到描述如何做到这一点的任何事情。我尝试过使用以下内容" Tracker"是要调用的代码:
Forms![PartsDatabaseX]![RepsSubformX]![Pack Rank].BeforeUpdate = "[Event Procedure]"
错误2455 ="您输入的表达式对属性BeforeUpdate"
的引用无效Forms![PartsDatabaseX]![RepsSubformX]![Pack Rank].BeforeUpdate = "Tracker"
错误2455 ="您输入的表达式对属性BeforeUpdate"
的引用无效Forms![PartsDatabaseX]![RepsSubformX]![Pack Rank].BeforeUpdate(Tracker)
编译错误=预期函数或变量
Forms![PartsDatabaseX]![RepsSubformX]![Pack Rank].BeforeUpdate "Tracker"
错误438 ="对象不支持此属性或方法"
编辑 -
在更多地使用它之后,我可以正确地将BeforeUpdate
属性分配给表单中的控件,假设存在相应的更新前事件:
Private Sub Assign_Before_Update()
Me.FormCtl.BeforeUpdate = "[Event Procedure]"
End Sub
Private Sub FormCtl_BeforeUpdate(Cancel As Integer)
'Do stuff
End Sub
不幸的是,这个方法仍然失败了子窗体...
我开始认为我正在更改Form.SourceObject
的事实是阻止我设置该属性。
答案 0 :(得分:1)
如果要访问子窗体上的控件,则需要使用子窗体控件的.form属性。
Forms![PartsDatabaseX]
到达主要表单。
Forms![PartsDatabaseX]![RepsSubformX]
到达子表单控件。子窗体控件具有SourceObject,LinkMasterFields和LinkChildFields等属性,但没有自己的任何控件。
Forms![PartsDatabaseX]![RepsSubformX].Form
作为真正的Form对象到达子窗体。
Forms![PartsDatabaseX]![RepsSubformX].Form![Pack Rank]
到达子窗体上的控件。
Forms![PartsDatabaseX]![RepsSubformX].Form![Pack Rank].BeforeUpdate
到达控件的事件属性。
我建议在Function(而不是Sub)中定义你的行为,因为你可以使用语法
直接从控件的event属性调用该函数Control.BeforeUpdate = "=MyFunction()"
或
Forms![PartsDatabaseX]![RepsSubformX].Form![Pack Rank].BeforeUpdate = "=MyFunction()"
答案 1 :(得分:0)
我找到了解决此问题的方法 - 我已经做到了这一点,以便每个可以选择的查询都有自己的子窗体,根据需要隐藏/取消隐藏。它有效,但我不喜欢在我的主表单上浮动5个额外的子表单...