我正在尝试从 Access 2010 中的表单对象中引用一些 VBA 代码中的报表对象。我知道在报表中,我可以使用语法Reports![report name]
来引用名为“report_name”的报表,但这似乎不起作用在表单代码中。
所以我的问题是:如何从 VBA 代码中为表单对象引用报表对象?
我正在尝试从 Access 2010 中的表单对象中引用一些 VBA 代码中的报表对象。我知道在报表中,我可以使用语法Reports![report name]
来引用名为“report_name”的报表,但这似乎不起作用在表单代码中。
所以我的问题是:如何从 VBA 代码中为表单对象引用报表对象?
这是我表单上命令按钮的单击事件的代码。它打开一个名为rptFoo的报告,然后引用打开的表单以检索其名称属性并将Debug.Print
该名称指向即时窗口。
Private Sub cmdReferenceReport_Click()
DoCmd.OpenReport "rptFoo", acViewPreview
Debug.Print Reports!rptFoo.name '<- view this in Immediate window; Ctrl+g will take you there
End Sub
这是另一种方法。
Private Sub cmdReferenceReport_Click()
DoCmd.OpenReport "rptFoo", acViewPreview
Dim rpt As Report
Set rpt = Reports!rptFoo
Debug.Print rpt.name
Set rpt = Nothing
End Sub
@HansUp 将报告名称作为字符串变量(而不是代码中的字符串文字)传递时,我收到运行时错误 2451 -“您输入的报告名称 'reportName' 拼写错误或引用的报告是'不开放或不存在。与 OP 一样,我也在使用 MS Access 2010。
我使用报告名称的字符串变量从表单引用报告的解决方案是使用括号语法:报告(此处为字符串报告名称变量)
例子:
Public Sub Set_Report_RecordSource(reportName As String, datasourceQueryName As String)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Purpose: Sets a report's recordsource programmatically. Especially useful
' for a report that is used by many forms.
' Params:
' reportName = Report whose RecordSource needs to be set.
' datasourceQueryName = The query name that will return records to display
' by the specified report (reportName).
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
DoCmd.OpenReport reportName:=reportName, View:=acViewDesign
Reports(reportName).RecordSource = datasourceQueryName
DoCmd.Close ObjectType:=acReport, ObjectName:=reportName, Save:=acSaveYes
End Sub