我在Access 2003数据库(在Access 2007中开发)中有三种形式,它们位于父级中 - >孩子 - >孙子关系。在子窗体的'Form_Load'子窗口中,我设置了孙子的一些属性(表头,行源和控制逻辑)。当我查看子表单时,一切正常。当我查看父表单时,我收到错误:
运行时错误'2455':您输入的表达式对属性Form / Report的引用无效。
参考这一行:
Me.GrandchildFormName.Form.Foo.Caption = "bar"
我可以访问孙子格式的任何属性,除了 Form属性,而不会抛出任何错误。有谁知道这可能导致什么?我在一个新的数据库中创建了一个测试用例并且工作正常,所以我倾向于在遗留的代码中存在一些我用数据库继承的东西(据我所知,这可以追溯到18年前的一个访问前导致问题的数据库系统),但我想我会在这里查看是否有人知道解决问题。
如果它是相关的,表单的实际结构有点复杂,孙子表单在子表单中出现多次(在不同的控件名下),如下所示:
|--------------|
| A |
| |----------||
| | B ||
| | |------|||
| | | C[1] |||
| | |------|||
| | ||
| | |------|||
| | | C[2] |||
| | |------|||
| |----------||
|--------------|
除了一个孙子形式之外的其他所有形式都无法解决问题。
如果孙子表单有一种方法可以知道它正在加载哪个实例,我可能会编写代码来解决这个问题,但据我所知,这是不可能的。
答案 0 :(得分:2)
我将使用Parent
,Child
和GrandChild
来引用相应的表单(而不是数据源)。
通常,子窗体控件的Form
属性仅在显示子窗体后才会获得“有效引用”。因此,如果您要执行Child.Form_Load
中的代码,则必须确保在GrandChild
打开时Parent
可见。
<强>解决方案强>
由于我认为如果您打开GrandChild
(不打开Child
),Parent
可见,但是当您打开GrandChild
时Parent
不可见},我会建议以下解决方案而不更改您的UI:
将访问Child.Form_Load
的{{1}}代码移至GrandChild.Form
。每当GrandChild.Form_Load
加载时,它都可以访问GrandChild
(Child
)甚至Me.Parent.Form
(Parent
)中的所有内容。
换句话说,Me.Parent.Parent.Form
必须提取信息(来自GrandChild
或Child
)并更改自身而不是Parent
将信息推送到Child
通过更改GrandChild
。
示例:强>
假设GrandChild
与Parent
的关系为1:n,Child
与Child
的关系为1:n。 GrandChild
将Parent
作为数据表,因此Child
打开时GrandChild
不会显示。在这种情况下,对Parent
的任何访问都会导致 2455运行时错误,因为GrandChild.Form
未显示。
在此示例中,GrandChild
数据表的每一行都有一个加号,表示Child
。假设你在GrandChild
上放了一个按钮,它执行你Parent
子目录中的代码。在Child.Form_Load
打开后单击此按钮会导致错误(参见上文),但是如果单击Parent
中的一个加号,然后单击按钮,代码将在没有<的情况下执行em> 2455错误因为在这种情况下Child
在GrandChild
访问权限执行之前可见。
答案 1 :(得分:-2)
在给出问题类型的行上方: On Error Resume Next
运行它,这将解决您的问题。一次运行后,您可以擦除线路并继续工作。