我正在尝试在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)
基于这样的在线文档,我看不到我在做什么。 https://analystcave.com/vba-vba-class-tutorial/
As New创建一个自动实例化的对象。Dim语句不是可执行的,因此确实只有一个对象。
删除As New并使用Set ... = New语句创建新对象。
Dim currentPi As ProgramIncrement
Set currentPi = New ProgramIncrement
Run Code Online (Sandbox Code Playgroud)
Dim进入循环内部没有任何区别-一方面,它使以后重构和将循环体提取到其自己的过程范围中变得容易。另一方面,可以理解为每次迭代都创建一个新变量,但这不是作用域在VBA中的工作方式:最小作用域是过程作用域-块(例如循环体)不作用域任何东西。