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