使用VBA获取正确日期:解决Excel日期格式转换错误问题
解决VBA中CDate解析日期格式错误的问题
这问题我碰到过好多次啦——核心原因就是CDate是跟着系统区域设置来解析日期的。你的系统应该默认是MM/DD/YYYY的格式,所以它把01/02/2018当成了1月2日,但实际你要的是2月1日(也就是DD/MM/YYYY格式)。
给你两个靠谱的解决方案:
方法一:手动拆分日期组件(最稳妥)
直接把日期字符串拆成日、月、年,然后用DateSerial按正确顺序组合,完全不受系统区域影响:
Dim rawDateStr As String Dim dayVal As Integer, monthVal As Integer, yearVal As Integer Dim thedate As Date rawDateStr = Application.Cells(linecount, 2).Value ' 拆分日期部分(先去掉时间,只处理前面的日期字符串) Dim dateParts() As String dateParts = Split(Split(rawDateStr, " ")(0), "/") dayVal = CInt(dateParts(0)) monthVal = CInt(dateParts(1)) yearVal = CInt(dateParts(2)) ' 按年、月、日的顺序构建正确日期 thedate = DateSerial(yearVal, monthVal, dayVal)
方法二:强制指定格式解析
如果你能确定单元格里的日期格式是固定的DD/MM/YYYY HH:MM:SS AM/PM,也可以用Format先标准化格式再转:
Dim rawDateStr As String Dim thedate As Date rawDateStr = Application.Cells(linecount, 2).Value thedate = CDate(Format(rawDateStr, "dd/mm/yyyy hh:mm:ss AMPM"))
不过这个方法偶尔会因为系统区域的特殊设置出问题,所以更推荐第一种手动拆分的方式。
另外提一句:如果你的单元格本身是日期格式(不是文本),那直接取.Value得到的就是正确的日期序列号,根本不需要用CDate转——你可以先检查下单元格的格式是不是文本格式哦。
内容的提问来源于stack exchange,提问作者Anthony
相关产品推荐
相关产品推荐

