2015-05-28 61 views
2

我有一個集合作爲一個全局變量,其中會包含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全局變量的末尾,但效果是一樣的。

回答

3

當您將Task添加到Collection時,您正在添加對象的引用。這些參考只有在它們所指的對象存在時纔有意義。這些對象在項目關閉時被銷燬。

如果你想使用他們的數據,你需要使用值類型(String,Integer等)複製它,而不是引用對象。或者,您可以保持項目打開,直到完成使用對象。

+0

哦,這很有道理!感謝拜倫的答案。有沒有辦法將整個對象引用複製到項目關閉時不會死亡的對象中? – Laureant

+2

你正陷入一片混亂。該技術被稱爲「深層複製」,您可以將所有數據放入一個新對象中。不確定VBA在這方面提供了什麼。您將更好地創建自己的課程,並只移動想要的數據。問題成爲如何處理'Task'內存在的引用之一。你也複製所有這些嗎?他們的參考呢?如果你知道你想要的屬性,只需抓住它們並將它們存儲在某個地方。這不太可能你需要它。 –