为什么date返回“31-12-1899”1时传递给它?
我使用的Windows 10操作系统excel 13,所以在下面的代码1
应该返回1/1/1900
吧? 下面这不是为什么。
在这个问题OP通过2016
,得到了同样的结果,我得到了如此,如果有一些错误,为什么我得到了同样的结果,当我通过2016
OP?
Sub ndat() Dim dt As Date dt = 2016 Debug.Print "dt is " & dt End Sub
VBA中的整数和date映射与工作表中的不同。 例如:
Sub marine() Dim i As Integer, d As Date Dim mgs As String msg = "" For i = -10 To 10 d = CDate(i) msg = msg & i & vbTab & Format(d, "mm/dd/yyyy") & vbCrLf Next i MsgBox msg End Sub
生产:
请注意,您可以在1/1/1900之前获得date
编辑#1:
这可能有助于了解差异。 我把一些整数放在A列。
在B1中 ,我把=A1
和拷贝下来。 我格式化B列以date格式显示。
我使用这个UDF():
Public Function VBA_Date(i As Long) As String VBA_Date = Format(CDate(i), "mm/dd/yyyy") End Function
填写栏C :
请注意行#19和#20之间的转换
这只是工作表本身。 或者是正确的:工作表function!
快速testing:
?cdate(1) 1899-12-31 ?format(1,"YYYY-MM-DD") 1899-12-31 ?worksheetfunction.Text(1,"YYYY-MM-DD") 1900-01-01
但今天的date并没有显示出这样的差距:
?clng(now) 42463 ?worksheetfunction.Text(now,"0") 42463
这表明1到42463之间是一个差距(快速莲花检查显示:
?cdate(60) & " --- " & cdate(61) 1900-02-28 --- 1900-03-01 ?format(60,"YYYY-MM-DD") & " --- " & format(61,"YYYY-MM-DD") 1900-02-28 --- 1900-03-01 ?worksheetfunction.Text(60,"YYYY-MM-DD") & " --- " & worksheetfunction.Text(61,"YYYY-MM-DD") 1900-02-29 --- 1900-03-01
只是最后一个testing再次显示:
?format("1900-02-28","0") & " --- " & format("1900-03-01","0") 60 --- 61 ?worksheetfunction.Text("1900-02-28","0") & " --- " & worksheetfunction.Text("1900-03-01","0") 59 --- 61
从61开始,现在只是在数量上有所不同。 但是Lotus-Bug为“兼容性”添加了1900-02-29。
另外:这是excel的一个“function”,与basic,vbscript,vba无关……….所有其他程序都以正确的方式工作,如果VBA不会。 所以对于“兼容”,excel中的VBA只是以正确的方式进行;)