项目关闭后全局变量失去其价值
Global variable losing it's value after Project is closed
我有一个集合作为全局变量,其中包含项目任务对象。
我的宏结构如下:
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全局变量中传递,效果是一样的
将 Task
添加到 Collection
时,您正在添加对对象的引用。这些 引用只有在它们引用的对象存在时才有意义 。这些对象在项目关闭时被销毁。
如果您想使用他们的数据,您需要使用值类型(String
、Integer
等)复制它,而不是引用对象。或者,您可以让项目保持打开状态,直到您使用完这些对象。
我有一个集合作为全局变量,其中包含项目任务对象。
我的宏结构如下:
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全局变量中传递,效果是一样的
将 Task
添加到 Collection
时,您正在添加对对象的引用。这些 引用只有在它们引用的对象存在时才有意义 。这些对象在项目关闭时被销毁。
如果您想使用他们的数据,您需要使用值类型(String
、Integer
等)复制它,而不是引用对象。或者,您可以让项目保持打开状态,直到您使用完这些对象。