尝试将 VBA 日期格式或 Variant 日期格式分配给 Excel 工作表中的单元格时,毫秒将舍入为最接近的秒数


症状


当你对 Microsoft Excel 工作表中的单元格的值进行编程更改时,你指定的毫秒值将舍入到最接近的秒。 如果满足以下条件,则会发生此问题:
  • 您所做的更改将把 VBA 日期格式或 Variant 日期格式分配给单元格。
  • 通过使用 Visual Basic for Applications 宏或使用外部自动化客户端,进行编程更改。
如果您所做的更改将日期格式或时间格式分配给单元格,则不会发生此问题。

原因


之所以会出现此问题,是因为 Excel 会根据 "控制面板" 中 "区域和语言选项" 项的 "区域选项" 选项卡上指定的日期和时间格式,在内部设置日期字符串的格式。 将此值舍入到最接近的秒。 Excel 会将此值分配给单元格,然后重新计算该值以生成新的单元格日期值。

解决方法


使用下列方法之一来解决此问题。

方法 1

你可以将 date 值转换为包含一秒小数的字符串格式。 此字符串值可以作为保留毫秒的日期格式被分配和计算。

方法 2

可以使用 Range 对象的 Value2 属性来保留毫秒。 例如,您可以使用以下 VBA 代码。
Sub CopyValueUsingVBDate()   Dim d As Date   d = ActiveSheet.Range("A1").Value   ActiveSheet.Range("B1").Value2 = dEnd Sub
有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
182812 Range 对象的 Value2 属性的说明