通过VBA获取日期和字符串格式的今天和昨天



我正在努力正确格式化我的日期字符串,因为它似乎使用DateAdd减去了我日期的错误部分,我不知道如何解决。

例如:

Sub DateTest()
DateStr = Format(Date, "DD-MM-YY")
Yesterday = Format(DateAdd("d", -1, CDate(DateStr)), "DD-MM-YY")
YtdStr = Format(Yesterday, "DD-MM-YY")

Debug.Print DateStr
Debug.Print Yesterday
Debug.Print YtdStr
End Sub

结果:

13-09-20
19-09-13
13-09-19

预期结果:

13-09-20
12-09-20
12-09-20

我甚至试着只使用";"一年中的某一天";因为这是针对hidden report的,但我喜欢使用常规的日期字符串,我想或者至少我想弄清楚两者,但使用一年中的某一天给我带来了一些有趣的结果。昨天必须是d 0,这毫无意义,但如果我使用-1,它会删除两个日期。同样,把它变成一根绳子似乎可以让你改天?

例如:

Sub DateTest()
DateStr = Format(Date, "Y")
YtdDate = Format(DateAdd("d", 0, CDate(DateStr)), "Y")
YtdStr = Format(YtdDate, "Y")

Debug.Print DateStr
Debug.Print YtdDate
Debug.Print YtdStr
End Sub

Resut:

257
256
255 'This was expected to be a string 256?

有人能指出如何正确格式化吗?

您使用DD-MM-YY将源日期格式化为字符串,使用当前系统默认日期格式(显然是MM-DD-YY(将其解析为最新日期,将日期添加到结果中,并将其格式化为字符串。您不希望将这些中间格式设置为字符串。

Sub DateTest()
Dim DateNotStr As Date
Dim YesterdayNotStrEither As Date
DateNotStr = Date
YesterdayNotStrEither = DateAdd("d", -1, DateNotStr)


Debug.Print Format$(DateNotStr, "dd-mm-yy")
Debug.Print Format$(YesterdayNotStrEither , "dd-mm-yy")
End Sub

我认为问题是CDate没有根据我的系统默认日期格式正确转换我的日期。我为今天创建了一个日期格式的变量,并用它来生成昨天的变量。

例如:

Public Sub SetDateVars()
TdDate = Date
TdStr = Format(Date, "DD-MM-YY")
YtdDate = Format(DateAdd("d", -1, TdDate))
YtdStr = Format(YtdDate, "DD-MM-YY")

Debug.Print TdDate
Debug.Print TdStr
Debug.Print YtdDate
Debug.Print YtdStr
End Sub

结果:

9/13/2020 
13-09-20
9/12/2020
12-09-20

最新更新