在VBA中初始化无限数量的类:使用变量来命名类的实例

时间:2014-01-12 17:13:33

标签: vba class excel-vba excel

与往常一样,这可能是一个新问题,但这里有:

我有一个包含15个属性的类。每个类别代表一个库存项目的信息(有多少,最近发货了多少等)。每次通过传递一个股票代码来初始化一个类时,它会从其他来源收集所有数据并将其存储为该类的属性。

我希望能够初始化 n 类的数量,具体取决于列表的长度(从不超过200)。我想用它们的股票代码命名这些类,以便我可以稍后调用这些信息并添加到它中。唯一的问题是我不知道如何使用变量来命名一个类。我真的不想写出200个课程,因为我确信有比Dim ing:Stock1 As C_ICODE, Stock2 As C_ICODE, Stock3 As C_ICODE等更好的方法,并按顺序初始化它们,直到输入(来自ActiveCell= ""或者它的最大列表长度为200.如果可能的话,我想创建尽可能多的类实例,并生成类似这样的内容:

伪代码:

For Each xlCell In xlRange
    strIN = xlCell.Value

    Dim ICode(strIN) As New C_ICODE

    ICode(strIN).lIcode = strIN
Next

Let ting classname.lIcode = strIN为类提供了所需的所有用户输入,然后执行各种函数和子程序以获取其他14个属性。

如果有人能告诉我VBA中是否有可能这样做,我将非常感激,如果可以的话,我该如何解决呢?绝对努力寻找相关信息。

2 个答案:

答案 0 :(得分:6)

您可以使用Dictionary对象:

Dim ICode As Object
Set ICode = CreateObject("Scripting.Dictionary")

For Each xlCell In xlRange
    strIN = xlCell.Value

    ICode.Add strIN, New C_ICODE

    ICode(strIN).lIcode = strIN
Next

答案 1 :(得分:2)

我刚刚对此进行了快速测试,看起来它似乎对您有用。您可以创建一个数组来保存类的多个实例。

Sub thing()

    Dim cArray(1 To 10) As Class1
    Dim x As Long

    For x = 1 To UBound(cArray)
        Set cArray(x) = New Class1
    Next

    ' Assume the class has a property Let/Get for SomeProperty:
    For x = 1 To UBound(cArray)
        cArray(x).SomeProperty = x * 10
    Next

    For x = 1 To UBound(cArray)
        Debug.Print cArray(x).SomeProperty
    Next

End Sub