如何从表单引用报表

时间:2011-07-06 16:35:41

标签: ms-access access-vba ms-access-2010

我正在尝试从Access 2010中的表单对象引用某些VBA代码中的报表对象。我理解在报表中,我可以使用语法Reports![report name]来引用名为“report_name”的报表,但这似乎不适用于表单代码。

所以我的问题是:如何从VBA代码中为表单对象引用报表对象?

2 个答案:

答案 0 :(得分:4)

以下是表单上命令按钮的click事件的代码。它打开一个名为 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

答案 1 :(得分:1)

@HansUp将报表名称作为字符串变量传递(而不是代码中的字符串文字),我收到运行时错误2451 - “您输入的报表名称'reportName'拼写错误或引用报告未公开或不存在。“和OP一样,我也在使用MS Access 2010。

我使用字符串变量为报表名称引用表单中的报表的解决方案是使用括号语法:Reports(此处为字符串报表名称变量)

示例:

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