Funksioni IsDate i VBA supozohet se ju tregon nëse një varg teksti mund të interpretohet si datë. Për shembull, të gjitha shprehjet e mëposhtme vlerësohen në True:
IsDate (“5/25/2015”)
IsDate (“16 janar”)
IsDate ("12-1")
IsDate (“12/1/15”)
IsDate (“2/30”)
IsDate (“30/2”)
Në dy shembujt e fundit, vini re se IsDate nuk është zgjedhës për rendin e ditës dhe muajit. Të dyja këto vargje mund të interpretohen si një datë, kështu që IsDate kthen True (pavarësisht nga cilësimet e formatit të datës së sistemit tuaj).
Këtu janë disa informacione nga një artikull i Mbështetjes së Microsoft :
Funksionet e datës VBA IsDate, Format, CDate dhe CVDate përdorin një funksion që gjendet në OLE Automation (OleAut32.dll). Ky funksion kërkon të gjitha formatet e mundshme të datës duke shënjuar secilën nga vlerat e ndara në vargun që përfaqëson datën dhe kthen një vlerë Boolean që tregon nëse hyrja mund të përfaqësohet si datë.
Kjo është e rëndësishme të mbani mend kur përdorni funksionin për të interpretuar një datë që përmban një vit 2 shifror. Lokale të ndryshme përdorin formate të ndryshme datash (d.m.th., mm/dd/vv, yy/mm/dd, “ DD MMM YY ” , “ YY MMM DD ” dhe kështu me radhë) dhe për këtë arsye funksioni provon shifrat në të gjitha pozicionet derisa funksioni ka gjetur një datë të vlefshme ose ka shteruar të gjitha mundësitë.
Vetëm për shkak se IsDate njeh një varg si datë nuk do të thotë se vargu mund të konvertohet në mënyrë të besueshme në një datë. Në disa raste, rezultati është i paqartë. Për shembull, po në lidhje me këtë shprehje?
IsDate (“29-shkurt-01”)
29 shkurt 2001 nuk është një datë e vlefshme. Megjithatë, kjo shprehje kthehet e vërtetë sepse 1 shkurti 1929 (dhe 2 janari 1929) janë data të vlefshme. Dhe kështu janë të njëjtat data në 2029.
Një kërkim për dokumentacionin IsDate doli bosh. Bazuar në testimin, IsDate pranon ndonjë nga të mëposhtmet si karaktere ndarëse: një vijë e pjerrët (/), një vijë ndarëse (-), një presje (,), një pikë (.) dhe një hapësirë.
Prandaj, shprehjet e mëposhtme kthehen të gjitha të vërteta:
IsDate ("5.1")
IsDate (“30 6”)
IsDate ("30,6")
IsDate (“1/2”)
Por pastaj është kjo anomali: Shprehjet e mëposhtme kthehen në të vërtetë:
IsDate ("5.1.5")
IsDate ("5.1.05")
Sidoqoftë, në mënyrë të pashpjegueshme, kjo shprehje kthen False:
IsDate (“5.1.2005”)
Supozoni se keni krijuar një UserForm me një InputBox ku përdoruesi fut një datë. Duhet të jetë e qartë se përdorimi i IsDate për të vërtetuar hyrjen nuk është shumë i besueshëm.
Gjërat bëhen edhe më konfuze kur kupton se IsDate mbulon edhe vlerat kohore. (Nuk ka asnjë funksion përkatës IsTime.) Pra, shprehjet e mëposhtme kthehen të gjitha True:
IsDate (“4:45”)
IsDate ("4.45")
IsDate ("4 45")
IsDate (“4/45”)
IsDate (“23:59”)
Këto shprehje kthejnë False:
IsDate (“4:60”)
IsDate ("24.45")
Është e rëndësishme të theksohet se IsDate nuk i shfaq të gjitha këto veçori kur kaloni një argument Range. Për shembull:
IsDate (Rapsi ("A1"))
Duket se IsDate është krejtësisht i besueshëm në identifikimin e qelizave që përmbajnë një datë ose një orë. Për shembull, nuk identifikon një qelizë që përmban 5.1 si datë. Nëse kodi juaj duhet të përcaktojë nëse një varg mund të interpretohet si datë, zgjidhja më e mirë është ta vendosni atë varg në një qelizë dhe më pas të shkruani kodin për të kontrolluar përmbajtjen e qelizës.