我有一个类,其中一个成员变量是一个数组。我想分配一个数组到对象,但不断收到'不能分配数组'编译错误。另外我很好奇如何获得对象中的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
尝试了您的解决方案,并且仍然收到相同的错误。我应该提到,在我使用ary获取和让出属性之前,我得到了'同一个属性的属性过程的定义不一致'错误。作为一种解决方法,将获取更改为avry。公共属性Get ary(ByVal index As Long)As String Public Property让ary(ByRef Value()As Variant)给出该错误。也许这与阵列分配问题有关系。 – postelrich
如果Let/Set和Get类型不同(在您的情况下为数组或字符串),您应该使用不同的属性名称。这就是你最初的“不一致的定义”错误告诉你的。请注意,在test()中调用Msgbox()会有问题:属性ary Get返回一个字符串,但您试图通过在返回值上调用UBound()将其作为数组处理。 –