VBA-ova IsDate funkcija navodno vam govori može li se tekstualni niz protumačiti kao datum. Na primjer, svi sljedeći izrazi imaju vrijednost True:
IsDate(“25.5.2015.”)
IsDate ("16. siječnja")
IsDate(“12-1”)
IsDate(“12/1/15”)
IsDate(“2/30”)
IsDate(“30/2”)
U posljednja dva primjera primijetite da IsDate nije izbirljiv u pogledu redoslijeda dana i mjeseca. Oba ova niza mogu se protumačiti kao datum, pa IsDate vraća True (bez obzira na postavke formata datuma u vašem sustavu).
Evo nekih informacija iz članka Microsoftove podrške :
VBA funkcije datuma IsDate, Format, CDate i CVDate koriste funkciju koja se nalazi u OLE Automation (OleAut32.dll). Ova funkcija pretražuje sve moguće formate datuma tokenizirajući svaku od odvojenih vrijednosti u nizu koji predstavlja datum i vraća Booleovu vrijednost koja pokazuje može li se unos predstaviti kao datum.
Ovo je važno zapamtiti kada koristite funkciju za tumačenje datuma koji sadrži dvoznamenkastu godinu. Različiti lokaliteti koriste različite formate datuma (tj. mm/dd/gg, yy/mm/dd, “ DD MMM YY ” , “ YY MMM DD ” i tako dalje) i stoga funkcija pokušava znamenke na svim pozicijama dok ne funkcija je pronašla valjani datum ili je iscrpila sve mogućnosti.
Samo zato što IsDate prepoznaje niz kao datum ne znači da se niz može pouzdano pretvoriti u datum. U nekim slučajevima, rezultat je dvosmislen. Na primjer, što je s ovim izrazom?
IsDate(“29-veljače-01”)
29. veljače 2001. nije valjan datum. Međutim, ovaj izraz vraća True jer su 1. veljače 1929. (i 2. siječnja 1929.) valjani datumi. I ti isti datumi u 2029.
Potraga za dokumentacijom IsDate bila je prazna. Na temelju testiranja, IsDate prihvaća bilo koji od sljedećih znakova za razdvajanje: kosu crtu (/), crticu (-), zarez (,), točku (.) i razmak.
Stoga svi sljedeći izrazi vraćaju True:
IsDate(“5.1”)
IsDate(“30 6”)
IsDate(“30,6”)
IsDate(“1/2”)
Ali tu je i ova anomalija: Sljedeći izrazi vraćaju True:
IsDate(“5.1.5”)
IsDate(“5.1.05”)
Međutim, neeksplicitno, ovaj izraz vraća False:
IsDate(“5.1.2005”)
Pretpostavimo da ste kreirali korisnički obrazac s poljem za unos u koji korisnik unosi datum. Trebalo bi biti jasno da korištenje IsDatea za provjeru valjanosti unosa nije baš pouzdano.
Stvari postaju još zbunjujuće kada shvatite da IsDate također pokriva vremenske vrijednosti. (Ne postoji odgovarajuća funkcija IsTime.) Dakle, svi sljedeći izrazi vraćaju True:
IsDate(“4:45”)
IsDate(“4.45”)
IsDate(“4 45”)
IsDate(“4/45”)
IsDate(“23:59”)
Ovi izrazi vraćaju False:
IsDate(“4:60”)
IsDate(“24.45”)
Važno je istaknuti da IsDate ne pokazuje sve ove nedoumice kada proslijedite argument Range. Na primjer:
IsDate(Raspon(“A1”))
Čini se da je IsDate savršeno pouzdan u identificiranju ćelija koje sadrže datum ili vrijeme. Ne identificira, na primjer, ćeliju koja sadrži 5.1 kao datum. Ako vaš kod treba utvrditi može li se niz protumačiti kao datum, najbolje rješenje je staviti taj niz u ćeliju, a zatim napisati kod za provjeru sadržaja ćelije.