我正在尝试使用记录集中的CDate()将文本字段转换为日期,但仍会出现类型不匹配错误。输入文本格式为MMDDYYYY。 CDate不承认这种格式吗?我需要一个单独的功能吗?有什么想法吗?
Text Date -> Converted Date
--------- --------------
04122012 -> 04/12/2012
Dim db As DAO.Database
Dim rst As DAO.Recordset
Set db = CurrentDb
Set rst = db.OpenRecordset("tbl_dates", Type:=dbOpenDynaset)
Do Until rst.EOF
rst.Edit
rst![Converted Date]=CDate(rst![Text Date])
rst.Update
rst.MoveNext
Loop
Set rst = Nothing
Set db = Nothing
答案 0 :(得分:8)
CDate()
将不接受您的日期字符串。此尝试因类型不匹配错误而失败。
? CDate("04122012")
如果它有用,您可以使用IsDate()
功能检查日期字符串是否采用CDate()
接受的格式。
? IsDate("04122012")
False
? IsDate("04-12-2012")
True
? IsDate("04/12/2012")
True
? CDate("04-12-2012")
4/12/2012
bar = "04122012" : Debug.Print CDate(Left(bar,2) & "-" & _
Mid(bar,3,2) & "-" & Right(bar,4))
4/12/2012
修改:如果系统的区域设置与日期字符串格式不匹配,则可以将这些日期字符串转换为 yyyy-mm-dd 格式避免CDate()
。
bar = "04122012" : Debug.Print CDate(Right(bar,4) & "-" & _
Left(bar,2) & "-" & Mid(bar,3,2))
4/12/2012
答案 1 :(得分:5)
CDate
的帮助说:
CDate根据系统的区域设置识别日期格式。如果以不同于其中一个识别日期设置的格式提供日期,月份和年份的正确顺序,则可能无法确定。
为避免因语言环境设置而造成的混淆,您可以使用DateSerial
代替CDate
,就像在这样的表达式中一样(假设Text Date
总是有8个MMDDYYYY格式的字符):< / p>
DateSerial(Right(rst![Text Date], 4), Left(rst![Text Date], 2), Mid(rst![Text Date], 3, 2))