4

我在 Access 2003 数据库(在 Access 2007 中开发)中有三个表单,它们位于父 -> 子 -> 孙关系中。在子表单的“Form_Load”子中,我设置了孙子表单的一些属性(表单标题、行源和控制逻辑)。当我查看子表单时,一切正常。当我查看父表单时,我收到错误:

运行时错误“2455”:您输入的表达式对表单/报表属性的引用无效。

参考该行:

Me.GrandchildFormName.Form.Foo.Caption = "bar"

我可以访问除Form 属性之外的孙窗体的任何属性,而不会引发任何错误。有谁知道这可能是什么原因造成的?我在一个新数据库中做了一个测试用例,它工作得很好,所以我倾向于在我继承的数据库中存在一些东西(我被告知,它可以追溯到 18 年前的访问前数据库系统),这是导致问题的原因,但我想我会在这里检查一下,看看你们中是否有人知道解决方法。

如果相关,表单的实际结构会更复杂一些,孙表单在子表单中多次出现(在不同的控件名称下),如下所示:

|--------------|
| A            |
|  |----------||
|  | B        ||
|  |  |------|||
|  |  | C[1] |||
|  |  |------|||
|  |          ||
|  |  |------|||
|  |  | C[2] |||
|  |  |------|||
|  |----------||
|--------------|

消除除一种外孙形式之外的所有形式并不能解决问题。

如果有办法让孙子表单知道它被加载为哪个实例,我可能会编写代码来解决这个问题,但据我所知,这是不可能的。

4

2 回答 2

3

我将使用ParentChildGrandChild来指代各自的表单(而不是数据源)。

通常,Form子窗体控件的属性只有在显示子窗体后才会获得“有效引用”。因此,如果你想执行 中的代码Child.Form_Load,你必须确保它在打开GrandChild时是可见的。Parent

解决方案

由于我假设在您的情况下GrandChild,如果您打开Child(不打开Parent)是可见的,但GrandChild在您打开时不可见Parent,我建议您在不更改 UI 的情况下使用以下解决方案:

Child.Form_Load将访问的代码移动GrandChild.FormGrandChild.Form_Load. 无论何时GrandChild加载,它都可以从Child( Me.Parent.Form) 甚至Parent( Me.Parent.Parent.Form) 访问所有内容。

换句话说GrandChild,必须(从Childor Parent)提取信息并更改自身,而不是通过更改Child将信息向下推送。GrandChildGrandChild

例子:

假设与Parent有 1:n 关系,ChildChild有 1:n 关系GrandChildParent呈现Child为数据表,因此打开GrandChild时不显示。Parent在这种情况下,任何访问都会GrandChild.Form导致2455 运行时错误,因为GrandChild未显示。

在此示例中,数据表的每一行Child都有一个加号,可以显示GrandChild. 假设您放置了一个按钮,在该按钮上Parent执行您当前在Child.Form_Load子程序中拥有的代码。打开后单击此按钮Parent会导致错误(见上文),但如果您单击其中的一个加号Child,然后单击该按钮,则代码将在没有2455 错误的情况下执行,因为在这种情况下GrandChild,在GrandChild.Form访问被执行。

于 2013-09-28T18:27:03.323 回答
-1

就在给出问题类型的行上方: On Error Resume Next

运行它,这将解决您的问题。运行一次后,您可以擦除该行并继续工作。

于 2012-10-07T16:17:33.200 回答