Zoeken…


Kalender

VBA ondersteunt 2 kalenders: Gregoriaans en Hijri

De eigenschap Calendar wordt gebruikt om de huidige kalender te wijzigen of weer te geven.

De 2 waarden voor de kalender zijn:

Waarde Constante Beschrijving
0 vbCalGreg Gregoriaanse kalender (standaard)
1 vbCalHijri Hijri-kalender

Voorbeeld

Sub CalendarExample()
    'Cache the current setting.
    Dim Cached As Integer
    Cached = Calendar

    ' Dates in Gregorian Calendar
    Calendar = vbCalGreg
    Dim Sample As Date
    'Create sample date of 2016-07-28
    Sample = DateSerial(2016, 7, 28)

    Debug.Print "Current Calendar : " & Calendar
    Debug.Print "SampleDate = " & Format$(Sample, "yyyy-mm-dd")
    
    ' Date in Hijri Calendar
    Calendar = vbCalHijri
    Debug.Print "Current Calendar : " & Calendar
    Debug.Print "SampleDate = " & Format$(Sample, "yyyy-mm-dd")
    
    'Reset VBA to cached value.
    Cached = Calendar
End Sub

Deze Sub drukt het volgende af;

Current Calendar : 0
SampleDate = 2016-07-28
Current Calendar : 1
SampleDate = 1437-10-23

Basisfuncties

Systeemdatum-tijd ophalen

VBA ondersteunt 3 ingebouwde functies om de datum en / of tijd op te halen uit de systeemklok.

Functie Retourtype Winstwaarde
Nu Datum Retourneert de huidige datum en tijd
Datum Datum Retourneert het datumgedeelte van de huidige datum en tijd
Tijd Datum Retourneert het tijdgedeelte van de huidige datum en tijd
Sub DateTimeExample()

    ' -----------------------------------------------------
    ' Note : EU system with default date format DD/MM/YYYY
    ' -----------------------------------------------------
    
    Debug.Print Now   ' prints 28/07/2016 10:16:01 (output below assumes this date and time)
    Debug.Print Date  ' prints 28/07/2016
    Debug.Print Time  ' prints 10:16:01
    
    ' Apply a custom format to the current date or time
    Debug.Print Format$(Now, "dd mmmm yyyy hh:nn")  ' prints 28 July 2016 10:16
    Debug.Print Format$(Date, "yyyy-mm-dd")         ' prints 2016-07-28
    Debug.Print Format$(Time, "hh") & " hour " & _
                Format$(Time, "nn") & " min " & _
                Format$(Time, "ss") & " sec "       ' prints 10 hour 16 min 01 sec
    
End Sub

Timer functie

De Timer retourneert een single die het aantal verstreken seconden sinds middernacht weergeeft. De precisie is honderdste van een seconde.

Sub TimerExample()

    Debug.Print Time    ' prints 10:36:31  (time at execution)
    Debug.Print Timer   ' prints 38191,13  (seconds since midnight)

End Sub

Omdat de functies Now en Time slechts tot op seconden nauwkeurig zijn, biedt Timer een handige manier om de nauwkeurigheid van de tijdmeting te vergroten:

Sub GetBenchmark()
       
    Dim StartTime  As Single
    StartTime = Timer       'Store the current Time
    
    Dim i As Long
    Dim temp As String
    For i = 1 To 1000000    'See how long it takes Left$ to execute 1,000,000 times
        temp = Left$("Text", 2)
    Next i
    
    Dim Elapsed As Single
    Elapsed = Timer - StartTime
    Debug.Print "Code completed in " & CInt(Elapsed * 1000) & " ms"

End Sub

IsDate ()

IsDate () test of een uitdrukking een geldige datum is of niet. Retourneert een Boolean .

Sub IsDateExamples()

    Dim anything As Variant
       
    anything = "September 11, 2001"

    Debug.Print IsDate(anything)    'Prints True
            
    anything = #9/11/2001#

    Debug.Print IsDate(anything)    'Prints True
   
    anything = "just a string"

    Debug.Print IsDate(anything)    'Prints False

    anything = vbNull
    
    Debug.Print IsDate(anything)    'Prints False
    
End Sub

Extractie functies

Deze functies nemen een Variant die naar een Date kan worden gegoten als parameter en retourneert een geheel Integer dat een deel van een datum of tijd vertegenwoordigt. Als de parameter niet naar een Date kan worden gegoten, resulteert dit in een runtime-fout 13: Type komt niet overeen.

Functie Beschrijving Geretourneerde waarde
Jaar() Retourneert het jaargedeelte van het datumargument. Geheel getal (100 tot 9999)
Maand() Retourneert het maandgedeelte van het datumargument. Geheel getal (1 tot 12)
Dag() Retourneert het daggedeelte van het datumargument. Geheel getal (1 tot 31)
Weekdag() Retourneert de dag van de week van het datumargument. Accepteert een optioneel tweede argument dat de eerste dag van de week definieert Geheel getal (1 tot 7)
Uur() Retourneert het uurgedeelte van het datumargument. Geheel getal (0 tot 23)
Minuut() Retourneert het minieme gedeelte van het datumargument. Geheel getal (0 tot 59)
Tweede() Retourneert het tweede gedeelte van het datumargument. Geheel getal (0 tot 59)

