excelvba类模块逻辑

excelvba类模块逻辑,excel,class,vba,Excel,Class,Vba,我只是在学习ExcelVBA,我想这里缺少了一些概念 假设我有一张5个汽车品牌的表格。我想把这些读入我自己的汽车品牌课程模块,然后打印它们的名字 我有两种方法,只有一种有效。我想知道是否有人能解释为什么 工作版本: dim colCarBrands as new collection For i = 1 To 5 Dim newCarBrand As clsCarBrand Set clsCarBrand = New clsCarBrand newCarBrand.

我只是在学习ExcelVBA,我想这里缺少了一些概念

假设我有一张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
不工作版本:

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
在这个版本中,系列中的所有汽车品牌都是相同的(这是表格中的最后一个)

你知道为什么吗


谢谢

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


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

也许你可以看看:。还有一些类似的帖子你可以搜索。谢谢约翰。因此,如果我理解正确,这两种情况下的Dim语句实际上只运行一次(即不是每个循环)?@PhilTeare我从来没有将
Dim
视为“运行”。它在编译时而不是运行时用于分配存储并将变量名与该存储关联<代码>新建在首次使用时创建对象。在VBA中,惯例是将所有
Dim
语句放在过程的开头(至少根据):“注意,在过程中使用Dim语句时,通常将Dim语句放在过程的开头。”