Предполага се, че функцията IsDate на VBA ви казва дали текстов низ може да се интерпретира като дата. Например, всички от следните изрази се оценяват на True:
IsDate(„25.5.2015 г.“)
IsDate („16 януари“)
IsDate(“12-1”)
IsDate(“12/1/15”)
IsDate(„2/30“)
IsDate(“30/2”)
В последните два примера забележете, че IsDate не е придирчив към реда на деня и месеца. И двата низа могат да бъдат интерпретирани като дата, така че IsDate връща True (независимо от настройките за формат на датата в системата ви).
Ето малко информация от статия за поддръжка на Microsoft :
Функциите за дата на VBA IsDate, Format, CDate и CVDate използват функция, открита в OLE Automation (OleAut32.dll). Тази функция търси всички възможни формати за дата, като токенизира всяка от отделните стойности в низа, представляващ датата, и връща булева стойност, показваща дали входът може да бъде представен като дата.
Това е важно да запомните, когато използвате функцията за интерпретиране на дата, която съдържа 2-цифрена година. Различните локали използват различни формати за дата (тоест mm/dd/yy, yy/mm/dd, “ DD MMM YY ” , “ YY MMM DD ” и т.н.) и следователно функцията изпробва цифрите във всички позиции, докато функцията е намерила валидна дата или е изчерпала всички възможности.
Само защото IsDate разпознава низ като дата, не означава, че низът може надеждно да бъде преобразуван в дата. В някои случаи резултатът е двусмислен. Например, какво ще кажете за този израз?
IsDate(“29-фев-01”)
29 февруари 2001 г. не е валидна дата. Този израз обаче връща True, защото 1 февруари 1929 г. (и 2 януари 1929 г.) са валидни дати. И същите тези дати през 2029 г.
Търсенето на документация за IsDate се оказа празно. Въз основа на тестване, IsDate приема някое от следните като разделителни знаци: наклонена черта (/), тире (-), запетая (,), точка (.) и интервал.
Следователно всички следните изрази връщат True:
IsDate(“5.1”)
IsDate(“30 6”)
IsDate(“30,6”)
IsDate(“1/2”)
Но има и тази аномалия: Следните изрази връщат True:
IsDate(“5.1.5”)
IsDate(“5.1.05”)
Въпреки това, неясно, този израз връща False:
IsDate(„5.1.2005“)
Да предположим, че сте създали UserForm с InputBox, където потребителят въвежда дата. Трябва да е ясно, че използването на IsDate за валидиране на записа не е много надеждно.
Нещата стават още по-объркващи, когато разберете, че IsDate покрива и времеви стойности. (Няма съответна функция IsTime.) Така че всички следните изрази връщат True:
IsDate(“4:45”)
IsDate(„4.45“)
IsDate(“4 45”)
IsDate(“4/45”)
IsDate („23:59“)
Тези изрази връщат False:
IsDate(„4:60“)
IsDate(„24.45“)
Важно е да се отбележи, че IsDate не показва всички тези странности, когато предавате аргумент Range. Например:
IsDate(Обхват(“A1”))
Изглежда, че IsDate е напълно надежден при идентифициране на клетки, които съдържат дата или час. Той например не идентифицира клетка, която съдържа 5.1 като дата. Ако вашият код трябва да определи дали низ може да се интерпретира като дата, най-доброто решение е да поставите този низ в клетка и след това да напишете код, за да проверите съдържанието на клетката.