Excel VBA - 类模块逻辑

时间:2017-09-18 10:50:54

标签: excel-vba class vba excel

我只是在学习Excel VBA,我想在这里缺少一些概念。

假设我有一个包含5个汽车品牌的表格。我想把这些读到我自己的汽车品牌类模块中,然后打印出他们的名字。

我有两种方法可以做到这一点,只有一种方法有效。我想知道是否有人能解释原因?

工作版:

dim colCarBrands as new collection

For i = 1 To 5

    Dim newCarBrand As clsCarBrand
    Set clsCarBrand = New clsCarBrand

    newCarBrand.BrandName chaletsSheet.Cells(i, 1)

    colCarBrands.Add newCarBrand , newChalet.nameTechnical


Next

Dim b As clsCarBrand
For Each b In colCarBrands
    ' Print items
    Debug.Print b.BrandName
Next

不工作版本:

dim colCarBrands as new collection

For i = 1 To 5

    Dim newCarBrand As New clsCarBrand

    newCarBrand.BrandName chaletsSheet.Cells(i, 1)

    colCarBrands.Add newCarBrand , newChalet.nameTechnical


Next

Dim b As clsCarBrand
For Each b In colCarBrands
    ' Print items
    Debug.Print b.BrandName
Next

在这个版本中,该系列中的所有汽车品牌都是相同的(它是表格中的最后一个)

任何想法为什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

在第二个版本中,Dim newCarBrand As New clsCarBrand创建了该类的单个实例。后续遍历该循环只是更改其BrandName属性,然后将另一个对同一对象的引用添加到集合中。如果将Dim语句移到循环之前,这将更加清晰。 Dim语句不是重复运行的可执行语句。

在第一种情况下,Set语句创建对象的新实例,每个实例又添加到集合中。