VBA /常规 - 获取对包含其他对象的对象的引用

时间:2016-04-01 05:38:41

标签: vba excel-vba excel

我在VBA中有一个编码问题,但我想它也扩展到了基本的编程过程。

我正在为一个企业做一些事情,企业有不同的部分,每个部分都有一个他们需要做的工作列表,每个工作都有一个任务列表。每个部门都有一个技术人员团队,可以完成工作。

所以我编写了一个Section对象,其中包含一个技术人员对象数组以及一个作业对象数组,每个作业对象都有一个任务对象数组。

有4或5个部分,因此有多个部分对象。

对于数组中的作业对象,是否有一种优雅的方式来获取它恰好位于哪个部分对象的引用,然后能够访问正确的技术人员数组?

1 个答案:

答案 0 :(得分:0)

这有三种显而易见的方式(但还有很多其他方法)。在下面的示例中,我假设了3个类:cSectioncJobscTechnicians

1。创建.Parent属性

在每个子类中定义一个Parent属性,用于存储对Section类的引用,例如在cJob类中:

Public Parent As cSection

您的模块将如此定义属性:

Dim sect as cSection
Dim job as cJobs

set sect = new cSection
set job = new cJobs
set job.Parent = sect

如果您无法访问section个对象且只有job对象,则此类技术非常有用。

2。仅访问section

中的子类

将您的工作和技术人员数组传递到相应的section课程。然后只需从该父类访问您需要的所有内容。如果您引用相关的section类,这将是更好的方法。 cSection可能如下所示:

Private mJobList() As cJobs
Private mTechList() As cTechnicians
Public Property Get JobList()
    JobList = mJobList
End Property
Public Property Get TechList()
    TechList = mTechList
End Property

你的模块可能是这样的:

Dim sect As cSection
Dim job() As cJobs
Dim tech() As cTechnicians

Set sect = New cSection
job = sect.JobList
tech = sect.TechList

3。创建节索引到数组的映射

您可以在某种形式的键列表中获得子类列表。集合将是最明显的,但下面的示例只是一个简单的数组。如果您只有密钥/索引来访问对象,则此技术非常有用:

Dim parentMap(5) As Variant
Dim mapItems(1) As Variant
Dim jobs(5) As cJobs
Dim techs(5) As cTechnicians

mapItems(0) = jobs
mapItems(1) = techs
parentMap(0) = mapItems