首页 > 解决方案 > 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

但我不知道数组中有多少日期,所以不能使用任何静态的。有没有办法在不设置维度的情况下使用相同的语法?

谢谢!

标签: excelvba

解决方案


日期是变体而不是对象

为集合添加是一种方法。在您的代码中,您假设它是一个函数并添加了不必要的括号,例如

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

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

因此,如果您将 d 调暗为变体,则您的第一个示例应该可以正常工作(其他错误无法承受)。


推荐阅读