背景:
我想从一个格式化为显示日期的单元格中获取5位数字的日期。
5位数字的日期只能是即时窗口(通过debug.print
)。
我的测试结果位于 Script 部分(底部)。
根据我所做的测试,我觉得答案将涉及datediff()+2
,但是我无法弄清楚为什么需要+2,如果不对,我不想只添加它将来。
问题:
我似乎无法通过Debug.Print
显示正确的5位数日期(以“常规”格式显示)。
问题:
如何在不首先转换单元格的debug.print
的情况下如何将5位日期(通常以通用格式显示)显示在立即窗口(.numberformat
)中?
脚本:
Dim rng As Range, d1 As String, d2 As String
Set rng = Cells(1, 1) 'value = 20190101
Debug.Print Format(rng.Value, "@") 'returns 20190101
Debug.Print rng.NumberFormat = "General" 'returns "false"
Debug.Print Format(rng.value, "General") 'returns "Ge0oral" due to the "n" being recognized for a format
d1 = "1900/01/01"
d2 = rng.Value
Debug.Print 40729 + DateDiff("d", d1, d2) 'returns 84195
Debug.Print DateDiff("d", d1, d2) 'returns 43466
rng.NumberFormat = "General"
Debug.Print rng.Value 'returns 43468, but required formatting the cell
答案 0 :(得分:6)
Range.Value2
不使用Date
类型,因此您只能使用Debug.Print rng.Value2
。
答案 1 :(得分:6)
想要在不更改单元格格式的情况下打印日期的数字表示形式时,会想到两种方法。
最好的方法是使用.Value2
属性。
Debug.Print Rng.Value2
“不推荐使用”的方法是使用CDbl()
函数。我将moreso用于变量,将.Value2
用于范围。
Debug.Print CDbl(Rng.Value)
或者是变量
Dim d as Date
d = #01/01/2019#
Debug.Print CDbl(d)
Debug.Print CLng(d) 'If not using time - date only
答案 2 :(得分:1)
好的布局Cyril =)
作为其他答案的补充:Value2
是更合适的解决方法,另一个非常简单的可能性是:
Debug.Print rng*1