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.