Excel vba:重新分配collections成员

我有一个存储Date对象的集合。 我想检查一个date对象的月份是否与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 – 它返回一个包含用户信息的字典,包括用户写的最小和最大date。

  • Set dates(i) = DateSerial(year(dates(i)), 1, Day(dates(i)))

  • 删除Set不能完成任何事情。

  • 我确定dates Collection包含date。

debugging输出:

 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 

根据微软的VBA文档: https ://msdn.microsoft.com/en-us/library/f26wd2e5( v= vs.100).aspx你可以添加,删除和检索集合的项目。 它并不build议你可以像使用Java List那样直接replace项目。

你可以添加新的date,并删除旧的date。

这在“ 如何更改集合的项目的值”中也进行了讨论