在不格式化单元格的情况下在Debug.Print中返回5位数字的日期

时间:2019-10-29 15:50:41

标签: excel vba

背景

我想从一个格式化为显示日期的单元格中获取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

3 个答案:

答案 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