Arrays Can';t使用数组成员变量分配数组
我有一个类,其中一个成员变量是数组。我试图将数组分配给对象,但一直出现“无法分配数组”编译错误。我也很好奇如何在对象中获得数组的UBound。UBound(obj.array)不编译。我正在使用Excel07VBAArrays Can';t使用数组成员变量分配数组,arrays,excel,class,vba,object,Arrays,Excel,Class,Vba,Object,我有一个类,其中一个成员变量是数组。我试图将数组分配给对象,但一直出现“无法分配数组”编译错误。我也很好奇如何在对象中获得数组的UBound。UBound(obj.array)不编译。我正在使用Excel07VBA '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 = N
'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
将数组参数传递给类属性似乎有问题 您可以通过将Let参数切换为变量来解决此问题:
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正在尝试查找字符串数据类型的UBound,因此这是一个问题。另外,您没有在MsgBox中将参数传递给ary。ary属性返回一个字符串,但您使用的是Set关键字,这是另一个问题。尝试了您的解决方案,但仍然收到相同的错误。我应该提到的是,当我对get和let属性使用ari时,我之前遇到了一个“相同属性的属性过程的定义不一致”错误。将get to avry更改为解决方法。公共属性Get ary(ByVal索引长度),因为字符串Public Property Let ary(ByRef Value()作为变量)给出了该错误。这可能与数组分配问题有关。如果Let/Set和Get类型不同(在您的例子中是数组与字符串),则应该使用不同的属性名。这就是您最初的“定义不一致”错误告诉您的。注意test()中的Msgbox()调用有一个问题:您的属性ary Get返回一个字符串,但您试图通过调用返回值上的UBound()将其视为一个数组。谢谢,这很有效。我没有使用UBound,而是添加了第三个成员变量,该变量在数组赋值运算符的for循环中充当计数器。我还必须将pary声明为pary()