Voorbeelden:

Sub ExtractionExamples()

    Dim MyDate As Date
    
    MyDate = DateSerial(2016, 7, 28) + TimeSerial(12, 34, 56)

    Debug.Print Format$(MyDate, "yyyy-mm-dd hh:nn:ss") ' prints 2016-07-28 12:34:56

    Debug.Print Year(MyDate)                           ' prints 2016
    Debug.Print Month(MyDate)                          ' prints 7
    Debug.Print Day(MyDate)                            ' prints 28
    Debug.Print Hour(MyDate)                           ' prints 12
    Debug.Print Minute(MyDate)                         ' prints 34
    Debug.Print Second(MyDate)                         ' prints 56
    
    Debug.Print Weekday(MyDate)                        ' prints 5
    'Varies by locale - i.e. will print 4 in the EU and 5 in the US
    Debug.Print Weekday(MyDate, vbUseSystemDayOfWeek)
    Debug.Print Weekday(MyDate, vbMonday)              ' prints 4
    Debug.Print Weekday(MyDate, vbSunday)              ' prints 5
    
End Sub

DatePart () functie

DatePart() is ook een functie die een deel van een datum retourneert, maar werkt anders en biedt meer mogelijkheden dan de bovenstaande functies. Het kan bijvoorbeeld het kwartaal van het jaar of de week van het jaar retourneren.

Syntaxis:

DatePart ( interval, date  [, firstdayofweek] [, firstweekofyear] )

intervalargument kan zijn:

Interval Beschrijving
"Yyyy" Jaar (100 tot 9999)
"Y" Dag van het jaar (1 tot 366)
"M" Maand (1 tot 12)
"Q" Kwartaal (1 tot 4)
"Ww" Week (1 tot 53)
"W" Dag van de week (1 tot 7)
"D" Dag van de maand (1 tot 31)
"H" Uur (0 tot 23)
"N" Minuut (0 tot 59)
"S" Tweede (0 tot 59)

firstdayofweek is optioneel. het is een constante die de eerste dag van de week aangeeft. Indien niet gespecificeerd, wordt vbSunday verondersteld.

eerste week van het jaar is optioneel. het is een constante die de eerste week van het jaar aangeeft. Indien niet gespecificeerd, wordt aangenomen dat de eerste week de week is waarin 1 januari plaatsvindt.

Voorbeelden:

Sub DatePartExample()

    Dim MyDate As Date
    
    MyDate = DateSerial(2016, 7, 28) + TimeSerial(12, 34, 56)

    Debug.Print Format$(MyDate, "yyyy-mm-dd hh:nn:ss") ' prints 2016-07-28 12:34:56
    
    Debug.Print DatePart("yyyy", MyDate)              ' prints 2016
    Debug.Print DatePart("y", MyDate)                 ' prints 210
    Debug.Print DatePart("h", MyDate)                 ' prints 12
    Debug.Print DatePart("Q", MyDate)                 ' prints 3
    Debug.Print DatePart("w", MyDate)                 ' prints 5
    Debug.Print DatePart("ww", MyDate)                ' prints 31

End Sub

Berekeningsfuncties

DateDiff ()

DateDiff() retourneert een Long die het aantal tijdsintervallen tussen twee opgegeven datums weergeeft.

Syntaxis

DateDiff ( interval, date1, date2  [, firstdayofweek] [, firstweekofyear] )
  • interval kan elk van de intervallen zijn die zijn gedefinieerd in de functie DatePart()
  • datum1 en datum2 zijn de twee datums die u in de berekening wilt gebruiken
  • firstdayofweek en firstweekofyear zijn optioneel. Raadpleeg de functie DatePart() voor uitleg

Voorbeelden

