如何在Access 2007中通过VBA设置Before Update属性

时间:2014-07-22 19:35:52

标签: vba access-vba ms-access-2007 subform beforeupdate

我有一个子窗体,可根据用户输入更改其记录源(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的事实是阻止我设置该属性。

2 个答案:

答案 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个额外的子表单...