对象类型内的VBA对象类型

时间:2018-06-20 05:51:53

标签: excel vba structure

我在理解如何制作自己的类型对象时遇到了一些麻烦。 我有两个不同的类,我希望我的列表类型被赋予数据类型的对象。

数据类:(请注意,这只是代码的一部分)

Private index As Integer
Private id As String
Private nameID() As String
Private data() As String
Private cnt As Integer

Public Function constructor(value As Integer)
    index = 0
    cnt = value
    id = ""
    ReDim nameID(0 To cnt)
    ReDim data(0 To cnt)
End Function

Property Let setName(value As String)
    nameID(index) = value
End Property

Property Let setData(value As String)
    data(index) = value
    index = index + 1
End Property

Property Get getName()
    getName = nameID
End Property

Property Get getData()
    getData = data
End Property

列表类别:

Private xArray() As dataStruct
Private index As Integer

Public Function constructor(cnt As Integer)
    ReDim xArray(1 To cnt)
    Dim num As Integer
    For num = 1 To cnt
    Set xArray(num) = New dataStruct
    'xArray(num).constructor(10)
    Next
    index = 1
End Function

因此,当我尝试将值从数据类获取到列表类时,就会出现我遇到的问题。我试图将它们设置为彼此相等,并分别分配每个值,但似乎没有任何效果。我收到“运行时错误'438:对象不支持此属性或方法”。如果尝试使用注释的代码,我会越过setID,但在输入setName时会出现类型不匹配,但应为字符串类型的数组。

Property Let addArray(value As dataStruct)
    xArray(index) = value
    'xArray(index).setID = value.getID
    'xArray(index).setName = value.getName
    'xArray(index).setData = value.getData
    'xArray(index).setCnt = value.getCnt
    index = index + 1
End Property

list

[编辑:添加了get和set方法的示例]

1 个答案:

答案 0 :(得分:0)

只需将一个方法添加到每个类中,该方法要么作为另一个类输出,要么将输入作为另一个类。您尚未列出任何属性,因此我将猜测您如何获取价值。

例如,在数据类中

Sub ConvertFromList(values as List)
    Redim data (0 to values.data.count)
    For iterator = 0 to values.data.count
        data(itearator) = values.data(iterator)
    Next iterator
End Sub

我的示例并不漂亮,也不完整-但是开始时没有提供太多信息。但这确实使您知道可以做什么。

一个整洁的解决方案是在类中使用Function / Data导出类中的List