9

我正在尝试创建一个类来保存可变数量的项目(它们本身就是另一个类对象)。

所以,我有第 2 课:

' 第 2 类包含每个单独的报价元素(OTC 和 MRC)

私人 pOTC 作为字符串
私有 pMRC 作为字符串
公共属性获取 OTC() 作为字符串
    场外交易 = 场外交易
结束属性
公共属性 Let OTC(Value As String)
    pOTC = 价值
结束属性

公共属性获取 MRC() 作为字符串
    MRC = pMRC
结束属性
公共属性 Let MRC(Value As String)
    pMRC = 值
结束属性

然后 Class 1 包含 Class 2 的数组:

私有 pCurr 作为字符串
私有 pQuote(20) 作为 Class2

公共属性获取 Curr() 作为字符串
    电流 = pCurr
结束属性
公共属性 Let Curr(Value As String)
    pCurr = 值
结束属性

公共属性集 Quote(Index As Integer, cQuote As Class2)
    设置 pQuote(Index) = cQuote
结束属性

公共属性获取报价(索引为整数)作为 Class2
    报价= pQuote(索引)
结束属性

我想做的是:

将 myQuotes 调暗为 Class1
设置 myQuotes = 新 Class1

myQuotes.Curr = "英镑"
myQuotes.Quote(3).OTC = "1200"  

第一行设置 myQuotes.Curr 没有问题,但是当我尝试在数组内设置一个值时,下一行错误与Run-time 91 Object variable 或 With block variable not set

关于我做错了什么以及如何设置类数组中元素的值的任何指针?

提前致谢!

4

3 回答 3

7

当你myQuotes.Quote(3)打电话时Property Get Quote有问题。

您的内部数组 ofClass2未实例化,因此pQuote(Index)指的是 的数组元素Nothing,当myQuotes.Quote(3).OTC =您尝试分配Nothing失败时。

您需要确保pQuote(Index)已实例化;您可以按需执行此操作:

Public Property Get Quote(Index As Integer) As Class2
   If (pQuote(Index) Is Nothing) Then Set pQuote(Index) = New Class2
   Set Quote = pQuote(Index)
End Property

(注意必填项Set

或者通过添加一个初始化例程Class1

Private Sub Class_Initialize()
    Dim Index As Long
    For Index = 0 To UBound(pQuote)
         Set pQuote(Index) = New Class2
    Next
End Sub
于 2013-07-05T11:25:04.153 回答
2

您需要在 Class1 中将它们设置为 New Class2:

For intI = LBOUND(pQuote) to UBOUND(pQuote)
    Set pQuote(intI) =  New Class2
Next IntI

就像您在最终脚本中使用Class1一样。

于 2013-07-05T11:01:55.160 回答
1

也许应该是

Public Property Let Quote(Index As Integer, cQuote As Class2)
    Set pQuote(Index) = cQuote
End Property
于 2013-07-05T10:42:12.960 回答