VBA-jeva funkcija IsDate naj bi vam povedala, ali je besedilni niz mogoče razlagati kot datum. Na primer, vsi naslednji izrazi se ocenijo kot True:
IsDate(»25.5.2015«)
IsDate (»16. januar«)
IsDate (»12-1«)
IsDate (»12/1/15«)
IsDate (»2/30«)
IsDate (»30/2«)
V zadnjih dveh primerih opazite, da IsDate ni izbirčen glede vrstnega reda dneva in meseca. Oba niza je mogoče razlagati kot datum, zato IsDate vrne True (ne glede na vaše sistemske nastavitve oblike datuma).
Tukaj je nekaj informacij iz članka o Microsoftovi podpori :
Datumske funkcije VBA IsDate, Format, CDate in CVDate uporabljajo funkcijo, ki jo najdemo v OLE Automation (OleAut32.dll). Ta funkcija išče vse možne formate datuma tako, da označi vsako od ločenih vrednosti v nizu, ki predstavlja datum, in vrne logično vrednost, ki označuje, ali je vnos mogoče predstaviti kot datum.
To je pomembno upoštevati pri uporabi funkcije za razlago datuma, ki vsebuje dvomestno leto. Različni jeziki uporabljajo različne formate datuma (to so mm/dd/ll, yy/mm/dd, “ DD MMM YY ” , “ YY MMM DD ” in tako naprej) in zato funkcija preizkuša števke na vseh položajih, dokler ne funkcija je našla veljaven datum ali je izčrpala vse možnosti.
Samo zato, ker IsDate prepozna niz kot datum, še ne pomeni, da je niz mogoče zanesljivo pretvoriti v datum. V nekaterih primerih je rezultat dvoumen. Kaj pa na primer ta izraz?
IsDate (»29-feb-01«)
29. februar 2001 ni veljaven datum. Vendar ta izraz vrne True, ker sta 1. februar 1929 (in 2. januar 1929) veljavna datuma. In tudi ti isti datumi v letu 2029.
Iskanje dokumentacije IsDate je bilo prazno. Na podlagi testiranja IsDate sprejme katero koli od naslednjih znakov kot ločilne znake: poševnico (/), vezaj (-), vejico (,), piko (.) in presledek.
Zato vsi naslednji izrazi vrnejo True:
IsDate (»5.1«)
IsDate (»30 6«)
IsDate(»30,6«)
IsDate (»1/2«)
Toda tu je še ta anomalija: naslednji izrazi vrnejo True:
IsDate(»5.1.5«)
IsDate(»5.1.05«)
Vendar ta izraz neeksplicitno vrne False:
IsDate (»5.1.2005«)
Recimo, da ste ustvarili uporabniški obrazec z InputBox, kjer uporabnik vnese datum. Jasno bi moralo biti, da uporaba IsDate za potrditev vnosa ni zelo zanesljiva.
Stvari postanejo še bolj zmedene, ko ugotovite, da IsDate zajema tudi časovne vrednosti. (Ni ustrezne funkcije IsTime.) Torej vsi naslednji izrazi vrnejo True:
IsDate (»4:45«)
IsDate (»4,45«)
IsDate (»4 45«)
IsDate (»4/45«)
IsDate (»23:59«)
Ti izrazi vrnejo False:
IsDate (»4:60«)
IsDate (»24,45«)
Pomembno je poudariti, da IsDate ne kaže vseh teh nenavadnosti, ko posredujete argument Range. Na primer:
IsDate(Obseg(»A1«))
Zdi se, da je IsDate popolnoma zanesljiv pri prepoznavanju celic, ki vsebujejo datum ali čas. Ne identificira na primer celice, ki vsebuje 5.1 kot datum. Če mora vaša koda ugotoviti, ali je niz mogoče razlagati kot datum, je najboljša rešitev, da ta niz vstavite v celico in nato napišete kodo za preverjanje vsebine celice.