Funkcia IsDate VBA vám údajne povie, či je možné textový reťazec interpretovať ako dátum. Napríklad všetky nasledujúce výrazy sa vyhodnotia ako True:
IsDate(“25. 5. 2015”)
IsDate(“16. január”)
IsDate(“12-1”)
IsDate(“12/1/15”)
IsDate(“2/30”)
IsDate(“30/2”)
V posledných dvoch príkladoch si všimnite, že IsDate nie je vyberavý, pokiaľ ide o poradie dňa a mesiaca. Oba tieto reťazce možno interpretovať ako dátum, takže IsDate vráti hodnotu True (bez ohľadu na vaše systémové nastavenia formátu dátumu).
Tu je niekoľko informácií z článku podpory spoločnosti Microsoft :
Funkcie dátumu VBA IsDate, Format, CDate a CVDate využívajú funkciu nachádzajúcu sa v OLE Automation (OleAut32.dll). Táto funkcia vyhľadáva všetky možné formáty dátumu tak, že tokenizuje každú z oddelených hodnôt v reťazci predstavujúcom dátum a vráti boolovskú hodnotu označujúcu, či je možné vstup reprezentovať ako dátum.
Toto je dôležité mať na pamäti pri používaní funkcie na interpretáciu dátumu, ktorý obsahuje 2-ciferný rok. Rôzne miestne nastavenia používajú rôzne formáty dátumu (t. j. mm/dd/rr, rr/mm/dd, „ DD MMM RR “ , „ RR MMM DD “ atď.), a preto funkcia skúša číslice na všetkých pozíciách, kým sa funkcia našla platný dátum alebo vyčerpala všetky možnosti.
To, že IsDate rozpoznáva reťazec ako dátum, neznamená, že reťazec možno spoľahlivo previesť na dátum. V niektorých prípadoch je výsledok nejednoznačný. Ako je to napríklad s týmto výrazom?
IsDate(“29-Feb-01”)
29. február 2001 nie je platný dátum. Tento výraz však vráti hodnotu True, pretože 1. február 1929 (a 2. január 1929) sú platnými dátumami. A rovnaké sú tie isté dátumy v roku 2029.
Hľadanie dokumentácie IsDate bolo prázdne. Na základe testovania, IsDate akceptuje ľubovoľné z nasledujúcich znakov ako oddeľovacie znaky: lomku (/), spojovník (-), čiarku (,), bodku (.) a medzeru.
Preto všetky nasledujúce výrazy vrátia hodnotu True:
IsDate(“5.1”)
IsDate(“30 6”)
IsDate(“30,6”)
IsDate(“1/2”)
Ale potom je tu táto anomália: Nasledujúce výrazy vrátia hodnotu True:
IsDate(“5.1.5”)
IsDate(“5.1.05”)
Neexplicitne však tento výraz vráti hodnotu False:
IsDate(“5.1.2005”)
Predpokladajme, že ste vytvorili UserForm s InputBox, kde používateľ zadá dátum. Malo by byť jasné, že použitie IsDate na overenie záznamu nie je veľmi spoľahlivé.
Veci sú ešte mätúce, keď si uvedomíte, že IsDate zahŕňa aj časové hodnoty. (Neexistuje žiadna zodpovedajúca funkcia IsTime.) Všetky nasledujúce výrazy teda vrátia hodnotu True:
IsDate(“4:45”)
IsDate(“4.45”)
IsDate(“4 45”)
IsDate(“4/45”)
IsDate(“23:59”)
Tieto výrazy vrátia hodnotu False:
IsDate(“4:60”)
IsDate(“24.45”)
Je dôležité zdôrazniť, že IsDate nevykazuje všetky tieto zvláštnosti, keď prejdete argumentom Range. Napríklad:
IsDate(Rozsah(“A1”))
Zdá sa, že IsDate je dokonale spoľahlivý pri identifikácii buniek, ktoré obsahujú dátum alebo čas. Neidentifikuje napríklad bunku, ktorá obsahuje 5.1 ako dátum. Ak váš kód potrebuje určiť, či je možné reťazec interpretovať ako dátum, najlepším riešením je vložiť tento reťazec do bunky a potom napísať kód na kontrolu obsahu bunky.