2012-05-30 23 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

工作!此外,你是正確的日期變量被交換。非常感謝! –