尝试从子窗体访问孙子窗体时Microsoft Access运行时错误2455

时间:2012-05-01 17:17:57

标签: ms-access ms-access-2007 access-vba ms-access-2003 grandchild

我在Access 2003数据库(在Access 2007中开发)中有三种形式,它们位于父级中 - >孩子 - >孙子关系。在子窗体的'Form_Load'子窗口中,我设置了孙子的一些属性(表头,行源和控制逻辑)。当我查看子表单时,一切正常。当我查看父表单时,我收到错误:

  

运行时错误'2455':您输入的表达式对属性Form / Report的引用无效。

参考这一行:

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

我可以访问孙子格式的任何属性,除了 Form属性,而不会抛出任何错误。有谁知道这可能导致什么?我在一个新的数据库中创建了一个测试用例并且工作正常,所以我倾向于在遗留的代码中存在一些我用数据库继承的东西(据我所知,这可以追溯到18年前的一个访问前导致问题的数据库系统),但我想我会在这里查看是否有人知道解决问题。

如果它是相关的,表单的实际结构有点复杂,孙子表单在子表单中出现多次(在不同的控件名下),如下所示:

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

除了一个孙子形式之外的其他所有形式都无法解决问题。

如果孙子表单有一种方法可以知道它正在加载哪个实例,我可能会编写代码来解决这个问题,但据我所知,这是不可能的。

2 个答案:

答案 0 :(得分:2)

我将使用ParentChildGrandChild来引用相应的表单(而不是数据源)。

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

<强>解决方案

由于我认为如果您打开GrandChild(不打开Child),Parent可见,但是当您打开GrandChildParent不可见},我会建议以下解决方案而不更改您的UI:

将访问Child.Form_Load的{​​{1}}代码移至GrandChild.Form。每当GrandChild.Form_Load加载时,它都可以访问GrandChildChild)甚至Me.Parent.FormParent)中的所有内容。

换句话说,Me.Parent.Parent.Form必须提取信息(来自GrandChildChild)并更改自身而不是Parent将信息推送到Child通过更改GrandChild

示例:

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

在此示例中,GrandChild数据表的每一行都有一个加号,表示Child。假设你在GrandChild上放了一个按钮,它执行你Parent子目录中的代码。在Child.Form_Load打开后单击此按钮会导致错误(参见上文),但是如果单击Parent中的一个加号,然后单击按钮,代码将在没有<的情况下执行em> 2455错误因为在这种情况下ChildGrandChild访问权限执行之前可见。

答案 1 :(得分:-2)

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

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