Reports

4.11 Come si può filtrare un report in base alla selezione multipla effettuata su una casella di riepilogo?
  Roberto
Nel database allegato a questa FAQ, si è creato una tabella chiamata Anagrafica che ha la struttura della classica tabella anagrafica clienti.
Si è quindi creato un report chiamato ReportSocietà che realizza la lista anagrafica di tutti i record contenuti nella tabella Anagrafica.
Si è poi creata una maschera (Maschera1) con visualizzazione a Maschera singola e che non ha origine record.
In Maschera1 si è inserita una casella di riepilogo non associata chiamata Elenco; Elenco ha 3 colonne (la prima relativa alla chiave primaria IDSocietà, la seconda relativa al campo RagioneSociale e la terza relativa al campo Città); la proprietà Selezione multipla della casella di riepilogo è stata impostata a Estesa; alla prima colonna di Elenco si è data lunghezza zero.
In Maschera1 si è inserita una casella di testo non visibile chiamata Lista nella quale viene creata la lista delle ragioni sociali selezionate nella casella di riepilogo: questa lista viene visualizzata nell’intestazione di ReportSocietà.
In Maschera1 viene infine inserito un pulsante di comando (chiamato Comando5, premendo il quale, dopo aver selezionato le righe interessate nella casella di riepilogo, viene aperto ReportSocietà.
A fronte dell’evento “Su clic” del pulsante di comando è stato generato il seguente codice VBA:
Private Sub Comando5_Click()
On Error GoTo Err_Comando5_Click
    Me!Lista = Null
    Dim strLista As String
    Dim strCriteri As String
    Dim varItem As Variant
    'Se non ci sono voci selezionate
    'non ci sono attività da effettuare
    If Me!Elenco.ItemsSelected.Count = 0 Then Exit Sub
    'Cicla nell'insieme delle voci selezionate
    For Each varItem In Me!Elenco.ItemsSelected
        'Cattura la colonna IDSocietà di ciascuna
        'voce selezionata
        strLista = strLista & _
            Me!Elenco.Column(0, varItem) & ","
        Me!Lista = Me!Lista & _
            Me!Elenco.Column(1, varItem) & ", "
    Next varItem
    'Elimina la virgola eccedente
    strLista = Left$(strLista, Len(strLista) - 1)
    Me!Lista = Left$(Me!Lista, Len(Me!Lista) - 2)
    'Apri il ReportSocietà filtrando sulle
    'Ragioni Sociali selezionate
    strCriteri = "[IDSocietà] IN (" & strLista & ")"
    Dim stDocName As String
    stDocName = "ReportSocietà"
    DoCmd.OpenReport stDocName, acPreview, , strCriteri
    'Deseleziona tutte le righe della casella di riepilogo
    Dim Cont As Integer
    For Cont = 0 To Me!Elenco.ListCount - 1
        Me!Elenco.Selected(Cont) = False
    Next Cont
Exit_Comando5_Click:
    Exit Sub
Err_Comando5_Click:
    MsgBox Err.Description
    Resume Exit_Comando5_Click
End Sub

Download:
 
  FiltroReport.zip (19Kb) MSAccess97 database


Se pensate di avere del materiale freeware interessante e volete pubblicarlo, allora leggete qui.