在VBA中初始化对象的正确方法是什么?

fer*_*cs2 5 excel vba excel-vba

我有一个自定义对象,我通过循环添加到数组.问题是当我初始化这样的对象时:

Dim CallNum As New Lib_CallNum
Run Code Online (Sandbox Code Playgroud)

循环中添加的最后一个对象将覆盖循环期间添加的所有其他对象.所以我最终会得到一个充满了大量相同对象的数组.为了解决这个问题,我不得不改变初始化对象的方式:

Dim CallNum As Lib_CallNum
Set CallNum = New Lib_CallNum
Run Code Online (Sandbox Code Playgroud)

但我不确定为什么第一次初始化不起作用.那么两组代码有什么区别?

chr*_*sen 10

Dim一个循环中实际上并没有在每次迭代执行.它仅在第一次遇到变量时执行.

要演示这一点,请在Lib_CallNum类初始化定义中添加一个部分:

Private Sub Class_Initialize()
    Debug.Print "Initialise Lib_CallNum"
    ' ...
End Sub
Run Code Online (Sandbox Code Playgroud)

并运行您的原始代码.初始化仅报告一次.从那时起,您将多次向阵列添加相同的实例.

初始化新实例对象的正确方法是@Doug告诉你的, Set ... = New ...

  • 克里斯,谢谢你的解释.我从来不知道. (2认同)