La funció IsDate de VBA suposadament us indica si una cadena de text es pot interpretar com una data. Per exemple, totes les expressions següents s'avaluen com a True:
IsDate ("25/5/2015")
IsDate ("16 de gener")
IsDate(“12-1”)
IsDate ("12/1/15")
IsDate ("2/30")
IsDate(“30/2”)
En els dos últims exemples, observeu que IsDate no és exigent amb l'ordre del dia i del mes. Aquestes dues cadenes es podrien interpretar com una data, de manera que IsDate retorna True (independentment de la configuració del format de data del vostre sistema).
Aquí teniu una mica d'informació d'un article de suport de Microsoft :
Les funcions de data VBA IsDate, Format, CDate i CVDate utilitzen una funció que es troba a OLE Automation (OleAut32.dll). Aquesta funció cerca tots els formats de data possibles tokenitzant cadascun dels valors separats a la cadena que representa la data i retorna un valor booleà que indica si l'entrada es pot representar com una data.
Això és important recordar-ho quan utilitzeu la funció per interpretar una data que conté un any de 2 dígits. Les diferents localitzacions utilitzen diversos formats de data (és a dir, mm/dd/aa, aa/mm/dd, " DD MMM AA " , " AA MMM DD " , etc.) i, per tant, la funció prova els dígits en totes les posicions fins que La funció ha trobat una data vàlida o ha esgotat totes les possibilitats.
El fet que IsDate reconegui una cadena com a data no vol dir que la cadena es pugui convertir de manera fiable en una data. En alguns casos, el resultat és ambigu. Per exemple, què passa amb aquesta expressió?
IsDate ("29-feb-01")
El 29 de febrer de 2001 no és una data vàlida. Tanmateix, aquesta expressió retorna True perquè l'1 de febrer de 1929 (i el 2 de gener de 1929) són dates vàlides. I també ho són aquestes mateixes dates el 2029.
Una cerca de documentació IsDate va quedar buida. Segons les proves, IsDate accepta qualsevol dels següents caràcters separadors: una barra inclinada (/), un guionet (-), una coma (,), un punt (.) i un espai.
Per tant, totes les expressions següents retornen True:
IsDate ("5.1")
IsDate(“30 6”)
IsDate(“30,6”)
IsDate ("1/2")
Però després hi ha aquesta anomalia: les expressions següents retornen True:
IsDate ("5.1.5")
IsDate ("5.1.05")
No obstant això, de manera inexplícita, aquesta expressió retorna False:
IsDate ("5.1.2005")
Suposem que heu creat un UserForm amb un InputBox on l'usuari introdueix una data. Ha de quedar clar que utilitzar IsDate per validar l'entrada no és gaire fiable.
Les coses es tornen encara més confuses quan t'adones que IsDate també cobreix els valors de temps. (No hi ha cap funció IsTime corresponent.) Per tant, totes les expressions següents retornen True:
IsDate ("4:45")
IsDate ("4.45")
IsDate ("4 45")
IsDate ("4/45")
IsDate ("23:59")
Aquestes expressions tornen False:
IsDate ("4:60")
IsDate ("24.45")
És important assenyalar que IsDate no mostra totes aquestes peculiaritats quan passeu un argument Range. Per exemple:
IsDate(Interval(“A1”))
Sembla que IsDate és perfectament fiable per identificar cel·les que contenen una data o una hora. No identifica, per exemple, una cel·la que conté 5.1 com a data. Si el vostre codi ha de determinar si una cadena es pot interpretar com una data, la millor solució és posar aquesta cadena en una cel·la i després escriure codi per comprovar el contingut de la cel·la.