Отчет о доступе: определение формы, из которой был вызван отчет

#ms-access #vba #report

#ms-access #vba #Сообщить

Вопрос:

Можно ли каким-либо образом определить имя формы, из которой был вызван отчет? Я хотел бы написать некоторый код VBA в отчете, чтобы определить, откуда был вызван отчет. У меня есть Access 2003.

Ответ №1:

Вы можете открыть отчет, подобный этому:

 DoCmd.OpenReport "reportFoo", acPreview, , , , Me.Name
  

и что-то вроде этого в отчете:

 Private Sub Report_Open(Cancel As Integer)
    If "" <> Me.OpenArgs Then
        MsgBox Me.OpenArgs ' display caller form's name
    End If
End Sub
  

Комментарии:

1. Я протестировал его в Ms Access 2003 перед публикацией.

2. По-моему, параметр OpenArgs не существовал в Access до 2002 года (не уверен, что это было и в 2002 году — возможно, он был введен в 2003 году).

Ответ №2:

Это невозможно, если вы не настроите его самостоятельно. Вы могли бы выполнить запись в переменную или, если форма остается открытой, сохранить информацию в форме.

Комментарии:

1. Хм, если он не знает, какая форма открывает отчет, как он может сохранить название формы в отчете?

2. Извините, но я не понял вашей точки зрения, я сказал сохранить информацию в форме, если форма остается открытой, формы можно проверить из отчета, или форма и название отчета записываются в переменную, да?

Ответ №3:

Один из способов — создать класс report_caller, который всегда открывает любые отчеты. Для этого нужен метод с именем «OpenReport», который принимает имя формы, выполняющей вызов, и имя открываемого отчета. Тогда у него может быть открытый метод, позволяющий отчету получать имя формы, которая была открыта.