web-dev-qa-db-fra.com

Date VBA sous forme d'entier

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 ;)

18
BuZz

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.

29
Tomalak

Utilisez simplement CLng(Date).

Notez que vous devez utiliser Long pas Integer pour cela car la valeur de la date actuelle est> 32767

10
Jon Egerton

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 :)

1
SftAps
Public SUB test()
    Dim mdate As Date
    mdate = now()
    MsgBox (Round(CDbl(mdate), 0))
End SUB
1
xQbert