Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Ho desistito, lo faccio manualmente! Troppo complicato! Grazie lo stesso a tutti!!!
Ripeto che: le date sono date e il testo è testo. Non puoi confrontarli in VB. Quindi, nelle ComboDox/TextBox/listBox hai del testo, non una data. Inoltre, vb se converte *da solo* il testo in data, fa quello che gli hanno insegnato, lo converte in una data USA, quindi nel formato mm/dd/yyyy.
CDate(TestoValido) serve appunto per trasformare il testo in una data, una data valida per la localizzazione che c'è su quella macchina, nel nostro caso dd/mm/yyyy, e la stessa cosa la ottieni con Format(Testo,Formattazione).
Esempio semplice semplice. Fai girare la macro qui sotto:
Public Sub m()
Dim s As String
s = "05/01/2014"
With ActiveSheet
.Range("A1").Value = s
.Range("A2").Value = Format(s, "dd/mm/yyyy")
.Range("A3").Value = Format(s, "mm/dd/yyyy")
.Range("A4").Value = CDate(s)
End With
End Sub
Assumendo che s sia la data presente in una ComboDox/TextBox/listBox (che ti ricordo è testo), vedi come quel testo viene trasformato in una data differente a seconda del codice che utilizzi. Come puoi vedere, in A1 e A2 hai una cosa non congrua.
Se devi filtrare un intervallo di date, devi tenere conto di quanto sopra. Se mentre filtri registri una macro, ottieni un codice tipo questo:
ActiveSheet.Range("$A$1:$A$17").AutoFilter Field:=1, Criteria1:= _
">=02/01/2014", Operator:=xlAnd, Criteria2:="<=05/01/2014"
Ma. se vai poi ad eseguire la macro, non ottieni quello che vuoi. Come dicevo prima,un conto è Excel, un conto è il vb. Quello che hai registrato, quando andrai a rieseguirlo verrà interpretato male.
In questo caso specifico il codice corretto sarebbe:
ActiveSheet.Range("$A$1:$A$17").AutoFilter Field:=1, _
Criteria1:=">=" & Format("02/01/2014", "mm/dd/yyyy"), _
Operator:=xlAnd, _
Criteria2:="<=" & Format("05/01/2014", "mm/dd/yyyy")
(sto filtrando la colonna A per un intervallo di date).
Al posto delle due date, puoi passare il Text di ComboDox/TextBox/listBox, esempio:
Criteria1:=">=" & Format(ComboBox1.Text, "mm/dd/yyyy")