7

我在 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")

4

3 回答 3

13

尝试使用Replace,看看它是否适合你。正如我所看到的,上面已经提到过几次的问题是 CDate 函数在周期上阻塞。您可以使用替换将它们更改为斜杠。要回答您关于 vba 中可以解析任何日期格式的函数的问题,您没有任何非常有限的选项。

Dim current as Date, highest as Date, result() as Date 
For Each itemDate in DeliveryDateArray
    Dim tempDate As String
    itemDate = IIf(Trim(itemDate) = "", "0", itemDate) 'Added per OP's request.
    tempDate = Replace(itemDate, ".", "/")
    current = Format(CDate(tempDate),"dd/mm/yyyy")
    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) 
于 2012-07-21T04:00:35.803 回答
0

看起来它可能会在空数据行上引发错误,您是否尝试在运行 CDate() 函数之前确保 itemDate 不为空?我想这可能是你的问题。

于 2012-07-21T03:06:02.630 回答
-1

我使用了这段代码:

ws.Range("A:A").FormulaR1C1 = "=DATEVALUE(RC[1])"

A 列将是 mm/dd/yyyy

RC[1] 是 B 列,TEXT 字符串,例如 01/30/12,这不是日期类型

于 2012-10-11T08:58:05.163 回答