CASELLE DI RIEPILOGO

di il
85 risposte

85 Risposte - Pagina 3

  • Re: CASELLE DI RIEPILOGO

    29/06/2023 - By65Franco ha scritto:


    29/06/2023 - Pattygirl ha scritto:


    Mi consigliate un bel libro, semplice da studiare? 

    A che punto sei arrivata ?

    Hai realizzato la subForm alimentata dalla tua query ?

    ‘mo di semplice direi che non c’è proprio nulla. Ma puoi fare riferimento al supporto Microsoft dove trovi tutto di più e meglio di un libro a mio avviso ;))

    A che livello senti di essere e quali argomenti vorresti approfondire ?

    Una buona consultazione sarebbe questa, tanto per iniziare ed assimilare dei concetti basi di Access:
    Informazioni sulla struttura di un database di Access - Supporto tecnico Microsoft

    a seguire trovi alla fine dell'articolo gli argomenti principali e così via:



    Ho lasciato il pc al lavoro, questo weekend porto e lavoro da casa seguendo i suggerimenti poi vi faccio sapere 

  • Re: CASELLE DI RIEPILOGO

    30/06/2023 - @Alex ha scritto:


    30/06/2023 - By65Franco ha scritto:

    Serve solo per togliere le eventuali selezioni sugli elementi…. basterebbe un Me.ElencoColori = vbNullstring ?

    Intendi resettare la ListBox in Multiselezione…?
    se così basta una riga così:

    Me!NomeListBox.RowSource=Me!NomeListBox.RowSource

    Tu non lo sai @Alex , ma ben più di 10 anni fa l'uso del vbNullString è una di quelle cose che ho imparato da te, mo' tante altre cose sicuramente non le ricordo, ma questa e altre forme di convalida e di confronto, ogni volta che le uso i ricordi ritornano a quei tempi ormai andati ;)) 


    Per il resto del codice ottimo !!! Grazie

    Intendi dire che sono vecchio… ho capito…! ;-)

    Ciao

    Per il primo punto SI… abblencare la rowsource , perfetto.

    Per il secondo punto NO !!!!!!    ma che dici !?!?   ;))
    Anche il DbEngine appreso da te e non lo mollo più. 
    Ma poi, lavoravo solo con l'ADODB e invece il DAO spesso e volentieri è da preferire e anche questo è farina dal tuo sacco…. 
    Ma più ci penso e più cose mi vengono in mente, tante info utilissime … grazie davvero!

    Ti ricorderò sempre con molta gratitudine …. ;-)

  • Re: CASELLE DI RIEPILOGO

    Ho provato a fare come mi avete suggerito:

    Filtro non funziona… e per di piu non so perchè nella sottomaschera, quando levo il filtro mi da solo “acc. tossicodip” e non tutta la lista che vedo nella mia query non filtrata 

    però il pulsante per levare il filtro, funziona! :)

    allora ho scritto (scopiazzato, ovviamente! ;)) cosi:


    Private Function MyFilterForm() As String
    MyFilterForm = vbNullString
    Dim varSel As Variant
    For Each varSel In Me.LisAccert.ItemsSelected
       If MyFilterForm <> vbNullString Then MyFilterForm = MyFilterForm & ", "
       MyFilterForm = MyFilterForm & "'" & Me.LisAccert.ItemData(varSel) & "'"
    Next varSel
    If MyFilterForm <> vbNullString Then MyFilterForm = "accertamenti IN (" & MyFilterForm & ")"

    Dove: LisAccert è la mia Listbox

    "accertamenti" è il nome del campo da filtrare (non ha ID perchè deriva da un altra tabella)

    La mia sottomaschera si chiama: MonitoraccertSM

    cosi ho addattato il filtro con il pulsante

    Private Function MyFilterForm() As String
    MyFilterForm = vbNullString
    Dim varSel As Variant
    For Each varSel In Me.LisAccert.ItemsSelected
       If MyFilterForm <> vbNullString Then MyFilterForm = MyFilterForm & ", "
       MyFilterForm = MyFilterForm & "'" & Me.LisAccert.ItemData(varSel) & "'"
    Next varSel
    If MyFilterForm <> vbNullString Then MyFilterForm = "accertamenti IN (" & MyFilterForm & ")"

    non riesco a capire cosa c'è che non va….

  • Re: CASELLE DI RIEPILOGO

    Uno scopiazzato? Direi un disastro.

    Studia bene l'esempio di @Alex. Il ciclo foreach costruisce la prima parte della stringa dal passare al metodo filter, combinando gli elementi di selezione dalla listbox. Il ciclo if elimina la virgola finale dalla stringa. Infine si passa al completamento della stringa aggiungendo la clausola IN.

  • Re: CASELLE DI RIEPILOGO

    ;-)) bene !!!

    Allora la devi completare/modificare in questo modo:

    Private Function MyFilterForm() As String
    MyFilterForm = vbNullString
    Dim varSel As Variant
    For Each varSel In Me.LisAccert.ItemsSelected
        MyFilterForm = MyFilterForm & "'" & Me.LisAccert.ItemData(varSel) & "',"
    Next varSel
    If MyFilterForm <> vbNullString Then 
    	MyFilterForm = MID$(MyFilterForm ,1,LEN(MyFilterForm)-1)
    	MyFilterForm = "accertamenti IN (" & MyFilterForm & ")"
    	Me.MonitoraccertSM.Form.FilterOn=True
    Else
    	Me.MonitoraccertSM.Form.FilterOn=False
    End if
    End Function

    Controlla i nomi dei campi se li ho scritti corretti.

    Pertanto la logica è:

    • la routine è una Function che ritorna un valore di tipo stringa
    • si definisce una variabile di nome varSel che ha lo scopo di enumerare gli elementi selezionati nella listbox
    • con For Each si leggono tutti gli elementi selezionati nella listbox e mette il risultato, elemento per elemento, nella varSel
    • il valore di ritorno della Function, racchiusi tra apici e separati dalla virgola, si compone via via dagli elementi enumerati dalla Each
    • a fine ciclo for each:
      •  se il valore della function MyFilterForm <> vbNullString
        • la Mid$ elimina nell'ultima posizione la Virgola in più che non serve
        • si aggiunge alla stringa di ritorno della function il Campo/Colonna da condizionare con la clausola IN  e gli elementi selezionati dalla listbox
        • con FilterOn si attiva il filtro alla subform (True)
      • Altrimenti 
        • il FilterOn della subform si disattiva (False) e non verrà filtrata la subForm e tal caso verranno visualizzati tutti i records della Query

    Prova , verifica e controlla…. ;-)

  • Re: CASELLE DI RIEPILOGO

    Devi modificare anche il richiamo della Function in questo modo:

    ' APPLY FILTER
    Private Sub btnFilter_Click()
    Me.MonitoraccertSM.Form.Filter = MyFilterForm
    End Sub

    perchè successivamente con @Alex abbiamo modificato e perfezionato alcuni passaggi della function MyFilterForm

    p.s. Mi sembra che stai facendo un buon lavoro, brava !!!!
    vedrai che passo passo tutto diventerà molto più familiare, da scoprire e da perfezionare man mano che farai esperienza.

  • Re: CASELLE DI RIEPILOGO

    01/07/2023 - By65Franco ha scritto:


    Devi modificare anche il richiamo della Function in questo modo:

    ' APPLY FILTER
    Private Sub btnFilter_Click()
    Me.MonitoraccertSM.Form.Filter = MyFilterForm
    End Sub

    perchè successivamente con @Alex abbiamo modificato e perfezionato alcuni passaggi della function MyFilterForm

    p.s. Mi sembra che stai facendo un buon lavoro, brava !!!!
    vedrai che passo passo tutto diventerà molto più familiare, da scoprire e da perfezionare man mano che farai esperienza.

    Sei veramente bravo a spiegare! Tanto di cappello. E ti ringrazio 

    Io vorrei fare un corso, ma non è facile trovare dalle mie parti. 

    Cmq oggi pomeriggio ci provo e faccio sapere! ?? 

  • Re: CASELLE DI RIEPILOGO

    01/07/2023 - Pattygirl ha scritto:


    Io vorrei fare un corso, ma non è facile trovare dalle mie parti. 

    Non ho seguito tutta la discussione nei dettagli, ma sembra che in qualche modo riesci a “masticare” un po' di VBA (si impara sbagliando spesso e volentieri). Considerato che le nozioni di base ce le hai già, ti consiglio un buon manuale completo. La linea Mondadori Informatica per esempio va molto bene, ma tieni presente che tratta comunque situazioni generali/standard. Lo stesso manuale consiglia poi di consultare i forum per specifiche e dettagliate richieste…così come questa che hai postato. In sostanza prosegui pure e non temere di postare tutte le discussioni che ritieni opportuno proporre.

  • Re: CASELLE DI RIEPILOGO

    01/07/2023 - OsvaldoLaviosa ha scritto:


    01/07/2023 - Pattygirl ha scritto:


    Io vorrei fare un corso, ma non è facile trovare dalle mie parti. 

    Non ho seguito tutta la discussione nei dettagli, ma sembra che in qualche modo riesci a “masticare” un po' di VBA (si impara sbagliando spesso e volentieri). Considerato che le nozioni di base ce le hai già, ti consiglio un buon manuale completo. La linea Mondadori Informatica per esempio va molto bene, ma tieni presente che tratta comunque situazioni generali/standard. Lo stesso manuale consiglia poi di consultare i forum per specifiche e dettagliate richieste…così come questa che hai postato. In sostanza prosegui pure e non temere di postare tutte le discussioni che ritieni opportuno proporre 

    01/07/2023 - OsvaldoLaviosa ha scritto:


    01/07/2023 - Pattygirl ha scritto:


    Io vorrei fare un corso, ma non è facile trovare dalle mie parti. 

    Non ho seguito tutta la discussione nei dettagli, ma sembra che in qualche modo riesci a “masticare” un po' di VBA (si impara sbagliando spesso e volentieri). Considerato che le nozioni di base ce le hai già, ti consiglio un buon manuale completo. La linea Mondadori Informatica per esempio va molto bene, ma tieni presente che tratta comunque situazioni generali/standard. Lo stesso manuale consiglia poi di consultare i forum per specifiche e dettagliate richieste…così come questa che hai postato. In sostanza prosegui pure e non temere di postare tutte le discussioni che ritieni opportuno proporre.

    Più che masticare, sono ancora agli omogeneizzati, ma mi piace e vorrei approfondire perché è un bel strumento e da soddisfazione specie quando funziona ???? 

    Comune provo a cercare il manuale perché mi finito questo progetto ho altri in mente. 

    Grazie mille del suggerimento! 

  • Re: CASELLE DI RIEPILOGO

    Eccomi con buone news!!!!

    Allora, ho deciso di levare la sottomaschera e lavorare diretamente sulle tabelle e ora funziona tutto!!! evviva!!!

    l'unica cosa (anche se so che è un doppione) ho inserito il codice del pulsante filtro in questa maniera:

    Private Sub btnFilter_Click()
    Me.Filter = MyFilterForm
    Me.FilterOn = True

    Cosi funziona tutto alla perfezione!

    Grazie mille a tutti che con pazienza ha preso del tempo anche per spiegarmi la funzione! capire il codice non (una volta fatto) non è stato difficile, ma mai e poi mai sarei riuscita da sola e grazie a voi, ho imparato una cosa nuova!

    comunque tranquilli che torno!!! :) è ancora lungo (e ambizioso mio progetto!) e ne avrò sicuramente bisogno dei vs preziosi consigli!

    grazie davvero a tutti!

  • Re: CASELLE DI RIEPILOGO

    01/07/2023 - Pattygirl ha scritto:


    Me.FilterOn = True

    Se hai utilizzato l'ultima Versione della funzione che ti ho postato, allora Me.FilterOn = True non ti serve in quanto già presente nella funzione.

    Brava !!!

    buon proseguimento!

    ;-)

  • Re: CASELLE DI RIEPILOGO

    01/07/2023 - By65Franco ha scritto:


    01/07/2023 - Pattygirl ha scritto:


    Me.FilterOn = True

    Se hai utilizzato l'ultima Versione della funzione che ti ho postato, allora Me.FilterOn = True non ti serve in quanto già presente nella funzione.

    Brava !!!

    buon proseguimento!

    ;-)

    Ma infatti avevo capito perchè la funzione richiamava il comando di filtro. ma non ha funzionato senza… l'ho messo….

    adesso sto facendo la stessa procedura, seguendo le false righe di quello che ho imparato con la casella combinata direttamente dalla maschera.

    Funziona tutto tranne per i cognomi con un accento. esempio Baccalà (quel “à” o “a'”) mi fa aprire il debub dicendo di non aver trovato corrispondenza.

    ho usato il filtro cosi:

    Private Sub CC_Dipendente_AfterUpdate()
    Me.Filter = "[Dipendente]=" & "'" & Me.CC_Dipendente & "'"
    Me.FilterOn = True
    End Sub

    Dove Dipendente è il campo da filtrare e CC_dipendente è la combobox. io credevo che la riga di codice con “'” mi prendeva i caratteri speciali. non è cosi?

    Poi ultimissima cosa sempre riguado ai filtri. questa maschera la devo filtrare in un certo intervalo di date… usando le query, avrei usato la funzione between… ma adesso se devo inserire il codice per il filtro in due TXT dove inserirò le date da ricercare non saprei come fare … (snif)

  • Re: CASELLE DI RIEPILOGO

    Sei sicura per “à”? Ricordo di essere incappato nello stesso problema, ma solo per l'apostrofo, risolvendo equivalentemente così

    "[Dipendente] = """ & Me![CC_Dipendente] & """"

    Tuttavia, per evitare questo inconveniente, consiglio vivamente di usare come origine della casella combinata un campo numerico ID, facendo mostrare poi la parte testuale del Dipendente.

    01/07/2023 - Pattygirl ha scritto:


    Poi ultimissima cosa sempre riguado ai filtri. questa maschera la devo filtrare in un certo intervalo di date… usando le query, avrei usato la funzione between… ma adesso se devo inserire il codice per il filtro in due TXT dove inserirò le date da ricercare non saprei come fare … (snif)

    Potresti scrivere nel Criterio della query così:

    Between [Inserisci Data Inizio] And [Inserisci Data Fine]

    …trattandosi di date…non ricordo se occorre aggiungere anche i # così

    Between #[Inserisci Data Inizio]# And #[Inserisci Data Fine]#

  • Re: CASELLE DI RIEPILOGO

    01/07/2023 - OsvaldoLaviosa ha scritto:


    Sei sicura per “à”? Ricordo di essere incappato nello stesso problema, ma solo per l'apostrofo, risolvendo equivalentemente così

    "[Dipendente] = """ & Me![CC_Dipendente] & """"

    Tuttavia, per evitare questo inconveniente, consiglio vivamente di usare come origine della casella combinata un campo numerico ID, facendo mostrare poi la parte testuale del Dipendente.

    01/07/2023 - Pattygirl ha scritto:


    Poi ultimissima cosa sempre riguado ai filtri. questa maschera la devo filtrare in un certo intervalo di date… usando le query, avrei usato la funzione between… ma adesso se devo inserire il codice per il filtro in due TXT dove inserirò le date da ricercare non saprei come fare … (snif)

    Potresti scrivere nel Criterio della query così:

    Between [Inserisci Data Inizio] And [Inserisci Data Fine]

    …trattandosi di date…non ricordo se occorre aggiungere anche i # così

    Between #[Inserisci Data Inizio]# And #[Inserisci Data Fine]#

    Si il problema è quando mi si riporta un apostrofo o altro… Ho Provato con ch34 e * nel codice ma niente… Provo così come mi hai suggerito. 

    Grazie ?? 

  • Re: CASELLE DI RIEPILOGO

    Ho ancora bisogno di voi! ;) Non apro un altro post perchè tanto è lo stesso argomento.

    Allora, il problema è questo… la lisbox funziona benissimo, la CBO della filtro nome dei dipendenti anche solo che separati e alternati… ossia un filtro ignora l'altro… la data con between nei criteri della query no funziona per niente.

    allora io dovrei far si che questi filtri parlino fra di loro…. e ho modificato il codice cosi… ma non va. 

    Private Function MyFilterForm() As String
    MyFilterForm = vbNullString
    Dim strFilter     As String
    Dim strFilterDate As String
    Dim varSel As Variant
    For Each varSel In Me.LisAccert.ItemsSelected
        MyFilterForm = MyFilterForm & "'" & Me.LisAccert.ItemData(varSel) & "',"
    Next varSel
    If MyFilterForm <> vbNullString Then
      If Len(strFilter) > 0 Then
         If Len(txtDaData & vbNullString) = 0 Then txtDaData = #1/1/1900#
         If Len(txtAData & vbNullString) = 0 Then txtAData = #12/31/2100#
    Filter = Left$(strFilter, Len(strFilter) - 5) & " and " & strFilterDate
    MyFilterForm = Mid$(MyFilterForm, 1, Len(MyFilterForm) - 1)
    MyFilterForm = "accertamenti IN (" & MyFilterForm & ")"
    strFilterDate = "ProssimaVisita>=" & CLng(txtDaData) & " and ProssimaVisita<" & CLng(txtAData) + 1
    Me.FilterOn = True
    Else
        Me.FilterOn = False
    End If
    End If
         End Function

    Dove il filtro dipendente è caricato dalla CC_Dipendente (deve filtrare il campo “Dipendente”)

    L'intervallo date da due caselle di testo: txtDaData e txtAData (devono filtrare il campo "ProssimaVisita")

    e la mia Lisbox si chiama sempre: Lisaccert (Filtra il campo accertamenti)

    Mi date un po di lume!?

    Grazie mille ancora!

Devi accedere o registrarti per scrivere nel forum
85 risposte