2011-11-22 41 views
6

Tôi đang cố gắng tìm ra sự khác biệt giữa ngày hệ thống và ngày được lưu trữ trong trang tính. Nếu sự khác biệt giữa chúng là> 30 ngày, kết quả là đúng, kết quả là saiCách tìm sự khác biệt giữa các ngày trong VBA

Dim result as boolean 
Dim sDate as string 
sDate = Date 
if Worksheets("dates").Cells(1,1) - sDate > 30 then 'how do I do this? 
    result = true 
else 
    result = false 
end if 

Làm cách nào để tìm sự khác biệt trong ngày giữa ngày hệ thống và ngày được lưu trữ trong trang tính? Ngày trong trang tính cũng có thể là ngày trong quá khứ.

+0

Giá trị ngày được lưu trong bảng tính như thế nào? tức là 1 tháng 4 năm 2010, 01/30/2010, v.v. – brettdj

+0

Như tôi đoán. mm/dd/yyyy – Ank

Trả lời

23

Tôi tự hỏi tại sao tôi hiếm khi thấy những người sử dụng các chức năng cập nhật.

Bạn cũng có thể sử dụng này:

if DateDiff("d", date1, date2) > 30 then 

trong trường hợp này, date1 sẽ CDate và date2 sẽ sdate (hoặc đúc với (Worksheets ("ngày") Cells (1,1).) CDate hoặc dim'd như một ngày như Jeff nói

"d" có nghĩa là chúng ta đang nhận được sự khác biệt trong những ngày Dưới đây là khoảng thời gian nhiều năm, tháng, vv trong VBA:..

yyyy - Year 
q - Quarter 
m - Month 
y - Day of year 
d - Day 
w - Weekday 
ww - Week 
h - Hour 
n - Minute 
s - Second 
3

Hãy thử điều này:

if CDate(Worksheets("dates").Cells(1,1)) - sDate > 30 then 
+0

Tôi không biết một cái gì đó như CDate tồn tại !! lol .. Hãy để tôi thử nó .. – Ank

+0

CDate (Bảng tính ("ngày"). Các ô (1,1)) cho loại không phù hợp! – Ank

+0

@Ankur - Oh, sDate cũng cần phải là Ngày tháng. Tôi thấy rằng đó là một chuỗi. Trên thực tế, nếu bạn thay đổi sDate thành một ngày, thì có thể bạn không cần đĩa CDate. –

1

sDate là một STRI NG, KHÔNG phải là một ngày thật!

Chuyển đổi chuỗi của bạn thành một ngày, sử dụng hàm CDate() hoặc hàm DateValue().

Tuy nhiên, có một báo trước trong loại chuyển đổi này. Những chuyển đổi sẽ xử lý các cấu trúc sau:

yyyy/mm/dd 
yyyy/m/d 
mm/dd/yyyy 
m/d/yyyy 

Những điều này sẽ không được chính xác chuyển đổi

dd/mm/yyyy 
d/m/yyyy 

Và tránh sử dụng bất kỳ năm nào 2 chữ số.

Tôi khuyên bạn nên sử dụng hàm DateSerial() để chuyển đổi ngày. Vì vậy, liên quan đến mã của bạn, giả sử rằng các giá trị trên tờ yor thực sự là ngày (chắc chắn, chỉ cần chọn cột và thay đổi Định dạng số thành CHUNG. Nếu chúng là ngày thực, mỗi số sẽ hiển thị số PURE. để nhấn UNDO để lấy lại Định dạng ngày của bạn)

Dim result As Boolean 

If Worksheets("dates").Cells(1, 1).Value - Date > 30 Then 
    result = True 
Else 
    result = False 
End If 
Các vấn đề liên quan