在类中合并两个数组属性

时间:2014-10-21 08:56:49

标签: vb.net vba excel-vba excel

我有一个Class(TestClass),它具有以下三个属性:

Private myArr1() As String
Private myArr2() As String
Private myFinalArray() As String

Private Sub Class_Initialize()
    ReDim myArr1(0 To 3)
    ReDim myArr2(0 To 2)
    ReDim myFinalArray(0 To 6)
End Sub
Public Property Get arr1(ByVal index As Long) As Double
    arr1 = myArr1(index)
End Property
Public Property Let arr1(ByVal index As Long, ByVal myvalue As Double)
    myArr1(index) = myvalue
End Property

Public Property Get arr2(ByVal index As Long) As Double
   ...
Public Property Let arr2(ByVal index As Long, ByVal myvalue As Double)
    ...

Public Property Get FinalArray(ByVal index As Long) As Double
    ...
Public Property Let FinalArray(ByVal index As Long, ByVal myvalue As Double)
    ...

这里我们只有两个用数据填充的数组:

Sub test()
Dim t As TestClass
Set t = New TestClass
For i = 0 To 3
    t.arr1(i) = i
Next
For i = 0 To 2
    t.arr2(i) = i
Next
t.GetFinalValues (t)
End Sub

我现在的问题是,这些数组元素必须根据我想为其编写属性的混乱模式重新排列,但它不起作用。我的想法是在我的班级中添加以下功能:

Public Function GetFinalValues(ByRef t As TestClass) As Double()
'Imput parameter arrX can ben the Value as well as the Bench arrays.
Dim arr1(2) As Double
Dim arr2(3) As Double
Dim i As Integer
Dim arrCollection(6) As Double

    arrCollection(0) = t.arr1(0)
    arrCollection(1) = t.arr2(0)
    arrCollection(2) = t.arr2(1)
    arrCollection(3) = t.arr1(1)
    arrCollection(4) = t.arr2(2)
    arrCollection(6) = t.arr1(2)
    arrCollection(5) = t.arr2(3)

'Assign return object
For i = 0 To 6
    FinalArray(i) = arrCollection(i)
Next i
GetFinalValues
End Function

如果我运行此代码,则代码在t.GetFinalValues(t)处停止,从而为我提供Errormessage:Object doesent支持属性或方法。有谁能帮我搞定这个?或者有一个重建的想法,以更好地解决这个问题?

编辑:我添加了vb.net,因为这可能是未指定给vba的构造问题

1 个答案:

答案 0 :(得分:1)

您有两个问题:

首先,您应该从此行中删除括号:

t.GetFinalValues (t)

所以它只是:

t.GetFinalValues t

然后你的函数需要返回一个String数组而不是Double,因为它是私有变量的类型。你的类代码变成这样:

Private Sub Class_Initialize()
    ReDim myArr1(0 To 3)
    ReDim myArr2(0 To 2)
    ReDim myFinalArray(0 To 6)
End Sub
Public Property Get arr1(ByVal index As Long) As Double
    arr1 = myArr1(index)
End Property
Public Property Let arr1(ByVal index As Long, ByVal myvalue As Double)
    myArr1(index) = myvalue
End Property

Public Property Get arr2(ByVal index As Long) As Double
    arr2 = myArr1(index)
End Property
Public Property Let arr2(ByVal index As Long, ByVal myvalue As Double)
    myArr2(index) = myvalue
End Property
Public Property Get FinalArray(ByVal index As Long) As Double
    FinalArray = myArr1(index)
End Property
Public Property Let FinalArray(ByVal index As Long, ByVal myvalue As Double)
    myFinalArray(index) = myvalue
End Property
Public Function GetFinalValues(ByRef t As TestClass) As String()
'Imput parameter arrX can ben the Value as well as the Bench arrays.
Dim arr1(2) As Double
Dim arr2(3) As Double
Dim i As Integer
Dim arrCollection(6) As Double

    arrCollection(0) = t.arr1(0)
    arrCollection(1) = t.arr2(0)
    arrCollection(2) = t.arr2(1)
    arrCollection(3) = t.arr1(1)
    arrCollection(4) = t.arr2(2)
    arrCollection(6) = t.arr1(2)
    arrCollection(5) = t.arr1(3)

'Assign return object
For i = 0 To 6
    FinalArray(i) = arrCollection(i)
Next i
GetFinalValues = myFinalArray
End Function

请注意,您还尝试使用超出arr2中元素数量的t.arr2(3),因此我认为您的意思是t.arr1(3)