Video: Excel Eğitim Dersleri 1 - Yeni Başlayanlar İçin Excel'in Mantığı 2024
De functie IsDate van VBA vertelt je vermoedelijk of een tekstreeks kan worden geïnterpreteerd als een datum. Alle volgende expressies evalueren bijvoorbeeld naar True:
IsDate ("5/25/2015") IsDate ("January 16") IsDate ("12-1") IsDate ("12/12/15") IsDate ("2/30") IsDate ("30/2")
Merk in de laatste twee voorbeelden op dat IsDate niet kieskeurig is over de volgorde van de dag en de maand. Beide strings kunnen worden geïnterpreteerd als een datum, dus IsDate retourneert True (ongeacht de instellingen voor de systeemdatumindeling).
Hier is wat informatie uit een Microsoft Support-artikel:
De VBA-datumfuncties IsDate, Format, CDate en CVDate maken gebruik van een functie die wordt gevonden in OLE Automation (OleAut32. Dll). Met deze functie wordt gezocht naar alle mogelijke datumnotaties door elk van de gescheiden waarden in de tekenreeks die de datum vertegenwoordigt te symboliseren en wordt een Booleaanse waarde geretourneerd die aangeeft of de invoer kan worden weergegeven als een datum.
Dit is belangrijk om te onthouden wanneer u de functie gebruikt om een datum te interpreteren die een jaar met twee cijfers bevat. Verschillende landinstellingen gebruiken verschillende datumnotaties (d.w.z. mm / dd / jj, jj / mm / dd, " DD MMM JJ " , " JJ MMM DD " , enzovoort) en daarom probeert de functie de cijfers in alle posities totdat de functie een geldige datum heeft gevonden of alle mogelijkheden heeft uitgeput.
Alleen omdat IsDate een tekenreeks als datum herkent, betekent niet dat de tekenreeks op betrouwbare wijze kan worden geconverteerd naar een datum. In sommige gevallen is het resultaat dubbelzinnig. Wat bijvoorbeeld met deze uitdrukking?
IsDate ("29-feb-01")
29 februari 2001 is geen geldige datum. Deze expressie geeft echter Waar als resultaat, omdat 1 februari 1929 (en 2 januari 1929) geldige datums zijn. En zo zijn diezelfde datums in 2029.
Daarom retourneren de volgende uitdrukkingen allemaal True:
IsDate ("5. 1") IsDate ("30 6") IsDate ("30, 6") IsDate ("1/2")
dan is er een anomalie: de volgende uitdrukkingen geven Waar terug:
IsDate ("5. 1. 5") IsDate ("5..1 05")
Echter, impliciet geeft deze uitdrukking False:
IsDate ("5. 1. 2005")
Stel dat u een UserForm hebt gemaakt met een invoerbox waar de gebruiker een datum invoert. Het moet duidelijk zijn dat het gebruik van IsDate om de invoer te valideren niet erg betrouwbaar is.
Dingen worden nog meer verwarrend wanneer je je realiseert dat IsDate ook tijdswaarden dekt. (Er is geen overeenkomstige IsTime-functie.) Dus, de volgende uitdrukkingen keren allemaal True terug:
IsDate ("4: 45") IsDate ("4. 45") IsDate ("4 45") IsDate ("4/45 ") IsDate (" 23: 59 ")
Deze uitdrukkingen geven False terug:
IsDate (" 4: 60 ") IsDate (" 24. 45 ")
Het is belangrijk om erop te wijzen dat IsDate niet toon al deze eigenaardigheden wanneer u een Range-argument doorgeeft. Bijvoorbeeld:
IsDate (bereik ("A1"))
Het lijkt erop dat IsDate volkomen betrouwbaar is in het identificeren van cellen met een datum of een tijd. Het identificeert bijvoorbeeld niet een cel die 5. 1 als een datum bevat. Als uw code moet bepalen of een tekenreeks kan worden geïnterpreteerd als een datum, is de beste oplossing om die reeks in een cel te plaatsen en vervolgens code te schrijven om de celinhoud te controleren.