2011-11-30 24 views
16

có cách nào để lấy số nguyên cơ bản cho hàm Date trong VBA không? Tôi đang đề cập đến các số nguyên được lưu trữ bởi Excel để mô tả ngày trong bộ nhớ về số ngày (khi thời gian được bao gồm nó có thể là một phao sau đó tôi đoán). Tôi chỉ quan tâm đến phần nguyên mặc dù. Có một chức năng khác cho điều đó không?VBA Ngày là số nguyên

Ví dụ, cho ngày hôm nay() Tôi muốn để có thể lấy lại 40.877 ..

Cảm ơn các bạn;)

Trả lời

24

ngày không phải là một Integer trong VB (A), đó là một đôi.

Bạn có thể nhận được giá trị của Ngày bằng cách chuyển nó đến CDbl().

CDbl(Now())  ' 40877.8052662037 

Để có được một phần số nguyên, sử dụng

Int(CDbl(Now())) ' 40877 

mà sẽ trả về một dài đôi với không chữ số thập phân (tức là Floor() sẽ làm gì trong các ngôn ngữ khác).

Sử dụng CLng() hoặc Round() sẽ cho kết quả làm tròn, sẽ trả về "ngày trong tương lai" khi được gọi sau 12:00 trưa, vì vậy đừng làm vậy.

+0

Int (CDbl (Now())) không trả về giá trị dài, nó trả về gấp đôi. Giá trị của double chỉ xảy ra để đại diện cho một số nguyên, nhưng kiểu dữ liệu của nó vẫn là gấp đôi. – phoog

+0

@phoog: 'TypeName (VarType (Int (CDbl (Now())))) =" Long "trên hệ thống của tôi – Tomalak

+0

@Tomalek tất nhiên, vì' VarType (Int (CDbl (Now()))) 'trả về 5, đó là giá trị của 'vbDouble', nhưng chính nó là một' Long'. Hãy thử 'TypeName (Int (CDbl (Now())))'. – phoog

9

Chỉ cần sử dụng CLng(Date).

Lưu ý rằng bạn cần phải sử dụng Long không Integer cho điều này làm giá trị cho ngày hiện tại là> 32767

+0

Thật vậy, tôi không nghĩ về vấn đề Dài/Số nguyên! Cảm ơn ! – Jerome

+2

CLng sẽ làm tròn giá trị buổi chiều cho đến ngày hôm sau. – phoog

+0

@phoog. Tôi đã sử dụng 'Date' không phải' Now'. 'Date' không có thành phần thời gian, do đó' CLng' là tốt và an toàn. –

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

Bạn có thể sử dụng dưới dụ mã cho chuỗi ngày như mdate và Now() như ngày hôm nay, bạn cũng có thể tính toán sự tôn kính giữa hai ngày như lão hóa

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: Được sử dụng CDate cho chuyển đổi ngày String để ngày hợp lệ

Tôi đang sử dụng tính năng này trong Office 2007 :)

Các vấn đề liên quan