Excel vba:重新分配收集成员

时间:2017-11-13 15:06:52

标签: excel vba excel-vba

我有Collection存储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功能并不重要。它只返回Collection Dates

  • 同样适用于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 

1 个答案:

答案 0 :(得分:4)

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

您可以添加新日期并删除旧日期。

这也在讨论中 How to change value of an item of a collection