![问题](https://linux22.com/image/1508855/%E9%97%AE%E9%A2%98.png)
问题
日期时间单元格包含精度达到十分之一秒或更高精度的数据,但是在编辑单元格数据时,即使未进行任何更改,也会将此精度丢弃为“秒”级精度。
重新创建
显然,这其中的因素可能与地点、机器和/或用户有关,但以下内容代表了我在 2 台台式机和一台笔记本电脑上的体验,始终是 Excel 2010,英国。
- 在没有引号的单元格中输入“19/04/2015 13:26:15.456”(英国格式,因此大概是美国的 04/19/2015);按回车键即可接受内容。
- Excel 决定将其格式化为“mm:ss.0”,并将其呈现为“26:15.5”
- 移回相关单元格尚未编辑
- 可以看出,公式栏中的精度已“丢失”,显示为“19/04/2015 13:26:15”,没有秒的分数。但是,单元格仍然显示“26:15.5”,尾部有 .5,表明精度仍然存在。
- CTRL-1 并将格式从“mm:ss.0”更改为“dd/mm/yyyy hh:mm:ss.000”。现在它在单元格中正确呈现为“19/04/2015 13:26:15.456”(但公式栏中仍然没有 .456)。
- 这是问题的关键所在;现在按 F2,然后按 Enter;即“编辑”单元格但不进行任何更改。精度 < 1 秒将被丢弃,单元格现在显示“19/04/2015 13:26:15”。000“
这意味着如果我编辑单元格的日期部分(例如将 4 月改为 5 月,或前进一年等),或者只是不小心双击它,每次我都会丢弃小数精度。有什么方法可以防止这种情况发生吗?
为了进一步证明值在变化而不仅仅是格式在变化,我在相邻的单元格中添加了一个公式,将日期呈现为小数(10dp),并且该值仅在上述第 4 步之后立即发生变化。
答案1
如果您的单元格设置日期/时间如下:
选择单元格并运行这个简短的宏:
Sub beforeEDIT()
Dim s As String
With ActiveCell
s = .Text
.ClearContents
.NumberFormat = "@"
.Value = s
End With
End Sub
它会将单元格转换为纯文本(并保留毫秒)。然后您可以编辑单元格,更改月份或日期等。
完成编辑后,运行第二个宏将文本转换回日期/时间。
Sub afterEDIT()
With ActiveCell
.NumberFormat = "mm/dd/yyyy hh:mm:ss.000"
.Value = .Value
End With
End Sub