excel - 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
但我不知道数组中有多少日期,所以不能使用任何静态的。有没有办法在不设置维度的情况下使用相同的语法?
谢谢!
解决方案
日期是变体而不是对象
为集合添加是一种方法。在您的代码中,您假设它是一个函数并添加了不必要的括号,例如
DateArr.add cdate("1/1/2019")
要使用 For Each,索引(控制)变量必须是对象或变量。
因此,如果您将 d 调暗为变体,则您的第一个示例应该可以正常工作(其他错误无法承受)。
推荐阅读
- azure - 向 Azure 逻辑应用中的变量中的对象添加属性
- image - WORKDIR 是否创建目录?
- c# - C#调用重载方法参数问题
- android - 使用窗口管理器编写 UI(重构)不起作用
- typescript - 为 Express 中间件函数创建 Jest 单元测试
- javascript - 将媒体上传到 Firebase 存储需要太长时间
- javascript - 从 BigInt 到 JS 中的二进制
- javascript - 有没有办法强制从父组件重新渲染子组件而不使用在 React 中更改其道具?
- javascript - 反应路线不导航
- c# - 如何将文本 2 拆分为 2?