【问题标题】:VBA Passing Class Arrays to FunctionsVBA 将类数组传递给函数
【发布时间】: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


【解决方案1】:

你不能让populatesegments 成为cTask 的方法吗?这样可以避免问题并且是更好的设计

【讨论】:

  • 你能给我一个代码的小例子,以正确地将数组传递给该方法和方法签名,以便我可以确保正确地执行它吗?我已经尝试了很多次,但总是出错。
  • 这确实对我的回答很有帮助,但我还想指出另一个也帮助我解决问题的问题here。在我将 populateSegments 设为 cTask 的方法后,由于某种原因,给定索引,我没有从 pSegments 中获取项目。我创建了一个自定义方法,而不是一个属性,以简单地从 pSegments 返回一个项目,给定一个索引,它现在工作得很好。谢谢大家的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-17
  • 2020-08-19
  • 1970-01-01
  • 2014-12-17
  • 2016-07-07
  • 2013-08-13
相关资源
最近更新 更多