在VBA宏中,我希望创建一个对象的2D数组,其中第一个维度是与第二个维度不同的自定义对象类型。
我有类模块“工作请求”和“组件”。工作请求可以包含多个组件,因此需要2D阵列。
如果一维对象数组声明为:
Dim ActiveWorkRequests(10) As WorkRequest
我希望遵循以下逻辑:
Dim ActiveWorkRequests(10, 10) As WorkRequest, Component
感谢您的时间和见解。
答案 0 :(得分:1)
使用类很好,但是您需要知道访问它们的最佳方法。
以下是我的表现。
<强>组件强>
首先,创建您的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
个对象时分配给body
个对象的随机数。