Video: Snyggaste diagrammet för procent i Excel? 2024
VBAs IsDate-funksjon forteller deg om en tekststreng kan tolkes som en dato. For eksempel vurderer alle følgende uttrykk til True:
IsDate ("5/25/2015") IsDate ("16 januar") IsDate ("12-1") IsDate ("12/1/15") IsDate ("2/30") IsDate ("30/2")
I de to siste eksemplene merker du at IsDate ikke er kresen om dagens og månedens rekkefølge. Begge disse strengene kan tolkes som en dato, så IsDate returnerer True (uavhengig av innstillingene for systemdatoformatet).
Her er noen opplysninger fra en Microsoft Support-artikkel:
VBA-datofunksjonene IsDate, Format, CDate og CVDate benytter en funksjon som finnes i OLE Automation (OleAut32. DLL). Denne funksjonen søker etter alle mulige datoformater ved å tokenisere hver av de separerte verdiene i strengen som representerer datoen, og returnerer en boolsk verdi som angir om inngangen kan representeres som en dato.
Dette er viktig å huske når du bruker funksjonen til å tolke en dato som inneholder et 2-sifret år. Ulike lokaler bruker forskjellige datoformater (det vil si, mm / dd / yy, yy / mm / dd, " DD MMM YY " , " YY MMM DD " osv.) Og derfor forsøker funksjonen sifrene i alle posisjoner til funksjonen har funnet en gyldig dato eller utmattet alle muligheter.
Bare fordi IsDate gjenkjenner en streng som en dato, betyr det ikke at strengen kan konverteres pålitelig til en dato. I noen tilfeller er resultatet tvetydig. For eksempel, hva med dette uttrykket?
IsDate ("29 feb-01")
29 februar 2001 er ikke en gyldig dato. Dette uttrykket returnerer imidlertid True fordi 1. februar 1929 (og 2. januar 1929) er gyldige datoer. Og det samme er de samme datoene i 2029.
Et søk etter IsDate-dokumentasjonen kom opp tom. Basert på testing aksepterer IsDate noen av de følgende som separator tegn: et skråstrek (/), en bindestrek (-), et komma (,), en prikk (.) Og et mellomrom.
Derfor returnerer følgende uttrykk alle True:
IsDate ("5. 1") IsDate ("30 6") IsDate ("30, 6") IsDate ("1/2")
Men da er det denne uregelmessigheten: Følgende uttrykk returnerer True:
IsDate ("5. 1. 5") IsDate ("5. 1. 05")
Dette uttrykket returnerer imidlertid uforfalsket False:
IsDate ("5. 1. 2005")
Anta at du opprettet en UserForm med en InputBox der brukeren skriver inn en dato. Det skal være klart at bruk av IsDate for å validere oppføringen er ikke veldig pålitelig.
Ting blir enda mer forvirrende når du innser at IsDate også dekker tidsverdier. (Det er ingen tilsvarende IsTime-funksjon.) Så, returnerer følgende uttrykk alle: True:
IsDate ("4: 45") IsDate ("4. 45") IsDate ("4 45") IsDate ") IsDate (" 23: 59 ")
Disse uttrykkene returnerer False:
IsDate (" 4: 60 ") IsDate (" 24. 45 ")
Det er viktig å påpeke at IsDate ikke Vis alle disse kjennskapene når du bestiller et Range-argument. For eksempel:
IsDate (Range ("A1"))
Det ser ut til at IsDate er helt pålitelig for å identifisere celler som inneholder en dato eller en tid. Det identifiserer for eksempel ikke en celle som inneholder 5. 1 som en dato. Hvis koden din trenger å bestemme om en streng kan tolkes som en dato, er den beste løsningen å sette denne strengen i en celle, og skriv deretter kode for å sjekke innholdet i cellen.