CASELLE DI RIEPILOGO

di il
85 risposte

85 Risposte - Pagina 5

  • Re: CASELLE DI RIEPILOGO

    Ok capito!!

    praticamente ho cambiato l'origine dei dati dalla mia combo in questa maniera in modo da prendere l'iD (ma l'ho nascosto, usando larghezza colonna: "0,2,55cm"

    cosi facendo ho cambiato il codice in questo modo:

    Private Function MyFilterForm() As String
    Dim strFilterDate As String
    Dim FilterCBODip 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
       MyFilterForm = Mid$(MyFilterForm, 1, Len(MyFilterForm) - 1)
       MyFilterForm = "accertamenti IN (" & MyFilterForm & ")"
        If Len(txtDaData & vbNullString) > 0 And Len(txtAData & vbNullString) > 0 Then
          strFilterDate = "ProssimaVisita>=" & CLng(txtDaData) & " and ProssimaVisita<" & CLng(txtAData) + 1
       End If
         If FilterCBODip <> vbNullString Then
          FilterCBODip = "[ID] = " & Me![CC_Dipendente].Column(0)
       End If
       MyFilterForm = MyFilterForm & " and " & strFilterDate & " and " & FilterCBODip
    End If

    Però da sempre errore….. :'( e se non bastasse non filtra piu niente!! come è possibile?!

    nel debug l'errore appare nel pulsante di filtro… ma a me sembra tutto giusto, e per di piu, non avevo modificato quel codice.

  • Re: CASELLE DI RIEPILOGO

    Come si chiama il controllo corrispondente alla combobox? Sicuro che ID corrisponde al campo della primary key? Hai inserito il campo ID nella query associata alla maschera?

  • Re: CASELLE DI RIEPILOGO

    02/07/2023 - Antony73 ha scritto:


    Come si chiama il controllo corrispondente alla combobox? Sicuro che ID corrisponde al campo della primary key? Hai inserito il campo ID nella query associata alla maschera?

    si, ho riportato nella query anche L'id, mi sono accertata che ci fosse dentro prima di cambiare la combobox

    Sicuro che ID corrisponde al campo della primary key? 

    R: Si si, sono diletante ma le relazioni (credo) di averle imparato a fare! ;D confermo che l'ID è la primary Key

  • Re: CASELLE DI RIEPILOGO

    Come colonna associata metti 2. Foi fai vedere la sezione formato.

  • Re: CASELLE DI RIEPILOGO

    02/07/2023 - Antony73 ha scritto:


    Come colonna associata metti 2. Foi fai vedere la sezione formato.

    Fatto! Ho cambiato un po i colori nel frattempo! :) 

    Comunque, il pulsante "filtra" non funziona ancora… Ho fatto la prova filtrando manualmente ID del foglio di dati della maschera, e ID è quello riportato nella Combobox. Nella visualizzazione, fra l'altro viene salvato nella combo solo L'ID, quando in verita la colonna da far vedere nella combo è la nr 2 con i nominativi…

  • Re: CASELLE DI RIEPILOGO

  • Re: CASELLE DI RIEPILOGO

    Ok. Hai provato ora se funziona?

  • Re: CASELLE DI RIEPILOGO

    02/07/2023 - Antony73 ha scritto:


    Ok. Hai provato ora se funziona?

    Si ho provato… Non filtra. 

    Praticamente è come se il pulsante fosse disabilitato. 

    Non da nemmeno l'errore di prima 

  • Re: CASELLE DI RIEPILOGO

    Si ho capito.

    Guardando dal cellulare hai una visione limitata:

    modifica cosi:

    Private Function MyFilterForm() As String
    Dim strFilterDate As String
    Dim FilterCBODip 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
       MyFilterForm = Mid$(MyFilterForm, 1, Len(MyFilterForm) - 1)
       MyFilterForm = "accertamenti IN (" & MyFilterForm & ")"
        If Len(txtDaData & vbNullString) > 0 And Len(txtAData & vbNullString) > 0 Then
          strFilterDate = "ProssimaVisita>=" & CLng(txtDaData) & " and ProssimaVisita<" & CLng(txtAData) + 1
       End If
         If FilterCBODip <> vbNullString Then
            FilterCBODip = "[ID] = " & Me![CC_Dipendente].Column(0)
    
       	    MyFilterForm = MyFilterForm & " and " & strFilterDate & " and " & FilterCBODip
       	 else
       	 	MyFilterForm = MyFilterForm & " and " & strFilterDate
         end if
    End If
  • Re: CASELLE DI RIEPILOGO

    02/07/2023 - Antony73 ha scritto:


    Private Function MyFilterForm() As String Dim strFilterDate As String Dim FilterCBODip 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 MyFilterForm = Mid$(MyFilterForm, 1, Len(MyFilterForm) - 1) MyFilterForm = "accertamenti IN (" & MyFilterForm & ")" If Len(txtDaData & vbNullString) > 0 And Len(txtAData & vbNullString) > 0 Then strFilterDate = "ProssimaVisita>=" & CLng(txtDaData) & " and ProssimaVisita<" & CLng(txtAData) + 1 End If If FilterCBODip <> vbNullString Then FilterCBODip = "[ID] = " & Me![CC_Dipendente].Column(0) MyFilterForm = MyFilterForm & " and " & strFilterDate & " and " & FilterCBODip else MyFilterForm = MyFilterForm & " and " & strFilterDate end if End If

    Aggiornato con il nuovo codice:

    E' tornata a funzionare la Lisbox con il filtro delle date (che devo necessariamente tenere inserito qualcosa). domanda: posso inserire un NZ nelle date in modo da considerare anche il campo nullo con questo codice?

    La ComboBox non filtra per niente, ne in presenza degli altri campi compilati nemmeno da sola…. 

  • Re: CASELLE DI RIEPILOGO

    In effetti quando si opera con più di 2 controlli bisogna cambiare strategia e combinare i filtri a seconda della compilazione dei campi da filtrare.

    Ho scritto senza provare. Ma prova cosi:

    Private Function MyFilterListbox() As String
    Dim varSel As Variant
    For Each varSel In Me.LisAccert.ItemsSelected
      MyFilterListbox= MyFilterListbox & "'" & Me.LisAccert.ItemData(varSel) & "',"
    Next varSel
    MyFilterListbox = Mid$(MyFilterListbox, 1, Len(MyFilterListbox) - 1)
    MyFilterListbox = "accertamenti IN (" & MyFilterListbox & ")"
    end function
    
    Private Function MyFilterDate() as string
    MyFilterDate = "ProssimaVisita>=" & CLng(txtDaData) & " and ProssimaVisita<" & CLng(txtAData) + 1
    end function
    
    Private function MyFiltercbo() as string
    MyFiltercbo = "[ID] = " & Me![CC_Dipendente].Column(0)
    end function
    
    Private Sub btnFilter_Click()
    dim filtro as string
    
    if len(Me!LisAccert & vbnullstring)>0 then filtro = "MyFilterListbox and "
    
    if len(Me!txtDaData & vbnullstring)>0 and len(Me.txtAData & vbnullstring)>0 then filtro = "MyFilterData and "
    if len(Me!CC_Dipendente & vbnullstring)>0 then filtro = "MyFiltercbo and "
    filtro=Mid$(filtro, 1, Len(filtro) - 5)
    
    Me.Filter = filtro
    Me.FilterOn = True
    end sub
  • Re: CASELLE DI RIEPILOGO

    02/07/2023 - Antony73 ha scritto:


    In effetti quando si opera con più di 2 controlli bisogna cambiare strategia e combinare i filtri a seconda della compilazione dei campi da filtrare.

    Ho scritto senza provare. Ma prova cosi:

    Private Function MyFilterListbox() As String
    Dim varSel As Variant
    For Each varSel In Me.LisAccert.ItemsSelected
      MyFilterListbox= MyFilterListbox & "'" & Me.LisAccert.ItemData(varSel) & "',"
    Next varSel
    MyFilterListbox = Mid$(MyFilterListbox, 1, Len(MyFilterListbox) - 1)
    MyFilterListbox = "accertamenti IN (" & MyFilterListbox & ")"
    end function
    
    Private Function MyFilterDate() as string
    MyFilterDate = "ProssimaVisita>=" & CLng(txtDaData) & " and ProssimaVisita<" & CLng(txtAData) + 1
    end function
    
    Private function MyFiltercbo() as string
    MyFiltercbo = "[ID] = " & Me![CC_Dipendente].Column(0)
    end function
    
    Private Sub btnFilter_Click()
    dim filtro as string
    
    if len(Me!LisAccert & vbnullstring)>0 then filtro = "MyFilterListbox and "
    
    if len(Me!txtDaData & vbnullstring)>0 and len(Me.txtAData & vbnullstring)>0 then filtro = "MyFilterData and "
    if len(Me!CC_Dipendente & vbnullstring)>0 then filtro = "MyFiltercbo and "
    filtro=Mid$(filtro, 1, Len(filtro) - 5)
    
    Me.Filter = filtro
    Me.FilterOn = True
    end sub
    

    Grazie davvero per il tuo impegno ad aiutarmi!!! apprezzo tantissimo!!

    domani, mi ci metto a studiare il codice che mi hai girato (se faccio copia incolla, non imparo :) e poi vedo se funziona o se ci sono dei problemi.

    Ho visto che hai suddiviso in tante fuction… ma non cambia dove inserisco questi codici nel ambiente di debug del VBA, giusto?

  • Re: CASELLE DI RIEPILOGO

    02/07/2023 - Pattygirl ha scritto:


    02/07/2023 - Antony73 ha scritto:


    In effetti quando si opera con più di 2 controlli bisogna cambiare strategia e combinare i filtri a seconda della compilazione dei campi da filtrare.

    Ho scritto senza provare. Ma prova cosi:

    Private Function MyFilterListbox() As String
    Dim varSel As Variant
    For Each varSel In Me.LisAccert.ItemsSelected
      MyFilterListbox= MyFilterListbox & "'" & Me.LisAccert.ItemData(varSel) & "',"
    Next varSel
    MyFilterListbox = Mid$(MyFilterListbox, 1, Len(MyFilterListbox) - 1)
    MyFilterListbox = "accertamenti IN (" & MyFilterListbox & ")"
    end function
    
    Private Function MyFilterDate() as string
    MyFilterDate = "ProssimaVisita>=" & CLng(txtDaData) & " and ProssimaVisita<" & CLng(txtAData) + 1
    end function
    
    Private function MyFiltercbo() as string
    MyFiltercbo = "[ID] = " & Me![CC_Dipendente].Column(0)
    end function
    
    Private Sub btnFilter_Click()
    dim filtro as string
    
    if len(Me!LisAccert & vbnullstring)>0 then filtro = "MyFilterListbox and "
    
    if len(Me!txtDaData & vbnullstring)>0 and len(Me.txtAData & vbnullstring)>0 then filtro = "MyFilterData and "
    if len(Me!CC_Dipendente & vbnullstring)>0 then filtro = "MyFiltercbo and "
    filtro=Mid$(filtro, 1, Len(filtro) - 5)
    
    Me.Filter = filtro
    Me.FilterOn = True
    end sub
    

    Grazie davvero per il tuo impegno ad aiutarmi!!! apprezzo tantissimo!!

    domani, mi ci metto a studiare il codice che mi hai girato (se faccio copia incolla, non imparo :) e poi vedo se funziona o se ci sono dei problemi.

    Ho visto che hai suddiviso in tante fuction… ma non cambia dove inserisco questi codici nel ambiente di debug del VBA, giusto?

    Comunque… …. non funziona ancora. :'(

    Adesso non mi ha proprio filtrato nulla… 

    mi ha dato un errore prima “immettere parametri Myfiltercbo”

  • Re: CASELLE DI RIEPILOGO

    02/07/2023 - Pattygirl ha scritto:


    Ciao… come va ?   ho visto che stai facendo molte cose , bene bene!!!

    Non ho letto tutto tutto ma volevo segnalarti una cosa in riferimento alla combobox

    • se in ORIGINE RIGA hai due campi (colonne) 
      • prima colonna - Id chiave
      • seconda colonna - per esempio il nominativo del Dipendente
    • COLONNA ASSOCIATA devi impostare
      • la colonna 1 contiene l'Id chiave che verrà utilizzato per le operazioni richieste individuando univocamente solo quel nominativo che hai selezionato con la combobox
    • NUMERO COLONNE impostare 2 in quanto abbiamo detto che hai almeno 2 colonne in Origine Riga
    • LARGHEZZA COLONNE
      • questa proprietà consente di dimensionare le due colonne in questione in modo da renderle visibili come desiderato
        • il campo chiave Id imposta 0cm in quanto non ti serve di vederlo e impostandolo a 0 rimane nascosto
        • il campo nominativo dipendente imposta 3cm in modo da poterlo visualizzare e se non lo vedi per intero oppure no, varia la dimensione in cm come meglio desideri
    • LARGHEZZA ELENCO 
      • questa proprietà si imposta di larghezza sufficiente per visualizzare come meglio si desidera la finestra della combobox che si aprirà
        • di norma si calcola la somma delle LARGHEZZE COLONNE e si imposta il totale. In questo caso imposta 3cm, cioè pari alla larghezza della colonna impostata per visualizzare il nominativo del Dipendente 

    Se la ricerca/filtro che devi eseguire non la esegui con la chiave Id ma sulla base del nominativo del dipendente, allora :

    • in Origine Riga , nella Select, non mettere la chiave Id ma solo il nominativo del Dipendente
    • COLONNA ASSOCIATA metterai 1 che corrisponderà alla colonna del nominativo Dipendente
    • NUMERO COLONNE metterai 1 perchè è l'unica colonna che utilizzerai
    • LARGHEZZA COLONNE metterai 3cm, cioè una sola dimensione per l'unica colonna che hai
    • LARGEHZZA ELENCO metterai 3cm, cioè pari alla dimensione dell'unica colonna che hai, oppure una larghezza che meglio desideri

    in ogni caso ricorda sempre che la colonna associata è il numero della colonna, a partire da sinistra della Select in origine riga che rappresenterà il valore di default restituito dalla combobox
    e in visualizzazione della finestra della combobox metterai a 0cm le colonne che non ti interessa visualizza ma che saranno cmq sempre disponibili e reperibili con la combobox.Column(NumeroColonna)

  • Re: CASELLE DI RIEPILOGO

    Si errore mio. correggi cosi nell'evento click del pulsante:

    Private Sub btnFilter_Click()
    dim filtro as string
    
    if len(Me!LisAccert & vbnullstring)>0 then filtro = MyFilterListbox & " and "
    if len(Me!txtDaData & vbnullstring)>0 and len(Me.txtAData & vbnullstring)>0 then filtro = MyFilterData & " and "
    if len(Me!CC_Dipendente & vbnullstring)>0 then filtro = MyFiltercbo & " and "
    
    If filtro <> vbnullstring then
        filtro=Mid$(filtro, 1, Len(filtro) - 5)
        Me.Filter = filtro
        Me.FilterOn = True
    End if
    end sub
Devi accedere o registrarti per scrivere nel forum
85 risposte