2011-08-08 4 views
1

내가하지 Access에서 전에 발생한 그 이전에 나는의 전면 액세스 2007을 사용하여 사용하고 2007 년액세스 2007 ReportEvents 클래스는 이벤트

에 액세스하는 보고서 이벤트에 문제가 있어요 발사되지 SQL 백엔드로 끝납니다.
보고서에 사용하는 클래스 인 ReportEvents가 있습니다. 보고서의 Report_Open 이벤트에서이 클래스를 인스턴스화 한 다음 에 activate, Close, NoData와 같은 이벤트를 처리하고 보고서 대신 데이터를 내보내는 일반적인 코드 을 입력합니다.

이 코드는 이전 Access 2003 응용 프로그램 (mdb)에서 올바르게 작동했지만 이지만 2007 년에 예상대로 작동하지 않았습니다 (accdb). 내 테스트에서 비 이벤트 public sub, ProvideXLOption에 대한 호출은 매력처럼 작동하지만 아무 이벤트도 발생하지 않습니다. ReportEvents 클래스에서. 방금 가져온 코드를 프로젝트로 변경하지 않았습니다. 나는 브레이크 포인트를 설정했지만 공격 당하지는 않습니다. 나는 그들 모두를 공개 이벤트 로 변경하고 테스트 보고서 이벤트에서 그들을 호출하고 잘 동작했습니다.

동일한 결과를 사용하여 Access 2007에서 다른 보고서를 설정했습니다. 내가 액세스 시작 설정을 확인했습니다 그리고 그들은 괜찮아요. 심지어 행운을 제거하지 않고 신뢰할 수있는 위치에서 데이터베이스 위치를 제거하고 다시 추가했습니다.

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 

답변

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 

약간의 휴식을 취하는 것이 놀랍습니다.

관련 문제