我遇到了报告事件的问题,我没有 在Access 2007之前的Access中遇到过。
我正在使用Access 2007作为SQL后端的前端 我有一个类,ReportEvents,我用于报告。 在报表的Report_Open事件中,我实例化然后使用此类 处理诸如activate,Close,NoData之类的事件,我也放了常用代码 例如将数据导出到Excel而不是报告。
此代码在我以前使用的Access 2003应用程序(mdb)中运行正常, 但它在2007年没有按预期工作(accdb)。在我的测试中,调用非事件公共子,ProvideXLOption就像一个魅力,但没有一个事件被触发 来自ReportEvents类。我没有更改我刚刚导入它的代码 项目。我设置了断点,但他们没有被击中。我改变了所有这些 公共事件然后在测试报告事件中调用它们并且它们工作正常。
我在Access 2007中设置了另一个报告,结果相同。我查过了 Access中的启动设置,它们很好。我甚至删除并重新添加 来自受信任位置的数据库位置没有任何运气。
微软是否修改了事件代码,或者这只是我看不到的一个简单的代码错误?它必须是简单的东西。我的大脑只是吐司(我的儿子决定在昨晚的喂食后保持清醒)。
类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
答案 0 :(得分:2)
我明白了。这是一个范围问题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
让你休息一下真是太棒了。