2011-11-30 108 views
16

有沒有辦法在VBA中獲得Date函數的底層整數?我指的是Excel中存儲的整數,用天數來描述內存中的日期(當時間被包含時,它可以是一個浮點數,然後我猜)。但我只對整數部分感興趣。那還有另外一個功能嗎?VBA日期整數

例如,對於今天()我希望能夠找回40877 ..

謝謝你們;)

回答

24

日期是不是在VB(A)的整數,它是一個雙。

您可以通過將日期值傳遞給CDbl()來獲取日期值。

CDbl(Now())  ' 40877.8052662037 

爲了得到整數部分,使用

Int(CDbl(Now())) ' 40877 

這將返回一個 雙不帶小數位(即什麼Floor()會在其他語言中一樣)。

使用CLng()Round()會導致四捨五入,這將在中午12:00之後調用時返回「未來日」,所以不要這樣做。

+0

Int(CDbl(Now()))不會返回一個long,它會返回一個double。 double的值恰好代表一個整數,但它的數據類型仍然是double。 – phoog

+0

@phoog:'TypeName(VarType(Int(CDbl(Now()))))=「Long」'在我的系統 – Tomalak

+0

@Tomalek當然,因爲VarType(Int(CDbl(Now())))'''' 5,這是'vbDouble'的值,但它本身就是'Long'。嘗試'TypeName(Int(CDbl(Now())))'。 – phoog

9

只需使用CLng(Date)

請注意,您需要使用LongInteger此作爲值當前日期> 32767

+0

的確我沒有想到Long/Integer問題!謝謝 ! – Jerome

+2

CLng會將下午的值整理到第二天。 – phoog

+0

@phoog。我用'日期'而不是'現在'。 '日期'沒有時間分量,因此'CLng'很好也很安全。 –

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

您可以使用波紋管的代碼示例日期字符串如mdate和NOW()像今天一樣,你也可以兩個日期之間的計算尊重像老

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的轉換日期字符串有效期

我在Office 2007中使用這個:)