Sub DateDiffExamples()

    ' Check to see if 2016 is a leap year.
    Dim NumberOfDays As Long
    NumberOfDays = DateDiff("d", #1/1/2016#, #1/1/2017#)
    
    If NumberOfDays = 366 Then
        Debug.Print "2016 is a leap year."              'This will output.
    End If
           
    ' Number of seconds in a day
    Dim StartTime As Date
    Dim EndTime As Date
    StartTime = TimeSerial(0, 0, 0)
    EndTime = TimeSerial(24, 0, 0)
    Debug.Print DateDiff("s", StartTime, EndTime)       'prints 86400

End Sub

DateAdd ()

DateAdd() retourneert een Date waaraan een opgegeven datum of tijdsinterval is toegevoegd.

Syntaxis

DateAdd ( interval, number, date  ) 
  • interval kan elk van de intervallen zijn die zijn gedefinieerd in de functie DatePart()
  • nummer Numerieke uitdrukking die het aantal intervallen is dat u wilt toevoegen. Het kan positief zijn (om datums in de toekomst te krijgen) of negatief (om datums in het verleden te krijgen).
  • date is een Date of letterlijke weergave van de datum waaraan het interval is toegevoegd

Voorbeelden:

Sub DateAddExamples()

    Dim Sample As Date
    'Create sample date and time of 2016-07-28 12:34:56
    Sample = DateSerial(2016, 7, 28) + TimeSerial(12, 34, 56)
    
    ' Date 5 months previously (prints 2016-02-28):
    Debug.Print Format$(DateAdd("m", -5, Sample), "yyyy-mm-dd")
    
    ' Date 10 months previously (prints 2015-09-28):
    Debug.Print Format$(DateAdd("m", -10, Sample), "yyyy-mm-dd")
    
    ' Date in 8 months (prints 2017-03-28):
    Debug.Print Format$(DateAdd("m", 8, Sample), "yyyy-mm-dd")

    ' Date/Time 18 hours previously (prints 2016-07-27 18:34:56):
    Debug.Print Format$(DateAdd("h", -18, Sample), "yyyy-mm-dd hh:nn:ss")
    
    ' Date/Time in 36 hours (prints 2016-07-30 00:34:56):
    Debug.Print Format$(DateAdd("h", 36, Sample), "yyyy-mm-dd hh:nn:ss")

End Sub

Conversie en creatie

CDate ()

CDate() zet iets van elke datatype naar een Date datatype

Sub CDateExamples()

    Dim sample As Date

    ' Converts a String representing a date and time to a Date
    sample = CDate("September 11, 2001 12:34")
    Debug.Print Format$(sample, "yyyy-mm-dd hh:nn:ss")      ' prints 2001-09-11 12:34:00
    
    ' Converts a String containing a date to a Date
    sample = CDate("September 11, 2001")
    Debug.Print Format$(sample, "yyyy-mm-dd hh:nn:ss")      ' prints 2001-09-11 00:00:00

    ' Converts a String containing a time to a Date
    sample = CDate("12:34:56")
    Debug.Print Hour(sample)                        ' prints 12
    Debug.Print Minute(sample)                      ' prints 34
    Debug.Print Second(sample)                      ' prints 56
    
    ' Find the 10000th day from the epoch date of 1899-12-31
    sample = CDate(10000)
    Debug.Print Format$(sample, "yyyy-mm-dd")       ' prints 1927-05-18
    
End Sub

Merk op dat VBA ook een los getypte CVDate() die op dezelfde manier werkt als de functie CDate() anders dan het retourneren van een CDate() Variant plaats van een sterk getypte Date . De CDate() -versie moet de voorkeur hebben wanneer deze wordt doorgegeven aan een Date parameter of wordt toegewezen aan een Date variabele, en de CVDate() -versie moet de voorkeur hebben wanneer deze wordt doorgegeven aan een Variant parameter of wordt toegewezen aan een Variant variabele. Dit vermijdt impliciete typecasting.


DateSerial ()

DateSerial() wordt gebruikt om een datum te maken. Het retourneert een Date voor een opgegeven jaar, maand en dag.

Syntaxis:

DateSerial ( year, month, day ) 

Met argumenten voor het jaar, de maand en de dag als geldige gehele getallen (jaar van 100 tot 9999, maand van 1 tot 12, dag van 1 tot 31).

Voorbeelden

Sub DateSerialExamples()

    ' Build a specific date
    Dim sample As Date
    sample = DateSerial(2001, 9, 11)
    Debug.Print Format$(sample, "yyyy-mm-dd")                   ' prints 2001-09-11
    
    ' Find the first day of the month for a date.
    sample = DateSerial(Year(sample), Month(sample), 1)
    Debug.Print Format$(sample, "yyyy-mm-dd")                   ' prints 2001-09-11
    
    ' Find the last day of the previous month.
    sample = DateSerial(Year(sample), Month(sample), 1) - 1
    Debug.Print Format$(sample, "yyyy-mm-dd")                   ' prints 2001-09-11
    
End Sub

Merk op dat DateSerial() "ongeldige" datums accepteert en er een geldige datum van berekent. Dit kan creatief voorgoed worden gebruikt:

Positief voorbeeld

Sub GoodDateSerialExample()

    'Calculate 45 days from today
    Dim today As Date
    today = DateSerial (2001, 9, 11)
    Dim futureDate As Date
    futureDate = DateSerial(Year(today), Month(today), Day(today) + 45)
    Debug.Print Format$(futureDate, "yyyy-mm-dd")            'prints 2009-10-26

End Sub

Het is echter waarschijnlijker om verdriet te veroorzaken wanneer u probeert een datum te maken op basis van niet-gevalideerde gebruikersinvoer:

Negatief voorbeeld

Sub BadDateSerialExample()

    'Allow user to enter unvalidate date information
    Dim myYear As Long
    myYear = InputBox("Enter Year")                                         
            'Assume user enters 2009
    Dim myMonth As Long
    myMonth = InputBox("Enter Month")                                       
            'Assume user enters 2
    Dim myDay As Long
    myDay = InputBox("Enter Day")                                           
            'Assume user enters 31
    Debug.Print Format$(DateSerial(myYear, myMonth, myDay), "yyyy-mm-dd")   
            'prints  2009-03-03

End Sub


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow