Excel VBA获取列中最新日期时间问题:时间始终显示为00:00:00
解决Excel VBA获取列中最新日期时间时时间丢失的问题
你的代码里Split(Max_DateTime, ".")(0)这一步是核心错误——Excel是把日期时间存储成浮点数的:
- 整数部分对应日期(从1900年1月0日开始的天数)
- 小数部分对应时间(代表一天中的时间占比,比如0.493左右就对应11:45:00)
按小数点分割后只取了整数部分,自然把时间相关的小数部分丢掉了,导致格式化后时间显示为00:00:00。
正确代码示例1:直接格式化完整值
Sub ObtainNewestDateTimeofaColumn() Dim Max_DateTime As Double ' 获取B列最大的日期时间值 Max_DateTime = Application.WorksheetFunction.Max(Columns("$B:$B")) ' 直接转换并格式化完整的日期时间 Dim Max_Date As String Max_Date = Format(CDate(Max_DateTime), "dd/mm/yyyy hh:mm:ss") MsgBox Max_Date End Sub
正确代码示例2:限定数据范围(更高效)
如果B列不是整列都有数据,建议只在有效数据范围内计算,提升运行速度:
Sub ObtainNewestDateTimeofaColumn() Dim LastRow As Long Dim Max_DateTime As Double Dim Max_Date As String ' 获取B列最后一行有数据的行号 LastRow = Cells(Rows.Count, "B").End(xlUp).Row ' 仅在有效数据范围内取最大值 Max_DateTime = Application.WorksheetFunction.Max(Range("B1:B" & LastRow)) ' 格式化日期时间 Max_Date = Format(CDate(Max_DateTime), "dd/mm/yyyy hh:mm:ss") MsgBox Max_Date End Sub
补充说明:
- 不需要用Split分割数值,
CDate(Max_DateTime)会自动把浮点数转换成正确的日期时间类型 - 如果需要12小时制显示时间,把格式字符串改成
"dd/mm/yyyy hh:mm:ss AM/PM"即可
内容的提问来源于stack exchange,提问作者Abby Vilchis Gómez
相关产品推荐
相关产品推荐

