【发布时间】:2015-03-03 05:10:28
【问题描述】:
我在 Excel 工作表中有以下格式的数据:
项目代码 交货日期 5456987 24.01.2009 5456988 5456989 12.24.2009 5456990 2009 年 12 月 24 日我已将 DeliveryDate 的值存储在一个数组中。我需要对日期的基础做出决定,然后将结果打印在新的工作表中。所以我必须将值转换为数组:
Dim current as Date, highest as Date, result() as Date
For Each itemDate in DeliveryDateArray
current = CDate(itemDate)
if current > highest then
highest = current
end if
' some more operations an put dates into result array
Next itemDate
'After activating final sheet...
Range("A1").Resize(UBound(result), 1).Value = Application.Transpose(result)
不幸的是,CDate() 函数抛出错误:
运行时错误“13”:
类型不匹配
VBA 中是否有一个函数可以:
- 用任何日期格式解析字符串并返回一个日期对象来处理。
- 如果字符串为空或格式错误(用于循环比较),则返回空日期对象。
编辑:
要重现错误,只需运行
myDate = CDate("24.01.2009")
【问题讨论】:
-
根据这个网站 [example-code.com/vb/stringtodate.asp] 你做得对..它在哪里抛出错误?在哪一行——第一行还是第二行(空字符串)?您是否尝试过更改字符串格式?您可能希望更改在那里解析日期字符串的格式。 “24.01.2009”可能无法识别,但“12/24/2009”可能 - 尝试仅转换 12/24/2009 并查看它是否有效。如果它确实有效,那么 24.01.2009 格式可能是不可接受的。
-
尝试转换 12/24/2009 看看它是否有效。如果它确实有效,那么 dd.MM.yyyy 格式对于 CDate 可能是不可接受的。您可能有一种方法可以指定它的格式,以便它可以完全按照您想要的方式解析它。如果 dd.MM.yyyy 格式是导致问题的原因,请先更改格式,例如替换“。”使用“/”并尝试再次转换它。或将其格式化为 MM/dd/yyyy 然后转换。我想我只是想知道“12/24/2009”是否会出错。先检查并告诉我。
-
@AnnB.,我的第一个问题是;是否有一个 VBA 函数可以解析 any 日期格式的字符串并返回要使用的日期对象?
-
@JasonWilliams 不,没有。不可能知道所有的日期格式。
-
@Deanna,我使用 Replace 函数来交换 '.' '/' 然后使用 CDate 转换日期。谢谢(你的)信息。 :)