VBA - 2D维对象数组,其中维度1与维度2中的自定义对象类型不同

时间:2018-01-04 15:51:27

标签: arrays vba object

在VBA宏中,我希望创建一个对象的2D数组,其中第一个维度是与第二个维度不同的自定义对象类型。

我有类模块“工作请求”和“组件”。工作请求可以包含多个组件,因此需要2D阵列。

如果一维对象数组声明为:

Dim ActiveWorkRequests(10) As WorkRequest

我希望遵循以下逻辑:

Dim ActiveWorkRequests(10, 10) As WorkRequest, Component

感谢您的时间和见解。

1 个答案:

答案 0 :(得分:1)

使用类很好,但是您需要知道访问它们的最佳方法。

以下是我的表现。

<强>组件

首先,创建您的Component课程。这是一个只有Number属性的简单类,可以访问和写入(因此GetLet

Option Explicit

Private pNumber As Long

Public Property Get Number() As Long
    Number = pNumber
End Property

Public Property Let Number(ByVal Value As Long)
    pNumber = Value
End Property

<强> WorkRequest

然后创建您的WorkRequest课程。工作请求包含10个组件,当我创建组件时,我给它们一个数字(随机)。我有一个Property,允许我从Get

Component WorkRequest Option Explicit Private pComponents(1 To 10) As Component Private Sub Class_Initialize() Dim i As Long Dim c As Component For i = 1 To 10 Set c = New Component c.Number = Application.WorksheetFunction.RandBetween(1, 100) Set pComponents(i) = c Next i End Sub Public Property Get Component(componentNumber As Long) As Component Set Component = pComponents(componentNumber) End Property
Option Explicit

Sub Test()
    Dim i As Long
    Dim wr As WorkRequest
    Dim ActiveWorkRequests(1 To 10) As WorkRequest

    For i = 1 To 10
        Set wr = New WorkRequest 'containing 10 components
        Set ActiveWorkRequests(i) = wr
    Next i

    Debug.Print ActiveWorkRequests(5).Component(9).Number
End Sub
  

标准模块

     

然后,最后,在标准代码模块中,您可以访问组件   像这样:

ActiveWorkRequests(5).Component(9).Number
     

在这个例子中我使用过   ..(1)..(1)但它可能是   从..(10)..(10) 67 43 29 65 20

的任何内容

正如预期的那样,这是立即窗口中的输出:

Component

这些是我们在创建WorkRequest个对象时分配给body个对象的随机数。