不能使用数组成员variables来分配数组

我有一个类的成员variables之一是一个数组。 我想分配一个数组的对象,但不断收到'不能分配数组'编译错误。 另外我很好奇如何获得对象中的数组的UBound。 UBound(obj.array)不能编译。 我正在使用excel 07 vba。

'Test routine that keeps failing Sub test() Dim Arr(2) As String Arr(0) = "" Arr(1) = "Pizza" Arr(2) = "Hoes" Dim obj As Cats Set obj = New Cats obj.avry = Arr obj.field = 4 MsgBox UBound(obj.ary) End Sub 'Class declaration Private pary() As String Private pfield As Long Public Property Get ary(ByVal index As Long) As String Set ary = pary(index) End Property Public Property Let avry(Value() As String) ReDim pary(UBound(Value)) As String For i = LBound(Value) To UBound(Value) pary(i) = Value(i) Next i End Property Public Property Get field() As Long field = pfield End Property Public Property Let field(Value As Long) pfield = Value End Property Private Sub Class_Initialize() pfield = 0 End Sub 

将数组parameter passing给类属性似乎有一个问题。

您可以通过将Let参数切换到Variant来解决此问题:

 Public Property Let avry(ByRef arrVal As Variant) Dim i As Integer If IsArray(arrVal) Then ReDim pary(LBound(arrVal) To UBound(arrVal)) For i = LBound(arrVal) To UBound(arrVal) pary(i) = arrVal(i) Next i End If End Property 

这对我有效

 Sub test() Dim Arr(2) As String Arr(0) = "" Arr(1) = "Pizza" Arr(2) = "Hoes" Dim obj As Cats Set obj = New Cats obj.avry = Arr obj.field = 4 MsgBox obj.ary(2) End Sub Public Property Get ary(ByVal index As Long) As String ary = pary(index) End Property Public Property Let avry(vValue As Variant) ReDim pary(UBound(vValue)) As String Dim i As Long For i = LBound(vValue) To UBound(vValue) pary(i) = vValue(i) Next i End Property Public Property Get field() As Long field = pfield End Property Public Property Let field(Value As Long) pfield = Value End Property Private Sub Class_Initialize() pfield = 0 End Sub 

正如Tim所说,你可以把数组作为一个变体。 您的MsgBox试图find一个string数据types的UBound,所以这是一个问题。 此外,您没有将一个parameter passing给MsgBox中的ary。 ary属性返回一个string,但是您使用的是Set关键字,这是另一个问题。