0

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是阻止我设置属性的原因。

4

2 回答 2

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到达控件的事件属性。

我建议您在函数(而不是子)中定义您的行为,因为这样您就可以使用语法直接从控件的事件属性调用该函数

Control.BeforeUpdate = "=MyFunction()"

或者

Forms![PartsDatabaseX]![RepsSubformX].Form![Pack Rank].BeforeUpdate = "=MyFunction()"
于 2014-07-24T13:16:11.857 回答
0

我找到了解决这个问题的方法——我已经做到了,这样每个可以选择的查询都有自己的子表单,可以根据需要隐藏/取消隐藏。它有效,但我不喜欢在我的主窗体上浮动 5 个额外的子窗体的想法......

于 2014-07-23T19:30:24.340 回答