1

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

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

4

2 回答 2

4

这是我表单上命令按钮的单击事件的代码。它打开一个名为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
于 2011-07-06T16:59:19.747 回答
1

@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
于 2015-04-30T14:01:25.663 回答