我有一个自定义对象,我通过循环添加到数组中。问题是当我初始化这样的对象时:
Dim CallNum As New Lib_CallNum
循环中添加的最后一个对象将覆盖循环期间添加的所有其他对象。所以我最终会得到一个充满了大量相同对象的数组。为了解决这个问题,我不得不改变初始化对象的方式:
Dim CallNum As Lib_CallNum
Set CallNum = New Lib_CallNum
但我不确定为什么第一次初始化不起作用。那么两组代码有什么区别?
答案 0 :(得分:10)
循环内的Dim
实际上并未在每次迭代中执行。它仅在第一次遇到变量时执行。
为了证明这一点,请在Lib_CallNum
类初始化定义中添加一个部分:
Private Sub Class_Initialize()
Debug.Print "Initialise Lib_CallNum"
' ...
End Sub
并运行您的原始代码。初始化仅报告一次。从那时起,您将多次向阵列添加相同的实例。
初始化新实例对象的正确方法是@Doug告诉你的,Set ... = New ...
答案 1 :(得分:3)
根据我的经验on your previous post,我仍然认为你没有采用正确的方法,尽管不确定,因为从未见过你完成的代码。你应该有类似的东西:
Function Something
Dim CallNum as Lib_CallNum
...
Do While SomeCondition
Set CallNum = New Lib_CallNum
'do some stuff
Set CallNum = Nothing
Loop
Return Whatever
End Function
换句话说,你应该在函数的顶部声明对象 - 不是在循环中重复 - 并在循环中实例化(并将其设置为Nothing)。
如果你谷歌,你可以找到解释为什么不在其声明中实例化一个对象。专业Excel开发has a good one。但我认为你的问题可能是从未将它设置为Nothing。但不确定。