vba - 创建嵌套类

标签 vba excel

我正在尝试在 VBA 中创建一个嵌套类。

到目前为止,我已经成功创建了以下内容:

OurCompany.Department.Employee("John")

如何创建几组部门,以便可以单独存储数据。 像这样的事情

OurCompany.Department("Finance").Employee("John") = "Employee Number 100"
OurCompany.Department("Finance").Employee("Kim") = "Employee Number 101"
OurCompany.Department("Engineering").Employee("Sam") = "Employee Number 124"

cDeparment 类

Private pDepartmentEmployee As Collection
Public Property Get Department(RefString As String) As cEmployee

    Set Department = pDepartment.Item(RefString)

End Property

Public Property Set Department(RefString As String, ByVal objDepartEmployee As cEmployee)

    pDepartmentEmployee.Add objDepartEmployee, RefString

End Property

cEmployee类

Private pEmployee As Collection
Public Property Get Employee(RefKey As String) As String

    Employee = pEmployee.Item(RefKey)

End Property

Public Property Let Employee(RefKey As String, RefItem As String)

    pEmployee.Add Item:=RefItem, Key:=RefKey

End Property

最佳答案

我强烈建议阅读this中的答案帖子包括任何附加的引用资料。

尽管如此,一个简单的实现可能如下。

公司类别:

<小时/>
Option Explicit
Private mDepartmentsList As Object

Public Property Get Department(ByVal StringKey As String) As Department
    With mDepartmentsList
        If Not .Exists(StringKey) Then
            Dim objDepartment As New Department
            .Add StringKey, objDepartment
        End If
    End With

    Set Department = mDepartmentsList(StringKey)
End Property

Public Property Get Keys() As Variant
    Keys = mDepartmentsList.Keys
End Property

Private Sub Class_Initialize()
    Set mDepartmentsList = CreateObject("Scripting.Dictionary")
End Sub

Private Sub Class_Terminate()
    Set mDepartmentsList = Nothing
End Sub

院系类别:

<小时/>
Option Explicit
Private mEmployeesList As Object

Public Property Get Employee(ByVal StringKey As String) As String
    Employee = mEmployeesList(StringKey)
End Property

Public Property Let Employee(ByVal StringKey As String, ByVal StringValue As String)
    mEmployeesList(StringKey) = StringValue
End Property

Public Property Get Keys() As Variant
    Keys = mEmployeesList.Keys
End Property

Private Sub Class_Initialize()
    Set mEmployeesList = CreateObject("Scripting.Dictionary")
End Sub

Private Sub Class_Terminate()
    Set mEmployeesList = Nothing
End Sub

测试:

<小时/>
Option Explicit

Sub TestCompanyClass()

    Dim OurCompany As Company
    Set OurCompany = New Company

    With OurCompany
        .Department("Finance").Employee("John") = "Employee Number 100"
        .Department("Finance").Employee("Kim") = "Employee Number 101"
        .Department("Engineering").Employee("Sam") = "Employee Number 124"
    End With

    Dim d As Variant, e As Variant
    With OurCompany
        For Each d In .Keys
            Debug.Print "Department: " & d
            For Each e In .Department(d).Keys
                Debug.Print vbTab & "Employee: " & e & " - " & .Department(d).Employee(e)
            Next e
        Next d
    End With

    Set OurCompany = Nothing
End Sub

输出:

<小时/>
Department: Finance
    Employee: John - Employee Number 100
    Employee: Kim - Employee Number 101
Department: Engineering
    Employee: Sam - Employee Number 124

关于vba - 创建嵌套类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44965938/

相关文章:

excel - ActiveDocument.SaveAs2 在 Excel 2000 中不起作用,但在 2010 和 2016 中正常

vba - Excel 宏更改文本框颜色

sql-server - Powerpivot sql 查询失败 - 无法将值转换为表列请求的数据类型

javascript - 将 html 表导出到 Excel 数字成为日期

vba - 搜索两个值并在循环中复制其间的所有内容

excel - VBA查找和替换文件路径的一部分

vba - 运行时错误 52 文件名或编号错误

vba - 简单 VBA 矩阵代码中的类型不匹配错误

excel - 计算数组公式

excel - 如何从多个单元格范围中找到最小值(不包括零)