1

在 Access 2007(或 2010)中,我需要使用 VBA 从主窗体设置嵌入在第一个子窗体中的子窗体的属性。为了清楚我说的是哪个表单,我将这个表单称为“subSubform”,就像我在代码中所做的那样(嗯,subSubform 实际上是子子表单控件的名称)。

当表单加载时,我的第一个子表单上有一个子表单控件,它是空白的(不包含表单源对象)。如果需要,我会使用有效表单的名称以及 LinkMasterFields 和 LinkChildFields 属性填写此控件的 SourceObject 属性。这一切似乎都很好,因为我确实得到了一个可扩展的加号,否则就不会出现。

接下来,我尝试为 subSubform 设置 RecordSource,但出现错误:

2455 您输入的表达式对属性 Form/Report 的引用无效。

这是我正在使用的代码:

Me!subform1.Form!subSubform.Form.RecordSource = sSubformSQL
'and I've tried this with the same bad results
Me.subform1.Form.subSubform.Form.RecordSource = sSubformSQL
'and this too
Forms("frmQuery").subform1.Form.subSubform!Form.RecordSource = sSubformSQL

'And I've tried this. It fails too, on the last line with the same error:
    Dim frm As Form
    Set frm = Forms("frmQuery").subform1.Form
    Dim frm2 As Form
    Set frm2 = frm.subSubform.Form

我尝试设置一个计时器并等待一秒钟来运行上面的代码,以防表单加载需要一些时间。但这没有什么区别。

我尝试从第一个子窗体而不是主窗体运行代码,但这也无济于事。仍然失败并出现相同的错误。

FWIW,我的子表单和我的子子表单都是数据表视图。我认为这与我在这里尝试做的事情没有什么不同(尽管我很清楚所涉及的性能问题,所以不要对我尖叫)。

我承认这可能是一个非常奇怪的要求。但我正在创建一个需要这个的动态查询界面。

任何想法如何在 subSubform 上设置表单属性?

4

2 回答 2

1

问题不在于您设置了子表单的属性。的格式:

me.subform1.form.subform2.form.RecordSource = sql

s+应该工作得很好。

问题是您试图在 continue for (或数据表)的一侧嵌套一个 continue 表单(或数据表)。这是不允许的。

解决方法是简单地将两个子表单并排放置,不要嵌套。

您仍然可以使用链接主设置来获取要遵循的第二个(子子)表单。

在子 1 的链接子/主设置中,您放置:

linkChildFields main_id(该子表单中用于关联回父表的字段名称) LinkMasterFields [ID]

在您放置的子 2 表单的链接子/主设置中

linkChildFields main_id(该子表单中用于关联回父表的字段名称) LinkMasterFields [child1].[form].[ID](“masterForm”是您使用的控件的名称持有主表格。

因此,您可以对多对多进行建模,但不能嵌套,但如上所述,无论如何都会为您提供相同的结果。所以一个表格看起来像这样:

在此处输入图像描述

您也很可能在左侧(子 1)的当前事件中,希望在导航时重新查询右侧 - 因为它通常不会为您自动更新。

所以:

me.parent.Child2.Requery
于 2012-09-14T08:55:35.107 回答
1

通常,Form子窗体控件的属性只有在显示子窗体后才会获得“有效引用”。因此,如果您想像subSubform.Form

Me.subform1.Form.subSubform.Form.RecordSource = ...

您必须确保在执行访问之前 subSubform 是可见的。最简单的方法是让 subSubform 在加载时自行设置它的源(在它的 Form_Load 子中)。

有关更多详细信息和解释,请参阅我在Microsoft Access 运行时错误 2455 中尝试从问题相同的子表单访问孙子表单时的回答。

于 2013-09-28T19:46:07.747 回答