ВБА-ова ИсДате функција вам наводно говори да ли се текстуални низ може тумачити као датум. На пример, сви следећи изрази имају вредност Тачно:
ИсДате(„25.5.2015.“)
ИсДате („16. јануар“)
ИсДате(“12-1”)
ИсДате(“12/1/15”)
ИсДате(“2/30”)
ИсДате(“30/2”)
У последња два примера, приметите да ИсДате није избирљив у погледу редоследа дана и месеца. Оба ова низа могу се протумачити као датум, тако да ИсДате враћа Труе (без обзира на поставке формата датума у вашем систему).
Ево неких информација из чланка Мицрософт подршке :
ВБА функције датума ИсДате, Формат, ЦДате и ЦВДате користе функцију која се налази у ОЛЕ Аутоматион (ОлеАут32.длл). Ова функција претражује све могуће формате датума тако што токенизује сваку од одвојених вредности у низу који представља датум и враћа Булову вредност која показује да ли се унос може представити као Датум.
Ово је важно запамтити када користите функцију за тумачење датума који садржи двоцифрену годину. Различити локалитети користе различите формате датума (тј. мм/дд/гг, ии/мм/дд, “ ДД МММ ИИ ” , “ ИИ МММ ДД ” и тако даље) и стога функција покушава цифре на свим позицијама док не функција је нашла важећи датум или је исцрпела све могућности.
Само зато што ИсДате препознаје стринг као датум не значи да се стринг може поуздано конвертовати у датум. У неким случајевима, резултат је двосмислен. На пример, шта је са овим изразом?
ИсДате(“29-феб-01”)
29. фебруар 2001. није важећи датум. Међутим, овај израз враћа Тачно јер су 1. фебруар 1929. (и 2. јануар 1929.) важећи датуми. И ти исти датуми у 2029.
Претрага ИсДате документације је била празна. На основу тестирања, ИсДате прихвата било који од следећих знакова за раздвајање: косу црту (/), цртицу (-), зарез (,), тачку (.) и размак.
Према томе, сви следећи изрази враћају Тачно:
ИсДате(“5.1”)
ИсДате(“30 6”)
ИсДате(“30,6”)
ИсДате(“1/2”)
Али онда постоји ова аномалија: следећи изрази враћају Тачно:
ИсДате(“5.1.5”)
ИсДате(“5.1.05”)
Међутим, неексплицитно, овај израз враћа Фалсе:
ИсДате(“5.1.2005”)
Претпоставимо да сте креирали кориснички образац са ИнпутБок-ом где корисник уноси датум. Требало би бити јасно да коришћење ИсДате-а за валидацију уноса није баш поуздано.
Ствари постају још збуњујуће када схватите да ИсДате такође покрива временске вредности. (Не постоји одговарајућа ИсТиме функција.) Дакле, сви следећи изрази враћају Тачно:
ИсДате(“4:45”)
ИсДате(“4.45”)
ИсДате(“4 45”)
ИсДате(“4/45”)
ИсДате(“23:59”)
Ови изрази враћају Фалсе:
ИсДате(“4:60”)
ИсДате(“24.45”)
Важно је истаћи да ИсДате не показује све ове карактеристике када проследите аргумент Ранге. На пример:
ИсДате(Опсег(“А1”))
Чини се да је ИсДате савршено поуздан у идентификацији ћелија које садрже датум или време. Не идентификује, на пример, ћелију која садржи 5.1 као датум. Ако ваш код треба да утврди да ли се стринг може тумачити као датум, најбоље решење је да тај стринг ставите у ћелију, а затим напишете код да проверите садржај ћелије.