VBA IsDate funktsioon väidetavalt ütleb teile, kas tekstistringi saab tõlgendada kuupäevana. Näiteks kõik järgmised avaldised on tõesed:
IsDate (“25/5/2015”)
IsDate (“16. jaanuar”)
IsDate (“12-1”)
IsDate (“12/1/15”)
IsDate (“2/30”)
IsDate (“30/2”)
Kahes viimases näites pange tähele, et IsDate ei ole päeva ja kuu järjestuse osas valiv. Mõlemat stringi saab tõlgendada kuupäevana, nii et IsDate tagastab väärtuse True (olenemata teie süsteemi kuupäevavormingu sätetest).
Siin on teavet Microsofti toe artiklist :
VBA kuupäevafunktsioonid IsDate, Format, CDate ja CVDate kasutavad OLE Automationis (OleAut32.dll) leiduvat funktsiooni. See funktsioon otsib kõiki võimalikke kuupäevavorminguid, märgistades iga eraldatud väärtuse kuupäeva tähistavas stringis, ja tagastab Boole'i väärtuse, mis näitab, kas sisendit saab esitada kuupäevana.
Seda on oluline meeles pidada, kui kasutate funktsiooni kahekohalist aastat sisaldava kuupäeva tõlgendamiseks. Erinevad asukohad kasutavad erinevaid kuupäevavorminguid (st kk/pp/aa, yy/mm/dd, “ DD MMM YY ” , “ YY KMM DD ” jne) ja seetõttu proovib funktsioon numbreid kõikides kohtades, kuni funktsioon on leidnud kehtiva kuupäeva või ammendanud kõik võimalused.
See, et IsDate tunneb stringi kuupäevana ära, ei tähenda, et stringi saab usaldusväärselt kuupäevaks teisendada. Mõnel juhul on tulemus ebaselge. Kuidas on näiteks selle väljendiga?
IsDate ("29-veebruar-01")
29. veebruar 2001 ei ole kehtiv kuupäev. See avaldis tagastab aga väärtuse Tõene, sest 1. veebruar 1929 (ja 2. jaanuar 1929) on kehtivad kuupäevad. Ja samad kuupäevad on ka 2029. aastal.
IsDate'i dokumentatsiooni otsing tuli tühjaks. Testimise põhjal aktsepteerib IsDate eraldusmärkidena mis tahes järgmist: kaldkriips (/), sidekriips (-), koma (,), punkt (.) ja tühik.
Seetõttu tagastavad kõik järgmised avaldised Tõene:
IsDate (“5.1”)
IsDate ("30 6")
IsDate ("30,6")
IsDate (“1/2”)
Aga siis on see anomaalia: järgmised avaldised tagastavad väärtuse Tõene:
IsDate (“5.1.5”)
IsDate (“5.1.05”)
Kuid eksplitsiitselt tagastab see väljend väärtuse Väär:
IsDate (“5.1.2005”)
Oletame, et lõite kasutajavormi sisestuskastiga, kuhu kasutaja sisestab kuupäeva. Peaks olema selge, et IsDate'i kasutamine kirje kinnitamiseks ei ole väga usaldusväärne.
Asjad lähevad veelgi segasemaks, kui mõistate, et IsDate hõlmab ka ajaväärtusi. (Puudub vastav IsTime funktsioon.) Seega tagastavad järgmised avaldised kõik tõene:
IsDate ("4:45")
IsDate ("4,45")
IsDate ("4 45")
IsDate ("4/45")
IsDate ("23:59")
Need väljendid tagastavad vale:
IsDate ("4:60")
IsDate (“24.45”)
Oluline on märkida, et IsDate ei näita kõiki neid veidrusi, kui läbite vahemiku argumendi. Näiteks:
IsDate (vahemik (A1))
Tundub, et IsDate on kuupäeva või kellaaega sisaldavate lahtrite tuvastamisel täiesti usaldusväärne. See ei tuvasta näiteks lahtrit, mis sisaldab kuupäevana 5.1. Kui teie kood peab kindlaks määrama, kas stringi saab tõlgendada kuupäevana, on parim lahendus panna see string lahtrisse ja seejärel kirjutada lahtri sisu kontrollimiseks kood.