Как сослаться на отчет из формы

Я пытаюсь сослаться на объект отчета в некотором коде VBA из объекта формы в Access 2010. Я понимаю, что в отчете я могу использовать синтаксис Reports![report name] для ссылки на отчет с именем «имя_отчета», но это, похоже, не работает из кода формы.

Итак, мой вопрос: как я могу ссылаться на объект отчета из кода VBA для объекта формы?


person god.exits    schedule 06.07.2011    source источник
comment
Коллекция Reports включает только ОТКРЫТЫЕ отчеты, поэтому Reports![имя отчета] будет ссылаться на нужный отчет только в том случае, если он уже открыт. Вы можете ссылаться на неоткрытые отчеты с помощью коллекции AllForms, но вы не можете делать с ними те же действия, что и с открытыми отчетами.   -  person David-W-Fenton    schedule 08.07.2011


Ответы (2)


Вот код для события нажатия командной кнопки в моей форме. Он открывает отчет с именем rptFoo, затем обращается к открытой форме, чтобы получить его свойство name и Debug.Print это имя в Immediate Window.

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
person HansUp    schedule 06.07.2011
comment
Еще раз, спасибо. Ваши сообщения очень полезны для меня сегодня. - person rohrl77; 27.01.2016

@HansUp при передаче имени отчета в виде строковой переменной (а не строкового литерала, как в вашем коде), я получаю ошибку времени выполнения 2451: «Введенное вами имя отчета «имя_отчета» написано с ошибкой или относится к отчету, который не не открывается или не существует». Как и ОП, я также использую 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
person David Alan Condit    schedule 30.04.2015