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: |