2017-06-04 191 views
1

我試圖讓日期比現在老4天。這裏是我的代碼VBA不能從日期減去日期

Sub calcdate() 
Dim nDateTime, oDateTime As Date 
nDateTime = Format(Now, "YYMMDD") 
oDateTime = Format(DateAdd("d", -4, nDateTime), "YYMMDD") 
MsgBox ("Today is " & nDateTime & " And OldDate is " & oDateTime) 
End Sub 

但輸出 '今天是170604和OldDate是02-10-3734」

我試圖做到這一點,而不使用DateAdd

nDateTime = Format(Now, "YYMMDD") 
oDateTime = nDateTime - 4 

*輸出' 今天是170604和OldDate是170604'

我想這些變化

nDateTime = Format(Now, "YYMMDD") 
oDateTime = DateAdd("d", -4, nDateTime) 

*輸出 '今天是170604和OldDate是31-01-2367'

nDateTime = Format(Now, "YY-MM-DD") 
oDateTime = Format(DateAdd("d", -4, nDateTime), "YY-MM-DD") 

*輸出 '今天是17-06-04而OldDate是2013年4月6日'

所以它似乎在這裏是減去幾年,雖然我把「d」。

最後一件事,我想:

nDateTime = Format(Now, "DD-MM-YY") 
oDateTime = Format(DateAdd("d", -4, nDateTime), "DD-MM-YY") 

*輸出「今天是17年4月6日和OldDate是31-05-2017」 我想這個日期,格式爲170531,還何必當初呢給我2017年,而我只選擇格式YY?

回答

1

格式會創建一個字符串,因此您不能再對其進行明智的計算。而不是你的格式:

Dim nDateTime As Date, oDateTime As Date 
nDateTime = Now 
oDateTime = nDateTime - 4 
MsgBox "Today is " & Format(nDateTime, "YYMMDD") & " And OldDate is " & Format(oDateTime, "YYMMDD") 

此外,你需要爲每個變量聲明變量類型,就像我所做的那樣。

+0

這個工作,感謝@Absinthe '昏暗oDateTime截止日期 oDateTime =現在 - 4 MSGBOX( 「OldDate是」 &格式(oDateTime,「YYMMDD」))' 我知道它可能不是最佳的,但這不是原來的代碼,我會用它來做別的事情,所以這是足夠的。 關於聲明,我相信我可以在我的代碼中聲明它們,我在msdn上檢查它,並且它無論如何都可以工作 [https://msdn.microsoft.com/en-us/library/office/gg264241.aspx] –

+0

@ i.fathy-在VBA中,每個變量聲明都需要一個類型(除非你希望它是Variant)。你不能只是把'As something'放在變量列表的末尾 –

+0

謝謝,我的壞話,明白了。 –

0

因爲格式(現在, 「YYMMDD」)結果是字符串

Dim myDate As Date 
Dim nDatetime As String, oDateTime As String 

myDate = Now 
nDatetime = Format(myDate, "yymmdd") 
oDateTime = Format(DateAdd("d", -4, myDate), "YY-MM-DD") 
+0

非常感謝,它的工作原理。 –