Tho*_*eod 13 arrays vba class return-value byref
如果通过引用返回数组,为什么不能执行以下操作:
'Class1 class module
Private v() As Double
Public Property Get Vec() As Double()
Vec = v()
End Property
Private Sub Class_Initialize()
ReDim v(0 To 3)
End Sub
' end class module
Sub Test1()
Dim c As Class1
Set c = New Class1
Debug.Print c.Vec()(1) ' prints 0 as expected
c.Vec()(1) = 5.6
Debug.Print c.Vec()(1) ' still prints 0
End Sub
Run Code Online (Sandbox Code Playgroud)
Cla*_*n S 30
你没有let属性.此外,get属性返回整个数组,而不仅仅是有问题的元素.将属性Get的返回类型从Double()更改为plain Double.添加属性让.请注意,它需要两个输入,但只传递一个输入.假设最后一个变量(在本例中为MyValue)从=符号后面的任何值获取它的值.在Test1()的早期某处放置一个断点,看看这些值在Locals窗口中是如何受到影响的.比较原始代码与我的代码创建的变量:
'Class1 class module
Private v() As Double
Public Property Get Vec(index As Long) As Double
Vec = v(index)
End Property
Public Property Let Vec(index As Long, MyValue As Double)
v(index) = MyValue
End Property
Private Sub Class_Initialize()
ReDim v(0 To 3)
End Sub
' end class module
'Begin module
Sub Test1()
Dim c As Class1
Set c = New Class1
Debug.Print c.Vec(1) ' prints 0 as expected
c.Vec(1) = 5.6
Debug.Print c.Vec(1) ' prints 5.6
End Sub
'End module
Run Code Online (Sandbox Code Playgroud)
Ste*_*sen 12
在VBA中,除非通过ByRef
参数返回,否则永远不会通过引用返回数组.此外,无论何时使用=
将数组分配给变量,您都已经创建了一个数组的新副本,即使您将其分配给过程内部的ByRef参数,所以您几乎没有运气使这项工作.
一些替代方案是......