【发布时间】:2021-02-17 10:19:59
【问题描述】:
我需要以编程方式读取表单的 RecordSource 属性,以了解表单所依赖的表或查询。
经过一些研究,似乎表单对象需要在窗口中实际打开(或隐藏,但打开),以便可以访问某些属性。我整理了以下代码sn-p:
Application.DoCmd.OpenForm "Form1", view:=acDesign, windowMode:=acWindowNormal
Dim frm as Access.Form
Set frm = Forms("Form1").Form
Debug.print frm.Name 'works ok
Debug.print frm.RecordSource 'prints an empty string
Application.DoCmd.Close AcForm, "Form1"
我可以看到表单已正确打开,但 RecordSource 属性为空,即使表单是从表中提供的。
会发生什么?我正在使用 .accdb Ms Access 数据库文件。并已压缩数据库,以防数据库损坏,但问题仍然存在。
编辑:表单非常小,我意识到实际上根本没有RecordSource;它只有一个子表单,因为它确实有一个表格,所以确实有一个非空白的 RecordSource。 因此,VBA 正确地为父表单返回了一个空白 RecordSource。毕竟发布的脚本是正确的。感谢您的投入!!
任何提示或方向将不胜感激。提前谢谢你!
【问题讨论】:
-
有趣。请注意,如果表单有模块,您甚至可以在根本不打开表单的情况下获取 RecordSource:
Debug.Print Form_Form1.RecordSource。 但是: 这样做时会评估 RecordSource,这可能会导致各种副作用(例如 Access 要求参数)。对于简单的 RecordSource,这可以很好地工作。