Filtro report con vba

di il
9 risposte

Filtro report con vba

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

  • Re: Filtro report con vba

    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....
  • Re: Filtro report con vba

    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
  • Re: Filtro report con vba

    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...
  • Re: Filtro report con vba

    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)
  • Re: Filtro report con vba

    jibi ha scritto:


    ....[Data]=" & Clng(Forms!NomeForm!ControlloData)
    Potrebbe essere ControlloData ??????
  • Re: Filtro report con vba

    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)) & ","
  • Re: Filtro report con vba

    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
  • Re: Filtro report con vba

    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))) & ","
  • Re: Filtro report con vba

    Perfetto!
    Hai ragione, funziona perfettamente!

    Grazie mille!!

    jibi
Devi accedere o registrarti per scrivere nel forum
9 risposte