【发布时间】:2014-11-05 13:44:10
【问题描述】:
抱歉,如果我犯了一些业余错误,但我是 VBA 新手。
我正在尝试将在类中声明的数组填充为属性,但是出了点问题。经过大量搜索,我有两个问题似乎在其他任何地方都找不到:
1 - 有没有一种更简单的方法可以将数据保存到一个类似数组的结构中,我可以将其从子函数传递给函数?类似数组的结构需要调整大小,因为在循环的每次迭代检查这些条件之前,我不知道要添加多少组件。
2 - 我如何正确地完成将我的类中的数组属性正确地传递给另一个函数?我很沮丧,我想知道如果只是为了了解我做错了什么,或者我对 VBA 的工作方式有什么误解,该怎么做。
代码结构如下:
我在 CTask 类中声明了一个 Segments 属性,如下所示:
Private pSegments() As CSegment
Public Property Get Segments() As CSegment()
Segments = pSegments()
End Property
Public Property Get segment(index As Integer) As CSegment
segment = pSegments(index)
End Property
Public Property Let Segments(Value() As CSegment)
pSegments() = Value()
End Property
我从Sub 传递CTask,使用此代码将其定义为populateTasks:
Dim tasks() As CTask
ReDim tasks(1 To 10)
Call populateTasks(tasks)
当我这样做时,populateTasks 代码使用以下代码接收它:
Function populateTasks(ByRef tasks() As CTask)
然后我尝试从populateTasks 调用另一个名为populateSegments 的函数,如下所示:
Call populateSegments(tasks(icount).Segments)
我在populateSegments 中接收到segments 数组,如下所示:
Function populateSegments(ByRef Segments() As CSegment)
最后两个代码 sn-ps 是问题所在。段数组在populateSegments 函数内部 正确填充,但是当我检查数组以查看它是否在对populateSegments 的调用下方为空时,tasks(icount).segments 中没有任何内容大批。提前感谢您的帮助,如果需要更多信息,请告诉我。
【问题讨论】:
-
您的属性返回数组的副本。您需要填充副本,然后将其分配回属性以更新类中的数组。
-
@Rory 所以我需要使用 AndyBrazil 的解决方案或类似的解决方案?
-
您不必这样做(您可以按照我的描述进行操作),但将其作为 cTask 类的方法是有意义的。
-
@Rory 那么如何以正确的方式将其分配回属性?我尝试并不断收到错误。
标签: arrays vba excel collections