应用程序定义或对象定义的错误设置子窗体记录源

时间:2019-03-03 04:30:02

标签: ms-access access-vba

我正在尝试设置作为父表单一部分的子表单的记录集。

我正在使用的代码是:

docmd.openform "mainFrm"
Forms!mainFrm.subFrm.Form.RecordSource = "SELECT * FROM table1 WHERE ID = 24;"

我收到以下错误:

  

应用定义或对象定义错误

如果我将vba更改为:

docmd.openform "subFrm"
Forms!subFrm.RecordSource = "SELECT * FROM table1 WHERE ID = 24;"

子窗体打开正常。

我注意到的一件事是,即使SubFrmmainFrm的一部分。即使mainFrm已打开:

?CurrentProject.AllForms("SubFrm").IsLoaded 

返回假

尽管

 ?CurrentProject.AllForms("MainFrm").IsLoaded 

返回true

是否有一种方法可以在打开主窗体时更改属于主窗体的子窗体的记录集?

1 个答案:

答案 0 :(得分:1)

子窗体不会作为独立的窗体打开,因此不能包含在活动的Forms集合中。在Forms集合中仅列出活动的独立表单,并使用IsLoaded属性返回True。

引用子表单及其控件和属性必须通过保存对象(表,查询,表单,报告)的子表单容器控件来完成。如果subFrm是表单的名称,那么保存该表单的容器控件的名称是什么?我通常会给容器命名不同的名称,例如ctrDetails。然后从该子窗体外部的代码中引用子窗体RecordSource属性将是:

Forms!mainFrm.ctrDetails.Form.RecordSource = "SELECT * FROM table1 WHERE ID = 24;"