应用程序定义或对象定义的错误设置子表单记录源
Posted
技术标签:
【中文标题】应用程序定义或对象定义的错误设置子表单记录源【英文标题】:Application-defined or object defined error setting subform record source 【发布时间】:2019-03-03 04:30:02 【问题描述】:我正在尝试设置作为父表单一部分的子表单的记录集。
我使用的代码是:
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;"
子窗体可以正常打开。
我注意到的一件事是,即使SubFrm
是mainFrm
的一部分。即使mainFrm
已打开:
?CurrentProject.AllForms("SubFrm").IsLoaded
返回假
虽然
?CurrentProject.AllForms("MainFrm").IsLoaded
返回真
有没有办法在主窗体打开时更改作为主窗体一部分的子窗体的记录集?
【问题讨论】:
为什么?如果您链接主表单和子表单,则没有理由这样做。 子窗体本身的名字和主窗体上的子窗体控件的名字看起来一样。也许这就是原因? @June7 你是对的。容器控件的名称是 child0。我将其名称更改为 SubFrm,现在一切正常。谢谢! 【参考方案1】:子表单不会作为独立表单打开,因此不能包含在活动表单集合中。 Forms 集合中仅列出活动的独立表单,并通过 IsLoaded 属性返回 True。
引用子表单及其控件和属性必须通过包含对象(表、查询、表单、报表)的子表单容器控件来完成。如果 subFrm 是表单的名称,那么保存表单的容器控件的名称是什么?我通常将容器命名为与其持有的对象不同的名称,例如 ctrDetails。然后从该子表单外部的代码中引用子表单 RecordSource 属性将是:
Forms!mainFrm.ctrDetails.Form.RecordSource = "SELECT * FROM table1 WHERE ID = 24;"
【讨论】:
以上是关于应用程序定义或对象定义的错误设置子表单记录源的主要内容,如果未能解决你的问题,请参考以下文章