Excel VBA为什么覆盖这些对象值

Joh*_*ohn 1 excel vba

我正在尝试在VBA中创建对象列表,但似乎未在创建新对象,并且值正在更新为类的单个实例。

这是班

' ---------------------------------------------------------------
'
' Class to represent Program Increment
'
' ---------------------------------------------------------------

Public name As String

Public sprints As New Collection
Run Code Online (Sandbox Code Playgroud)

这是调用代码:

' get the unique pi values
Dim piList As New Collection
For r = firstRow To lastRow
    currentVal = Cells(r, 2)
    On Error Resume Next
        Dim currentPi As New ProgramIncrement
        currentPi.name = currentVal
        piList.Add currentPi, currentVal
    On Error GoTo 0
Next
Run Code Online (Sandbox Code Playgroud)

这是第一个pi的输出 在此处输入图片说明

这是第二个pi的输出 在此处输入图片说明

基于这样的在线文档,我看不到我在做什么。 https://analystcave.com/vba-vba-class-tutorial/

Mat*_*don 6

As New创建一个自动实例化的对象。Dim语句不是可执行的,因此确实只有一个对象。

删除As New并使用Set ... = New语句创建新对象。

Dim currentPi As ProgramIncrement
Set currentPi = New ProgramIncrement
Run Code Online (Sandbox Code Playgroud)

Dim进入循环内部没有任何区别-一方面,它使以后重构和将循环体提取到其自己的过程范围中变得容易。另一方面,可以理解为每次迭代都创建一个新变量,但这不是作用域在VBA中的工作方式:最小作用域是过程作用域-块(例如循环体)不作用域任何东西。