VBA funkcija IsDate tariamai nurodo, ar teksto eilutę galima interpretuoti kaip datą. Pavyzdžiui, visos šios išraiškos įvertinamos kaip True:
IsDate („2015-05-25“)
IsDate („sausio 16 d.“)
IsDate („12-1“)
IsDate („12/1/15“)
IsDate („2/30“)
IsDate („30/2“)
Paskutiniuose dviejuose pavyzdžiuose atkreipkite dėmesį, kad IsDate nėra išrankus dienos ir mėnesio tvarkai. Abi šios eilutės gali būti interpretuojamos kaip data, todėl IsDate grąžina True (neatsižvelgiant į jūsų sistemos datos formato nustatymus).
Štai šiek tiek informacijos iš „ Microsoft“ palaikymo straipsnio :
VBA datos funkcijos IsDate, Format, CDate ir CVDate naudoja funkciją, esančią OLE Automation (OleAut32.dll). Ši funkcija ieško visų galimų datos formatų, ženklindama kiekvieną atskirtą reikšmę eilutėje, nurodančioje datą, ir grąžina Būlio reikšmę, nurodant, ar įvestis gali būti pateikta kaip data.
Tai svarbu atsiminti naudojant funkciją interpretuoti datą, kurioje yra 2 skaitmenų metai. Skirtingose lokalėse naudojami įvairūs datos formatai (ty mm/dd/yy, yy/mm/dd, " DD MMM YY " , " YY MMM DD " ir tt), todėl funkcija bando skaitmenis visose pozicijose, kol funkcija rado tinkamą datą arba išnaudojo visas galimybes.
Vien todėl, kad IsDate atpažįsta eilutę kaip datą, dar nereiškia, kad eilutę galima patikimai konvertuoti į datą. Kai kuriais atvejais rezultatas yra dviprasmiškas. Pavyzdžiui, kaip su šia išraiška?
IsDate („29-02-01“)
2001 m. vasario 29 d. nėra tinkama data. Tačiau ši išraiška grąžina True, nes 1929 m. vasario 1 d. (ir 1929 m. sausio 2 d.) yra galiojančios datos. Taip pat tos pačios datos 2029 m.
„IsDate“ dokumentų paieška buvo tuščia. Remiantis bandymais, IsDate kaip skiriamuosius simbolius priima bet kurį iš šių simbolių: pasvirąjį brūkšnį (/), brūkšnelį (-), kablelį (,), tašką (.) ir tarpą.
Todėl visos šios išraiškos grąžina True:
IsDate („5.1“)
IsDate („30 6“)
IsDate („30,6“)
IsDate („1/2“)
Bet tada yra tokia anomalija: Šios išraiškos grąžina True:
IsDate („5.1.5“)
IsDate („5.1.05“)
Tačiau neaiškiai ši išraiška grąžina False:
IsDate ("2005 1 5"
Tarkime, kad sukūrėte vartotojo formą su įvesties laukeliu, kur vartotojas įveda datą. Turėtų būti aišku, kad IsDate naudojimas įrašui patvirtinti nėra labai patikimas.
Viskas dar labiau paini, kai supranti, kad IsDate taip pat apima laiko reikšmes. (Atitinkamos IsTime funkcijos nėra.) Taigi visos šios išraiškos grąžina True:
IsDate („4:45“)
IsDate („4.45“)
IsDate („4 45“)
IsDate („4/45“)
IsDate („23:59“)
Šios išraiškos grąžina klaidingą:
IsDate („4:60“)
IsDate („24.45“)
Svarbu pažymėti, kad IsDate neparodo visų šių keistenybių, kai perduodate diapazono argumentą. Pavyzdžiui:
IsDate (diapazonas (A1))
Atrodo, kad IsDate yra visiškai patikimas nustatant langelius, kuriuose yra data arba laikas. Pavyzdžiui, ji neidentifikuoja langelio, kuriame yra 5.1 kaip data. Jei jūsų kodui reikia nustatyti, ar eilutę galima interpretuoti kaip datą, geriausias sprendimas yra įdėti tą eilutę į langelį ir parašyti kodą, kad patikrintumėte langelio turinį.