Filtro report con vba

di jibi il
9 risposte
Buon giorno,
è un pezzo che non scrivo...
Volevo chiedere un consiglio. Ho un report i cui valori vengono filtrati dai valori selezionati di una listbox di una maschera. Tutto funziona e il campo della listbox e di tipo numerico (anno). Ecco il codice:
Option Compare Database
Option Explicit


Private Sub cmdStampa_Click()
    Dim strItems As String
    strItems = FillItems(Me.lst_anno)
    If Len(strItems) > 0 Then
        If Me.FilterOn = True Then Me.FilterOn = False
        [b]Me.Filter = "anno IN (" & strItems & ")"[/b]
        Me.FilterOn = True
    End If
    DoCmd.OpenReport "carta", acViewPreview, , Me.Filter
End Sub

Private Function FillItems(lst As Access.ListBox) As String
    Dim varItem As Variant
    Dim strItems As String
    
    For Each varItem In lst.ItemsSelected
        strItems = strItems & lst.Column(0, varItem) & ","
    Next
    If Len(strItems) > 0 Then strItems = Mid$(strItems, 1, Len(strItems) - 1)
    FillItems = strItems
End Function
Tutto funziona, però ora ho bisogno di cambaire questo codice, facendo sì che il report sia filtrato da valori in formato dd/mm/aaaa che visualizzo nella listbox. Per far ciò ho modificato la listbox facendole pescare valori dal campo "data" nel suddetto formato. Ma il mio problema sta nel convertire la riga in grassetto che vedete sopra.. ora il formato è data e non più numerico, quindi come lo modifico? scusate la ignoranza.

Grazie mille

jibi

PS. non mi ha preso il grassetto quindi, la riga in questione è compresa trae: Me.Filter = "anno IN (" & strItems & ")"

9 Risposte

  • Devi solo modificare la funzione FILLITEMS che mi pare di conoscere... e fare in modo che la stringa restituita dal ciclo sia formattata come.lo richiede un campo data....
  • Ti ringrazio molto per avermi risposto,
    è proprio
    fare in modo che la stringa restituita dal ciclo sia formattata come.lo richiede un campo data....
    che non mi riesce.

    Chiedo scusa per l'ignoranza

    PS: Sì Alex il codice credo che me l'abbia passato tu, ma non ricordo di preciso. Di sicuro almeno in parte l'ho preso da te, o dal forum o da uno dei tuoi fantastici db che ci sono sul tuo sito

    Grazie

    Jibi
  • Qui trovi un tutorial su come si gestiscono i campi data:
    forum.masterdrive.it/microsoft-office-access-vba-23/vba-jet-tutorial-uso-campi-data-56461/[/url]
    Ora devi ragionarci sopra ma soprattutto usare il DEBUG...
  • Buona sera,
    ti ringrazio molto per avermi scritto. Ho letto il tuo post e mi piace molto la soluzione 3*, che tu indichi essere la migliore fra l'altro. Solo che non ho capito davvero dove sostituire la riga dato che nella mia funzione non compare il campo "data" (anche il mio campo si chiama "data".
    Mi dispiace per l'ignoranza, cerco di imparare...

    Grazie

    Jibi

    *[Data]=" & Clng(Forms!NomeForm!ControlloData)
  • jibi ha scritto:


    ....[Data]=" & Clng(Forms!NomeForm!ControlloData)
    Potrebbe essere ControlloData ??????
  • jibi ha scritto:


    Buona sera,
    ti ringrazio molto per avermi scritto. Ho letto il tuo post e mi piace molto la soluzione 3*, che tu indichi essere la migliore fra l'altro. Solo che non ho capito davvero dove sostituire la riga dato che nella mia funzione non compare il campo "data" (anche il mio campo si chiama "data".
    Mi dispiace per l'ignoranza, cerco di imparare...

    Grazie

    Jibi

    *[Data]=" & Clng(Forms!NomeForm!ControlloData)
    Questa è la stringa che compone il criterio per concatenamento quando questo è Numerico:
    
    strItems = strItems & lst.Column(0, varItem) & ","
    Se il criterio non è Numerico ma Data dal momento che cambia la sintassi, questa è la riga da modificare...
    
    strItems = strItems & Clng(lst.Column(0, varItem)) & ","
  • Gentilissimo, come sempre.
    Grazie mille!
    Ho sostituitola la riga come dici, però mi va in debug con errore runtime 13 (tipo non corrispondente). Mi evidenzia proprio quella riga lì.
    non è che devo modificare anche la parte finale di questa riga?
    Me.Filter = "data IN (" & strItems & ")" 
    (ho sostituito "anno" con "data")

    Jibi
  • Fai Debug...?
    Stampa la stringa, e simula l'azione incollando in QBE per vedere se funziona e come eventualmente modificare...
    Le fasi di DEBUG devono essere il KnowHow prima ancora di scrivere 1 riga di codice.

    Ho il sospetto che Clng(...) di un valore stringa non possa funzionare...!
    Quindi quel Vaore estratto dalla ListBox, spero sia formattato correttamente, lo devi convertire da Stringa a Data e poi in Long...
    strItems = strItems & Clng(cDate(lst.Column(0, varItem))) & ","
  • Perfetto!
    Hai ragione, funziona perfettamente!

    Grazie mille!!

    jibi
Devi accedere o registrarti per scrivere nel forum
9 risposte