VBA使用format()或CDate()将字符串转换为日期

Fiz*_*uzz 0 outlook vba formatdatetime outlook-vba

如果之前有人询问过,请指出正确的方向.我似乎找不到任何有用的谷歌技巧.

我有以下代码,它读取这样的字符串; 停电StartDate:05/10/11 23:59 EST
并提取日期信息,即05/10/11 23:59

sStartTime = Mid(objItem.Body, 18, 15) ' Extract the start time
Debug.Print "sStartTime after reading: " & sStartTime
sStartTime = Format(sStartTime, "dd/mm/yy hh:mm") ' Format date correctly
Debug.Print "sStartTime after formatting: " & sStartTime
Run Code Online (Sandbox Code Playgroud)

这是我通常得到的输出:

sStartTime after reading:  05/10/11 23:59
sStartTime after formatting: 10/05/11 23:59
Run Code Online (Sandbox Code Playgroud)

但有时它甚至交换日期和年份:

sStartTime after reading:  14/07/11 23:59
sStartTime after formatting: 11/07/14 23:59
Run Code Online (Sandbox Code Playgroud)

然后CDate完全填充东西,将日期转换为1931年的事情...任何帮助将日期字符串转换为日期对象将非常感激.

===============

编辑:应该在最初的帖子中提到这一点.读取字符串背后的想法是转换为Date对象,以便我可以创建日历约会.目前我用这个;

dStartTime = CDate(sStartTime)
Run Code Online (Sandbox Code Playgroud)

我认为是问题线,sStartTime ="29/09/11 23:00"(dd/mm/yy hh:mm)和dStartTime ="11/9/2029 11:00:00 PM"

所以很明显会出现一些转换问题,但是我不知道为了将29/09/11 23:00变成等效的日期对象,我想用什么格式来提供CDate函数.

Pat*_*rez 5

Format(sStartTime, "dd/mm/yy hh:mm")无法正常工作,因为sStartTime是一个字符串,而不是一个日期.
你必须做一些额外的工作来获得一个正确输入的日期,比如
dStartTime= DateSerial(Mid(sStartTime,10,2),Mid(sStartTime,7,2),Mid(sStartTime,4,2)) + TimeSerial(...) 等等......
那么,你将能够正确地应用你的格式化功能.