Report su menu a scelta

di il
4 risposte

Report su menu a scelta

Tramite un gruppo di  opzioni mi creo un menu in cui apro tramite il pulsante un determinato report.

Vorrei che quando non ci sono dati il report non si apra

Il codice del menu che so esegue su un pulsante

Private Sub button_Click()
Dim Report As String
Dim Form As String
Dim Args As String
Select Case Me.gruppo
Case Is = "1"
Report = "rptelencoclienti"
Args = "italiano"
Case Is = "2"
Report = "rptelencoclienti"
Args = "straniero"
DoCmd.OpenReport Report, acViewPreview, , , , Args
end sub

Il codice del report rptelencoclienti

Private Sub Report_Load()
Dim filtro As String
Select Case Me.OpenArgs
Case Is = "italiano"
Me.TITOLO.Caption = "Clienti italiani"
filtro = "[Nazione] Like 'Italia'"

Case Is = "straniero"
Me.TITOLO.Caption = "Clienti stranieri"
filtro = "[Nazione] not Like 'Italia'"


End Select
Me.Filter = filtro
Me.FilterOn = True
End Sub

Se provo con Report_NoData ricevo errore run-time 2501 e il report non si apre mai

Private Sub Report_NoData(Cancel As Integer)
MsgBox Prompt:="Nessun record. Report non generato", Buttons:=vbInformation, title:="Non generato"
Cancel = True
End Sub

4 Risposte

  • Re: Report su menu a scelta

    Che tu riceva l'errore è ovvio… viene annullata l'azione di OPENREPORT…!!! (errori a parte nel codice)

    Hai provato a capire chi genera l'errore…?

    Secondo me è proprio l'Evento [Private Sub button_Click()] della Form, quindi se usassi una gestione errori intercettando appunto il 2051…

    Private Sub button_Click()
    	On Error Goto Err_Handler
    	Dim Report As String
    	Dim Args As String
    	Select Case Me.gruppo
    		Case Is = "1"
    			Report = "rptelencoclienti"
    			Args = "italiano"
    		Case Is = "2"
    			Report = "rptelencoclienti"
    			Args = "straniero"
    	End Select
    	DoCmd.OpenReport Report, acViewPreview, , , , Args
    Exit_Here:
    	Exit Sub
    Err_Handler:
    	Select Case Err.Number
    		Case 2051:	MsgBox "Report NOn generato !": Resume Exit_Here
    		Case Else:	MsgBox err.Numer & " - " & err.Description
    	End Select
    End Sub

    Tuttavia quello che fai secondo me sarebbe meglio farlo così:

    Private Sub button_Click()
    	On Error Goto Err_Handler
    	Select Case Me.gruppo
    		Case Is = "1"
    			DoCmd.OpenReport "rptelencoclienti", acViewPreview, , "[Nazione] Like 'Italia'" 
    			Reports("rptelencoclienti").Caption="Clienti italiani"
    		Case Is = "2"
    			DoCmd.OpenReport "rptelencoclienti", acViewPreview, , "[Nazione] not Like 'Italia'"
    			Reports("rptelencoclienti").Caption="Clienti stranieri"
    	End Select
    	
    Exit_Here:
    	Exit Sub
    Err_Handler:
    	Select Case Err.Number
    		Case 2051:	Resume Exit_Here
    		Case Else:	MsgBox err.Numer & " - " & err.Description
    	End Select
    End Sub

    Su Load del REPORT non serve nulla, ma ovviamente devi mettere il codice su NoData:

    Private Sub Report_NoData(Cancel As Integer)
    	Cancel = True
    End Sub

    Solo se apri il REPORT in modalità acDIALOG allora basta gestire la CAPTION nel REPORT.

    Non applicare il FILTER su LOAD perchè significa far passare 2 volte i dati, se invece passi la WHERECONDITION subito il flusso dati è minimal.

  • Re: Report su menu a scelta

    14/03/2023 - @Alex ha scritto:


    Tuttavia quello che fai secondo me sarebbe meglio farlo così:

    Private Sub button_Click()
    	On Error Goto Err_Handler
    	Select Case Me.gruppo
    		Case Is = "1"
    			DoCmd.OpenReport "rptelencoclienti", acViewPreview, , "[Nazione] Like 'Italia'" 
    			Reports("rptelencoclienti").Caption="Clienti italiani"
    		Case Is = "2"
    			DoCmd.OpenReport "rptelencoclienti", acViewPreview, , "[Nazione] not Like 'Italia'"
    			Reports("rptelencoclienti").Caption="Clienti stranieri"
    	End Select
    	
    Exit_Here:
    	Exit Sub
    Err_Handler:
    	Select Case Err.Number
    		Case 2051:	Resume Exit_Here
    		Case Else:	MsgBox err.Numer & " - " & err.Description
    	End Select
    End Sub

    Su Load del REPORT non serve nulla, ma ovviamente devi mettere il codice su NoData:

    Private Sub Report_NoData(Cancel As Integer)
    	Cancel = True
    End Sub

    Solo se apri il REPORT in modalità acDIALOG allora basta gestire la CAPTION nel REPORT.

    Non applicare il FILTER su LOAD perchè significa far passare 2 volte i dati, se invece passi la WHERECONDITION subito il flusso dati è minimal.

    Ho provato il codice che mi ha suggerito Alex pero ricevi errore di run timer 438

    Ho solo fatto un cambiamento per modificare una specifica label

    Reports("report").Controls("Titolo").Caption="Clienti italiani"
  • Re: Report su menu a scelta

    Il report non mi pare che si chiami “report” ma "rptelencocliento"

  • Re: Report su menu a scelta

    Un mio errore . il codice corretto è

    Reports("rptelencoclienti").Controls("Titolo").Caption="Clienti italiani"
Devi accedere o registrarti per scrivere nel forum
4 risposte