为什么表单对象不会在 VBA 中为 Ms Access 加载 RecordSource 属性

问题描述

我需要以编程方式读取表单的 RecordSource 属性,以了解表单所依赖的表或查询

经过一番研究,似乎表单对象实际上需要在窗口中打开(或隐藏,但打开)才能访问某些属性。我整理了以下代码片段:

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。 所以 VBA 正确地为父表单返回了一个空白的 RecordSource。毕竟发布的脚本是正确的。感谢您的投入!!

任何提示或方向将不胜感激。提前谢谢你!!

解决方法

最有可能的是,RecordSource 在加载表单时在代码中分配,作为表名或 SQL:

Me.RecordSource = "Select * From SomeTable Order By SomeField"
,

在设计视图中,您无法以编程方式获取 RecordSource。您可以从 Property 窗口看到。您必须以正常形式打开它,可能您希望它以隐藏形式打开。您可以指定 WindowMode 以通过 DoCmd.OpenForm "Form1",acNormal,acHidden 隐藏打开表单。试试下面的代码。

Private Sub CmdTest_Click()
Dim frm As Access.Form

DoCmd.OpenForm "Form1",acHidden
Set frm = Forms("Form1")

    Debug.Print frm.Name
    Debug.Print frm.RecordSource

DoCmd.Close acForm,"Form1"
End Sub