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

问题描述 投票:1回答:1

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

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

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

Dim ActiveWorkRequests(10) As WorkRequest

我希望有一些遵循以下逻辑的东西:

Dim ActiveWorkRequests(10, 10) As WorkRequest, Component

感谢您的时间和见解。

arrays vba object
1个回答
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对象的随机数。

© www.soinside.com 2019 - 2024. All rights reserved.