В отчет надо добавить событие, что нет данных.
Private Sub Report_NoData(Cancel As Integer) MsgBox "Нет данных" Cancel = True End Sub
Надо открыть запрос и проверить его записи. Openrecordset, а так отчет сам проверяет, если записи или их нет.
При присвоении Cancel=True может возникнуть ошибка "Прервано выполнение команды DoCmd.OpenReport ", если отчет вызывается из процедуры и ее придется обрабатывать. К тому-же лучше не нагружать отчеты модулями. Я использую другую методу. Назначаю на события отчета функции во внешнем модуле:
1. Отсутствие данных : =funSetNoData()
2. Страница: =funMakeNoData()
Во внешнем модуле описываю публичные функции:
Public bolNoData As Boolean Public Function funSetNoData() bolNoData = True End Function Public Function funMakeNoData() On Error Resume Next Dim rpt As Report Const conText As String = "Нет данных для отчета" If bolNoData Then Set rpt = Reports(CurrentObjectName) With rpt .FontSize = 36 .FontName = "Tahoma" .ForeColor = RGB(255, 0, 0) .CurrentX = (.ScaleWidth - .TextWidth(conText)) \ 2 .CurrentY = .ScaleHeight / 2 .Print conText End With bolNoData = False 'funShowCbb False 'попутно отключаю доступ к некоторым кнопкам контекстного меню End If End Function
Использую эти функции со всеми отчетами приложения.