У меня проблема с событиями отчета, которых у меня нет
встречались ранее в Access до Access 2007.
Я использую Access 2007 для внешнего интерфейса к SQL-концу.
У меня есть класс ReportEvents, который я использую для отчетов.
В событии Report_Open отчета я создаю экземпляр, а затем использую этот класс для
обрабатывать такие события, как активировать, закрыть, NoData, и я также положить общий код
например, экспорт данных в Excel вместо отчета.
Этот код работал нормально в предыдущем приложении Access 2003 (mdb), которое я использовал,
но он не работает, как ожидалось в 2007 году (accdb). В моих тестах вызов общедоступного подпункта, не являющегося событием, ProvideXLOption работает как чудо, но ни одно из событий не запускается
из класса ReportEvents. Я не изменил код, я просто импортировал его в
проект. Я установил контрольные точки, но они не пострадали. Я изменил их все
общедоступные события, а затем вызывали их в рамках отчета о тестировании, и они работали нормально.
Я настроил еще один отчет в Access 2007 с теми же результатами. Я проверил
настройки запуска в Access и они в порядке. Я даже удалил и заново добавил
расположение базы данных из надежных расположений без какой-либо удачи.
Microsoft изменила Код событий или это просто ошибка с моей стороны, которую я не вижу? Это должно быть что-то простое. Мой мозг просто тост (мой сын решил не спать после вчерашнего кормления).
Класс ReportEvents Код:
Option Compare Database
Option Explicit
Private WithEvents rpt As Access.Report
Const strEventKey As String = "[Event Procedure]"
Public Property Set Report(Rept As Access.Report)
Set rpt = Rept
With rpt
.OnActivate = strEventKey
.OnClose = strEventKey
If LenB(.OnNoData) = 0 Then
.OnNoData = strEventKey
End If
End With
End Property
Public Sub Terminate()
On Error Resume Next
Set rpt = Nothing
End Sub
Private Sub rpt_Activate()
LoadPrintRibbon
End Sub
Private Sub rpt_Close()
Me.Terminate
End Sub
Private Sub rpt_NoData(Cancel As Integer)
Dim strMsg As String
strMsg = "No Records were found that match your criteria."
MsgBox strMsg, vbInformation, rpt.Name & _
": No Match. Report Cancelled"
Cancel = True
End Sub
Private Sub LoadPrintRibbon()
#If AccessVersion >= 12 Then
If rpt.RibbonName <> "PrintPreview" Then
rpt.RibbonName = "PrintPreview"
End If
#End If
End Sub
';;Provides user with option to send data to Excel instead of a report
Public Sub ProvideXLOption(Cancel As Integer)
'... some XLOption Code
End Sub
В коде протокола испытаний:
Private Sub Report_Open(Cancel As Integer)
Dim rptEvts As ReportEvents
Set rptEvts = New ReportEvents
Set rptEvts.Report = Me
';;Let User User Choose to Export Data to Excel or Display the report
rptEvts.ProvideXLOption Cancel
End Sub