#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», который принимает имя формы, выполняющей вызов, и имя открываемого отчета. Тогда у него может быть открытый метод, позволяющий отчету получать имя формы, которая была открыта.