我有一个存储Date
对象的Collection
。我想检查日期对象的月份是否与 1 不同,如果是,请将其设置为 1。
Sub displayColl()
Dim globals As Object
Set globals = getGlobalVariables()
Dim dates As Collection
Set dates = getResultDates(globals("MIN_DATE"), globals("MAX_DATE"), False)
Dim i As Integer
For i = 1 To dates.Count
Debug.Print dates(i)
Next
Debug.Print "After"
For i = 1 To dates.Count
Debug.Print dates(i)
dates(i) = DateSerial(year(dates(i)), 1, Day(dates(i)))
Next
End Sub
但是,这段代码不起作用 - 我得到Object requered error
.为什么?正确的方法是什么?
编辑:
getResultDates
功能并不重要。它只是返回Dates
的Collection
。getGlobalVariables
也是如此 - 它返回一个字典,其中包含来自用户的信息,包括用户编写的最小和最大日期。错误发生在第
Set dates(i) = DateSerial(year(dates(i)), 1, Day(dates(i)))
行 上。删除
Set
不会完成任何事情。我确信
dates
Collection
包含日期。
调试输出:
01.01.2014
01.02.2014
01.03.2014
01.04.2014
01.05.2014
01.06.2014
01.07.2014
01.08.2014
01.09.2014
01.10.2014
01.11.2014
01.12.2014
01.01.2015
01.02.2015
01.03.2015
01.04.2015
01.05.2015
01.06.2015
01.07.2015
01.08.2015
01.09.2015
01.10.2015
01.11.2015
01.12.2015
01.01.2016
01.02.2016
01.03.2016
01.04.2016
01.05.2016
01.06.2016
01.07.2016
01.08.2016
01.09.2016
01.10.2016
01.11.2016
01.12.2016
01.01.2017
After
01.01.2014
根据Microsoft的VBA文档:https://msdn.microsoft.com/en-us/library/f26wd2e5(v=vs.100(.aspx您可以添加、删除和检索集合的项目。它不建议你可以像使用 Java 列表那样直接替换项目。
您可以添加新日期并删除旧日期。
这也在 中讨论过如何更改集合项的值