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

问题描述 投票:0回答:1

我试图设置子窗体的记录集,该子窗体是父窗体的一部分。

我使用的代码是:

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 

返回false

即使

 ?CurrentProject.AllForms("MainFrm").IsLoaded 

返回true

有没有办法在主窗体打开时更改作为主窗体一部分的子窗体的记录集?

ms-access access-vba
1个回答
1
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.