Project关闭后,全局变量会丢失它的值

时间:2015-05-28 15:51:43

标签: excel vba excel-vba project ms-project

我有一个集合作为全局变量,其中包含Project Task对象。

我的宏的结构如下:

Public TaskCollection As Collection
Sub Main()
   Set TaskCollection = New Collection

   GetData(List of project paths)

   For Each task in TaskCollection
        //ProcessTask()
   Next

End Sub


Function GetData(List of project paths)
    for each project path
         Open project p

            //do something else with the opened project...

            for each Task t in p.Tasks
                TaskCollection.Add t
            next
        Close project p
         //AFTER THIS, the TaskCollection object will be totally empty
   next
End Function

正如我在评论中提到的,在我关闭项目之后,从我将任务放入TaskCollection的地方,TaskCollection丢失了它的值。奇怪的是,它保留了之前拥有的对象数量,但它们都是空的;

我试图在GetData函数中本地创建一个集合对象,然后在最后的TaskCollection全局变量中传递它,但效果是一样的。

1 个答案:

答案 0 :(得分:3)

在向Collection添加String时,您正在添加对象的引用。只要它们引用的对象存在,这些引用只有意义。项目关闭时会破坏这些对象。

如果要使用他们的数据,则需要使用值类型(Integer,{{1}}等)复制它,而不是引用对象。或者,您可以保持项目打开,直到您完成使用对象。