Access 2007 ReportEvents класс не запускает события - PullRequest
1 голос
/ 08 августа 2011

У меня проблема с событиями отчета, которых у меня нет встречались ранее в 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

1 Ответ

2 голосов
/ 09 августа 2011

Я понял это.Это была проблема области действия. Переменная класса ReportEvents rptEvts находилась внутри подпрограммы Report_Open.Из-за этого его не было бы, когда происходили другие события.Это должно быть на уровне модуля, а не в рамках процедуры.

Dim rptEvts   As ReportEvents
Private Sub Report_Open(Cancel As Integer)     
   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
End Sub

Удивительно, что небольшой отдых сделает для вас.

...