La proliferazione di Funzioni poco utili non è una buona tecnica… in questo caso non serve scrivere funzioni per ogni campo… non sono riutilizzabili quindi non servono se non a far rimbalzare il codice…!
Suggerirei poi di usare le funzioni NATIVE per la costruzione dei criteri… [BUILDCRITERIA] ad esempio…!
La ListBox n on si controlla come hai suggerito se ha degli Items selezionati… ma serve contarli…
Private Sub btnFilter_Click()
Dim filtro As string
Dim varSel As Variant
if Me!LisAccert.ItemSelected.Count>0 then
For Each varSel In Me.LisAccert.ItemsSelected
filtro = filtro & "'" & ctl.ItemData(varSel) & "';"
' se il campo è Numerico basta togliere gli apicetti... da privilegiare gli INDICI per queste cose.
' mi chiedo perchè viene usato un Descrittivo invece che un Campo Indicizzato per questo...?
Next varSel
filtro = Mid$(filtro, 1, Len(filtro) - 1)
filtro = "IN (" & filtro & ")"
filtro=BuildCriteria("accertamenti",dbText, filtro) & " AND "
End if
if len(Me!txtDaData & vbnullstring)>0 and len(Me.txtAData & vbnullstring)>0 then
filtro = & filtro & BuildCriteria("ProssimaVisita",dbdate,"Between " & Me!txtDaData & " AND " & Me!txtAData) & " AND "
End if
if len(Me!CC_Dipendente & vbnullstring)>0 then
filtro = filtro & "[ID] = " & Me![CC_Dipendente].Column(0) & " AND "
End if
If filtro <> vbnullstring then
filtro=Mid$(filtro, 1, Len(filtro) - 5)
Me.Filter = filtro
Me.FilterOn = True
Else
Me.FilterOn = False
End if
end sub
Per il resto penso sempre che il codice riutilizzabile sia un MUST…