在VBA宏中,我希望创建一个对象的2D数组,其中第一个维度是与第二个维度不同的自定义对象类型。
我有类模块“工作请求”和“组件”。工作请求可以包含多个组件,因此需要2D阵列。
如果一维对象数组声明为:
Dim ActiveWorkRequests(10) As WorkRequest
我希望有一些遵循以下逻辑的东西:
Dim ActiveWorkRequests(10, 10) As WorkRequest, Component
感谢您的时间和见解。
使用类很好,但是您需要知道访问它们的最佳方法。
这是我怎么做的。
零件
首先,创建你的Component
类。这是一个简单的类,只有一个Number
属性,可以访问和写入(因此Get
和Let
)
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
对象的随机数。