Recherche…
Calendrier
VBA prend en charge 2 calendriers: Gregorian et Hijri
La propriété Calendar
est utilisée pour modifier ou afficher le calendrier actuel.
Les 2 valeurs du calendrier sont les suivantes:
Valeur | Constant | La description |
---|---|---|
0 | vbCalGreg | Calendrier grégorien (par défaut) |
1 | vbCalHijri | Calendrier Hijri |
Exemple
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
Ce sous-groupe imprime les éléments suivants:
Current Calendar : 0
SampleDate = 2016-07-28
Current Calendar : 1
SampleDate = 1437-10-23
Fonctions de base
Récupérer la date et l'heure du système
VBA prend en charge 3 fonctions intégrées pour récupérer la date et / ou l'heure de l'horloge du système.
Fonction | Type de retour | Valeur de retour |
---|---|---|
À présent | Rendez-vous amoureux | Renvoie la date et l'heure actuelles |
Rendez-vous amoureux | Rendez-vous amoureux | Renvoie la date de la date et de l'heure actuelles |
Temps | Rendez-vous amoureux | Renvoie la partie heure de la date et de l'heure actuelles |
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
Fonction minuterie
La fonction Timer
renvoie un Single représentant le nombre de secondes écoulées depuis minuit. La précision est un centième de seconde.
Sub TimerExample()
Debug.Print Time ' prints 10:36:31 (time at execution)
Debug.Print Timer ' prints 38191,13 (seconds since midnight)
End Sub
Parce que les fonctions Now
and Time
ne sont précises qu'en secondes, Timer
offre un moyen pratique d'augmenter la précision de la mesure du temps:
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 () teste si une expression est une date valide ou non. Renvoie un 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
Fonctions d'extraction
Ces fonctions prennent en paramètre un Variant
pouvant être converti en Date
et renvoient un Integer
représentant une partie d'une date ou d'une heure. Si le paramètre ne peut pas être converti en une Date
, il en résultera une erreur d'exécution 13: incompatibilité de type.
Fonction | La description | Valeur retournée |
---|---|---|
An() | Renvoie la partie année de l'argument date. | Entier (100 à 9999) |
Mois() | Renvoie la partie mois de l'argument de date. | Entier (1 à 12) |
Journée() | Renvoie la partie du jour de l'argument date. | Entier (1 à 31) |
Jour de la semaine() | Renvoie le jour de la semaine de l'argument date. Accepte un second argument optionnel définissant le premier jour de la semaine | Entier (1 à 7) |
Heure() | Renvoie la partie heure de l'argument date. | Entier (0 à 23) |
Minute() | Renvoie la partie minute de l'argument date. | Entier (0 à 59) |
Seconde() | Renvoie la deuxième partie de l'argument date. | Entier (0 à 59) |
Exemples:
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
Fonction DatePart ()
DatePart()
est également une fonction renvoyant une partie d'une date, mais fonctionne différemment et offre plus de possibilités que les fonctions ci-dessus. Il peut par exemple retourner le trimestre de l'année ou la semaine de l'année.
Syntaxe:
DatePart ( interval, date [, firstdayofweek] [, firstweekofyear] )
L' argument d' intervalle peut être:
Intervalle | La description |
---|---|
"yyyy" | Année (100 à 9999) |
"y" | Jour de l'année (1 à 366) |
"m" | Mois (1 à 12) |
"q" | Trimestre (1 à 4) |
"ww" | Semaine (1 à 53) |
"w" | Jour de la semaine (1 à 7) |
"ré" | Jour du mois (1 à 31) |
"h" | Heure (0 à 23) |
"n" | Minute (0 à 59) |
"s" | Deuxième (0 à 59) |
firstdayofweek est facultatif. c'est une constante qui spécifie le premier jour de la semaine. Si non spécifié, vbSunday
est supposé.
firstweekofyear est facultatif. c'est une constante qui spécifie la première semaine de l'année. Si elle n'est pas spécifiée, la première semaine est supposée être la semaine au cours de laquelle le 1er janvier se produit.
Exemples:
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
Fonctions de calcul
DateDiff ()
DateDiff()
renvoie un Long
représentant le nombre d'intervalles de temps entre deux dates spécifiées.
Syntaxe
DateDiff ( interval, date1, date2 [, firstdayofweek] [, firstweekofyear] )
- intervalle peut être l'un des intervalles définis dans la fonction
DatePart()
- date1 et date2 sont les deux dates que vous souhaitez utiliser dans le calcul
- firstdayofweek et firstweekofyear sont facultatifs. Reportez-vous à la fonction
DatePart()
pour obtenir des explications
Exemples
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()
renvoie une Date
à laquelle une date ou un intervalle de temps spécifié a été ajouté.
Syntaxe
DateAdd ( interval, number, date )
- intervalle peut être l'un des intervalles définis dans la fonction
DatePart()
- nombre Expression numérique correspondant au nombre d'intervalles à ajouter. Cela peut être positif (pour obtenir des dates dans le futur) ou négatif (pour obtenir des dates dans le passé).
- date est une
Date
ou un littéral représentant la date à laquelle l'intervalle est ajouté
Exemples :
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
Conversion et création
CDate ()
CDate()
convertit quelque chose de n'importe quel type de données en un type de données Date
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
Notez que VBA a également faiblement typé CVDate()
qui fonctionne de la même manière que le CDate()
autre fonction que de retourner une date tapés Variant
au lieu d'un fortement typé Date
. La version de CDate()
doit être préférée lors du passage à un paramètre Date
ou à une variable Date
, et la version CVDate()
doit être préférée lors du passage à un paramètre Variant
ou lors de l’attribution à une variable Variant
. Cela évite le casting de type implicite.
DateSerial ()
DateSerial()
est utilisée pour créer une date. Il renvoie une Date
pour une année, un mois et un jour spécifiés.
Syntaxe:
DateSerial ( year, month, day )
Les arguments année, mois et jour étant valides Entiers (Année de 100 à 9999, Mois de 1 à 12, Jour de 1 à 31).
Exemples
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
Notez que DateSerial()
acceptera les dates "invalides" et en calculera une date valide. Cela peut être utilisé de manière créative pour de bon:
Exemple positif
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
Cependant, il est plus probable que vous tentiez de créer une date à partir d'une entrée utilisateur non validée:
Exemple négatif
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