2012-05-30 21 views
0

我想在Excel中使用VBA使用DateDiff函数的宏。DateDiff函数意外地返回另一个日期或默认

我的理解是代码应该返回一个整数值。

下面是在这个位置网上给出的例子:http://www.techonthenet.com/access/functions/date/datediff.php

-DateDiff( “YYYY”,第15/10/1998#,#21/11/2003#)将返回5

- DateDiff(“m”,#15/10/2003#,#22/11/2003#)将返回1

-DateDiff(“d”,#15/10/2003#,#22/11/2003 #)将返回38

以下是我使用的代码:

Sub macrotest() 

Dim dateNow, dateThen, dateFinal As Date 

dateNow = Format(Sheet1.Cells(2, 2), "DD/MM/YY") 
dateThen = Format(Sheet1.Cells(3, 2), "DD/MM/YY") 
dateFinal = DateDiff("d", dateNow, dateThen) 

Sheet1.Cells(5, 2) = dateFinal 


End Sub 

最后,这是我在我的Excel行:

B2:12年5月30日

B3:12年3月30日

B5:12:00:00 AM (这个单元应该有结果列出)。

-I得到的日期是excel默认的,或者是12:00。

任何想法?谢谢!

+0

你在excel文件中的日期是实际的日期还是简单的文本字符串? –

+0

检查单元格B5当前设置的格式。它是否设置为数字格式? – mellamokb

+0

不,他们被格式化为excel中的日期 –

回答

2

根据帮助系统,DateDiff返回一个

您的代码声明了两个变体和一个日期类型。取而代之的

Dim dateNow, dateThen, dateFinal As Date

你可能是指

Dim dateNow As Date, dateThen As Date, dateFinal As Long

此代码为我工作。您可能需要稍微调整它把它应用到你的特殊情况(我用ActiveSheet使测试更快)

Sub macrotest() 

Dim dateNow As Date, dateThen As Date, dateFinal As Long 

dateNow = ActiveSheet.Cells(2, 2).value 
dateThen = ActiveSheet.Cells(3, 2).value 
dateFinal = DateDiff("d", dateThen, dateNow) 

ActiveSheet.Cells(5, 2) = dateFinal 

End Sub 

而且我相信你有dateNowdateThenDateDiff函数调用逆转。

+0

+1正是我的想法,我几乎打了一半,但放弃了LOL –

+0

工作!此外,你是正确的日期变量被交换。非常感谢! –