Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel vba:重新分配集合成员_Vba_Excel - Fatal编程技术网

Excel vba:重新分配集合成员

Excel vba:重新分配集合成员,vba,excel,Vba,Excel,我有一个集合,它存储日期对象。我想检查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

我有一个
集合
,它存储
日期
对象。我想检查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
但是,此代码不起作用-我得到
对象重新查询错误
。为什么呢?正确的方法是什么

编辑:

  • getResultDates
    函数并不重要。它只返回
    日期的
    集合

  • 这同样适用于
    getGlobalVariables
    ——它返回一个字典,其中包含用户提供的信息,包括用户编写的最短和最长日期

  • 错误发生在第
    行设置日期(i)=日期序列(年(日期(i)),第1,天(日期(i))

  • 删除
    Set
    不会有任何效果

  • 我确信
    日期
    集合
    包含日期

调试输出:

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文档: 您可以添加、删除和检索集合的项。它并不建议您可以像使用Java列表那样直接替换项

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

本节也讨论了这一点

删除
集合
请包含
getResultDates
getGlobalVariables
函数,以便于我们帮助调试和尝试您的代码
Set dates=getResultDates(全局(“最小日期”)、全局(“最大日期”)、False)
--您确定
日期
在这一行之后不是
什么都没有
?我很惊讶
设置
关键字没有导致对象所需的运行时错误。日期不是对象,它们是值-并且您不设置值。FWIW“删除“Set”并不能完成任何事情”听起来有点自大:使用
Set
这种方式总有一天会造成问题-最好学会正确使用它。@Ans我要说@Mat'sMug对vba的遗忘比我们大多数人知道的要多。他所说的问题是,
集合
可能不是本案中的主要问题,但如果没有第二个错误成为先例,问题就会出现。如果您尝试设置t=dates(i)
,您将得到一个错误。这条线有两个问题。
Set
问题和另一个问题,我相信下面的答案可以解释。
Set
就像心脏病发作时断腿一样。一旦心脏病发作得到解决,断腿仍然需要处理。