我使用VBA计算MS Access中的日期。这在我在同一表格上有两个日期(2016-01-21)时工作正常,但是当我第一次需要将字符串修改为日期格式时,这不是这样的:20160121 - > 2016年1月21日
这就是我想要做的事情:
Dim sYear As String, sMonth As String, sDay As String, sDate As String
sYear = Left("20160121", 4)
sMonth = Mid("20160121", 5, 2)
sDay = Mid("20160121", 7, 2)
sDate = sYear & "-" & sMonth & "-" & sDay
MsgBox CDate(sDate)
这将返回错误13,不兼容的类型。
但这有效:
MsgBox CDate("2016-01-21")
为什么我的工作方式不合适?
答案 0 :(得分:1)
您必须决定如何处理无效的输入值。
一种选择是提供您选择的默认日期,今天的日期或此处 1980-01-01 :
Public Function ConvertDate(ByVal TextDate As String) As Date
Dim RealDate As Date
Dim NullDate As Date
NullDate = #1/1/1980#
TextDate = Format(TextDate, "@@@@/@@/@@")
If IsDate(TextDate) Then
RealDate = CDate(TextDate)
Else
RealDate = NullDate
End If
ConvertDate = RealDate
End Function
将返回:
20160121 -> 2016-01-21
20160141 -> 1980-01-01
或者您可以将RealDate
的数据类型更改为 Variant ,并为无效日期返回 Null :
Public Function ConvertDate(ByVal TextDate As String) As Variant
Dim RealDate As Variant
Dim NullDate As Variant
NullDate = Null
TextDate = Format(TextDate, "@@@@/@@/@@")
If IsDate(TextDate) Then
RealDate = CDate(TextDate)
Else
RealDate = NullDate
End If
ConvertDate = RealDate
End Function
将返回:
20160121 -> 2016-01-21
20160141 -> Null
答案 1 :(得分:0)
错误是因为我测试的是假日期:12345678。如果日期正确,它可以正常工作......