2011-11-22 187 views
6

我试图找出系统日期和存储在工作表中的日期之间的差异。如果它们之间的区别是> 30天,结果为真,否则结果为假如何在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 

如何找出系统日期和存储在工作表中日之间的天数不同?工作表中的日期也可以是过去的日期。

+0

日期值如何存储在电子表格中?即2010年4月1日,01/30/2010等 – brettdj

+0

作为文本我猜。 mm/dd/yyyy – Ank

回答

23

我不知道为什么我很少看到使用日期函数的人。

您也可以使用此:

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

在这种情况下,DATE1将CDATE 和date2将SDATE(或者与投(工作表( “日期”)细胞(1,1)。)杰夫说CDATE或dim'd为日期

“d”表示,我们正在以天为单位的区别就在这里是间隔年,月等在VBA:。

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

试试这个:

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

我不知道像CDate存在的东西!大声笑..让我试试吧.. – Ank

+0

CDate(工作表(“日期”)。细胞(1,1))给出了类型不匹配! – Ank

+0

@Ankur - 哦,sDate也需要成为日期。我看到它是一个字符串。实际上,如果您将sDate更改为日期,那么您可能不需要CDate演员。 –

1

SDATE是一个STRI NG,这不是真正的日期!

使用CDate()函数或DateValue()函数将字符串转换为日期。

但是,这种转换存在一个警告。这些转换将处理以下结构:

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

这些不会正确地转换

dd/mm/yyyy 
d/m/yyyy 

,并避免使用任何2位数的年份。

我会建议使用DateSerial()函数进行日期转换。

所以对于你的代码,假设表单中的值实际上是日期(可以肯定的是,只需选择列并将数字格式更改为GENERAL即可),如果它们是实际日期,则每个都会显示一个纯数。打UNDO以取回日期格式)

Dim result As Boolean 

If Worksheets("dates").Cells(1, 1).Value - Date > 30 Then 
    result = True 
Else 
    result = False 
End If 
相关问题