Ciao a tutti,
dunque...
...Senza cattiveria ho effettuato, sbagliando, il crossposting e me ne pento...:(
spero che aprire questo 3D sullo stesso argometo dei due 3D precedentemente chiusi in altri 2 forum
non violi le regole, ma sono costretto a farlo in quanto ho bisogno di aiuto...Davvero...:(
Arrivo al problema.
Ho un report dinamico (che ha come origine record una query) che ovviamente ha tutti i controlli non associati.
La query su cui si basa il report è a campi incrociati ed ha un parametro che corrisponde ad una
casella combinata in una form non associata.
questo parametro funziona correttamente...e sono già a buon punto.
Il problema è che vorrei filtrare ulteriormente il report con una selezione multipla però il filtro non
viene applicato.
In uno dei due forum in cui è stata chiusa la disussione (masterdrive.it) mi è stato consigliato da Alex
di effettuare il requery del report dopo aver assegnato il recordsource (al report), ma il report non viene filtrato
lo stesso.
ecco tutto il codice presente nel report
Private Sub Report_Close()
DoCmd.Restore
End Sub
Private Sub Report_NoData(Cancel As Integer)
MsgBox "Nessuna Informazione Da Visualizzare", , "Avviso by Fil"
Cancel = True
End Sub
Private Sub Report_Open(Cancel As Integer)
'On Error GoTo Errore
'MsgBox Forms!MReportCategorie!Lista
DoCmd.Maximize
Me.RecordSource = "QRptRipartizioniSpeseEsercizio2"
Call AggiornaReport(Me) 'questo richiama il "Modulo1" per effettuare il requery
Dim qdf As DAO.QueryDef
Dim fld As DAO.Field
Dim rst As DAO.Recordset
Dim Conta As Integer
Set qdf = CurrentDb().QueryDefs("QRptRipartizioniSpeseEsercizio2")
qdf.Parameters![Forms!MReportCategorie!cbo_tipo] = [Forms]![MReportCategorie]![cbo_tipo]
Set rst = qdf.OpenRecordset
Conta = 1
For Each fld In rst.Fields
Me("Etichetta" & Trim(Conta)).Caption = fld.Name
Me("Etichetta" & Trim(Conta)).Visible = True
Me("Controllo" & Trim(Conta)).ControlSource = fld.Name
Me("Controllo" & Trim(Conta)).Visible = True
Conta = Conta + 1
Next
Set rst = Nothing
Set qdf = Nothing
Set fld = Nothing
Exit Sub
Errore:
Resume Next
End Sub
codice del modulo (Modulo1) per effettuare il requery
Public Sub AggiornaReport(rpt As Access.Report)
With rpt
If .Filter = vbNullString Then
.FilterOn = True
.Filter = " "
.Filter = vbNullString
Else
.Filter = .Filter
.FilterOn = True
End If
End With
End Sub
codice che effettua la multiselezione e che apre il report:
-pulsante che apre il report
Private Sub Comando8_Click()
On Error GoTo Errore
Dim varItem As Variant
Dim strCONDIZIONE As String
Dim stDocName As String
stDocName = "rptRipartizSpeseEsercizio"
strCONDIZIONE = ""
For x = 0 To Me.Lista.ListCount - 1
strCONDIZIONE = strCONDIZIONE & "[Gruppo Voci] = " & Me.Lista.Column(0, x)
If x <> Me.Lista.ListCount - 1 Then
strCONDIZIONE = strCONDIZIONE & " OR "
End If
Next x
If strCONDIZIONE <> "" Then
DoCmd.OpenReport stDocName, acViewPreview, , strCONDIZIONE
Else
MsgBox "Selezionare almeno 1 CATEGORIA...!"
End If
Exit Sub
Errore:
Resume Next
End Sub
-codice della listbox da cui vengono selezionzati gli items
Private Sub Elenco_Click()
On Error GoTo Errore
Dim varItem As Variant
presente = 0
If Me.Elenco.Column(0) = 1 Then
ListIndex = 1
Lista.RemoveItem (Lista.ListIndex)
Else
For Each varItem In Me.Elenco.ItemsSelected
Me.Lista = Me.Lista & Me.Elenco.Column(0, varItem) & ","
Me.Lista.SetFocus
For x = 0 To Me.Lista.ListCount - 1
If Me.Lista.Column(0, x) = Me.Elenco.Column(0, varItem) Then
presente = -1
End If
Next x
If presente <> -1 Then
Me.Lista.AddItem Me.Elenco.Column(0, varItem) & ";" & Me.Elenco.Column(1, varItem)
End If
Next varItem
End If
Exit Sub
Errore:
Resume Next
End Sub
codice della 2° listbox in cui viene effettuata la post selezione e che funge da criterio per il report
Private Sub Lista_Click()
On Error GoTo Errore
ListIndex = 1
Lista.RemoveItem (Lista.ListIndex)
Exit Sub
Errore:
Resume Next
End Sub
Chiedo scusa ancora per la mia condotta e ringrazio chiunque vorrà aiutarmi (in anticipo)... ;-D
Abbraccio
Ciao
Fil