Excel VBA:是否有可用于日期的动态数组?

时间:2019-10-01 18:49:01

标签: excel vba

我正在处理Excel宏,我想创建一个日期数组,然后遍历它,而又不知道要添加多少个日期。我以为这很简单,但是我无法使其正常工作。

我尝试使用集合:

Dim DateArr As Collection
Dim d As Date

Set DateArr = New Collection

DateArr.Add (CDate("1/1/2019"))
DateArr.Add (CDate("2/2/2020"))

For Each d In DateArr
    sh.Cells(y, 27).Value = d
Next d

但是我得到一个错误,指出“对于每个控制变量必须是Variant或Object”,并在循环中突出显示d。日期不是对象吗?

我还尝试了一个变体:

Dim DateArr As Variant
DateArr.Add CDate("2/2/2020")
DateArr(1) = CDate("1/1/2019")

但是我找不到添加日期的正确语法。 .Add行给我一个“需要对象”错误,而DateArr(1)=行给我一个“类型不匹配”错误。

唯一可以做的就是标准数组:

Dim DateArr() As Date
Dim y As Integer
ReDim DateArr(1 To 2) As Date

DateArr(1) = CDate("1/1/2019")
DateArr(2) = CDate("2/2/2020")

For y = LBound(DateArr) To UBound(DateArr)
    sh.Cells(y, 27).Value = DateArr(y)
Next y

但是我不知道数组中有多少个日期,因此不能使用任何静态的东西。有没有一种方法可以使用这种相同的语法而无需设置尺寸?

谢谢!

1 个答案:

答案 0 :(得分:0)

日期是变量而不是对象

添加收藏夹是一种方法。在您的代码中,您假定它是一个函数,并添加了不必要的括号,例如

DateArr.add cdate("1/1/2019")

要使用For Each,则索引(控制)变量必须是对象或变量。

因此,如果将d变暗,则您的第一个示例应该可以正常工作(不会出现其他错误)。