VBA将类数组传递给函数

时间:2014-09-11 14:37:02

标签: arrays excel vba excel-vba collections

如果我犯了一些业余错误,请道歉,但我是VBA的新手。 我试图将一个在类中声明的数组填充为属性,但是出了点问题。经过多次搜索,我有两个问题,我似乎无法在其他地方找到:

1 - 是否有更简单的方法可以将数据保存到类似于数组的结构中,我可以将其传递给子函数?类似于数组的结构需要可调整大小,因为在循环的每次迭代检查这些条件之前,我不知道将添加多少组件。
2 - 如何正确地完成将我的类中的数组属性正确传递给另一个函数?让我感到沮丧的是,我想知道如果只是为了理解我做错了什么,或者也许是对VBA的工作方式有什么误解,我该怎么做。

代码结构如下:

我在Segments类中声明了CTask属性,如下所示:

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

我将CTaskSub传递到populateTasks,使用此代码将其定义为Dim tasks() As CTask ReDim tasks(1 To 10) Call populateTasks(tasks)

populateTasks

当我这样做时,Function populateTasks(ByRef tasks() As CTask) 代码使用以下代码接收它:

populateTasks

然后我尝试从名为populateSegments的{​​{1}}调用另一个函数,如下所示:

Call populateSegments(tasks(icount).Segments)

我在populateSegments内收到了像这样的段数组:

Function populateSegments(ByRef Segments() As CSegment)

最后两个代码段是问题所在的位置。细分数组正确填充内部 populateSegments函数,但当我检查数组以查看它是否为populateSegments的调用之下是空的时,则不会tasks(icount).segments数组中的任何内容。在此先感谢您的帮助,如果需要更多信息,请告诉我。

1 个答案:

答案 0 :(得分:1)

你不能使populatesegments成为cTask的方法吗?这避免了问题,是一个更好的设计