existe-t-il un moyen d'obtenir l'entier sous-jacent pour la fonction Date
dans VBA? Je fais référence à l'entier stocké par Excel pour décrire les dates en mémoire en termes de nombre de jours (lorsque le temps est inclus, cela peut être un flottant alors je suppose). Mais je ne m'intéresse qu'à la partie entière. Y a-t-il juste une autre fonction pour cela?
Par exemple, pour aujourd'hui () j'aimerais pouvoir récupérer 40877 ..
Merci les gars ;)
La date n'est pas un entier en VB (A), c'est un double.
Vous pouvez obtenir la valeur d'une date en la passant à CDbl()
.
CDbl(Now()) ' 40877.8052662037
Pour obtenir la partie entière, utilisez
Int(CDbl(Now())) ' 40877
qui retournerait un LongueDouble sans décimales (c'est-à-dire ce que Floor()
ferait dans d'autres langues).
L'utilisation de CLng()
ou Round()
entraînerait l'arrondi, qui renverra un "jour dans le futur" lorsqu'il sera appelé après midi, donc ne faites pas cela.
Utilisez simplement CLng(Date)
.
Notez que vous devez utiliser Long
pas Integer
pour cela car la valeur de la date actuelle est> 32767
Vous pouvez utiliser l'exemple de code ci-dessous pour une chaîne de date comme mdate et Now () comme toDay, vous pouvez également calculer la déférence entre les deux dates comme Aging
Public Sub test(mdate As String)
Dim toDay As String
mdate = Round(CDbl(CDate(mdate)), 0)
toDay = Round(CDbl(Now()), 0)
Dim Aging as String
Aging = toDay - mdate
MsgBox ("So aging is -" & Aging & vbCr & "from the date - " & _
Format(mdate, "dd-mm-yyyy")) & " to " & Format(toDay, "dd-mm-yyyy"))
End Sub
NB: CDate
utilisé pour convertir la chaîne de date en date valide
J'utilise ceci dans Office 2007 :)
Public SUB test()
Dim mdate As Date
mdate = now()
MsgBox (Round(CDbl(mdate), 0))
End SUB