当前位置: 首页 > ds >正文

【ExcelVBA 】类模块学习从入门到放弃

📚 VBA 类模块全面学习指南

类模块是 VBA 中实现**面向对象编程(OOP)**的核心工具,允许创建自定义对象,封装数据和行为。以下从基础到高级的系统化教程,助你掌握类模块的核心用法。


一、类模块基础
1. 创建类模块
  1. 插入类模块

    • VBE(Visual Basic Editor)中:插入类模块(默认名如 Class1)。
    • 重命名类模块:在 属性窗口 修改 (名称)(如 clsCustomer)。
  2. 定义属性与方法

    ' clsCustomer 类模块代码
    Private pName As String
    Private pAge As Integer' 属性定义(Property Let/Get)
    Public Property Let Name(Value As String)pName = Value
    End Property
    Public Property Get Name() As StringName = pName
    End PropertyPublic Property Let Age(Value As Integer)If Value >= 0 Then pAge = Value
    End Property
    Public Property Get Age() As IntegerAge = pAge
    End Property' 方法
    Public Sub DisplayInfo()MsgBox "姓名:" & pName & vbNewLine & "年龄:" & pAge
    End Sub
    

二、实例化与使用类对象
1. 创建对象
' 在标准模块中使用
Sub DemoClass()Dim customer As clsCustomerSet customer = New clsCustomer  ' 必须使用 New 和 Setcustomer.Name = "张三"  ' 设置属性customer.Age = 30customer.DisplayInfo    ' 调用方法
End Sub
2. 销毁对象
  • VBA 自动处理对象释放,也可手动释放:
    Set customer = Nothing
    

三、类模块高级功能
1. 集合类(封装多个对象)
  1. 定义集合类(clsCustomers

    Private colCustomers As CollectionPrivate Sub Class_Initialize()Set colCustomers = New Collection
    End SubPublic Sub Add(customer As clsCustomer)colCustomers.Add customer
    End SubPublic Function Item(Index As Variant) As clsCustomerSet Item = colCustomers(Index)
    End FunctionPublic Function Count() As LongCount = colCustomers.Count
    End Function
    
  2. 使用集合类

    Sub ManageCustomers()Dim customers As clsCustomersSet customers = New clsCustomersDim cust As clsCustomerSet cust = New clsCustomercust.Name = "李四"customers.Add custMsgBox "客户数量:" & customers.Count
    End Sub
    

2. 事件(Event)
  1. 在类模块中声明事件

    ' clsCustomer 类模块
    Public Event DataSaved(Success As Boolean)Public Sub SaveToDB()On Error Resume Next' 模拟保存操作If Err.Number = 0 ThenRaiseEvent DataSaved(True)ElseRaiseEvent DataSaved(False)End If
    End Sub
    
  2. 响应事件(标准模块)

    Dim WithEvents cust As clsCustomerSub TestEvent()Set cust = New clsCustomercust.SaveToDB
    End SubPrivate Sub cust_DataSaved(Success As Boolean)MsgBox IIf(Success, "保存成功!", "保存失败!")
    End Sub
    

四、实战案例:员工管理系统
1. 定义类模块
  • 员工类(clsEmployee

    Private pID As String
    Private pSalary As DoublePublic Property Let ID(Value As String)pID = Value
    End Property
    Public Property Get ID() As StringID = pID
    End PropertyPublic Property Let Salary(Value As Double)If Value >= 0 Then pSalary = Value
    End Property
    Public Property Get Salary() As DoubleSalary = pSalary
    End Property
    
  • 部门类(clsDepartment

    Private colEmployees As CollectionPrivate Sub Class_Initialize()Set colEmployees = New Collection
    End SubPublic Sub AddEmployee(emp As clsEmployee)colEmployees.Add emp
    End SubPublic Function TotalSalary() As DoubleDim emp As clsEmployee, sum As DoubleFor Each emp In colEmployeessum = sum + emp.SalaryNextTotalSalary = sum
    End Function
    
2. 使用案例
Sub ManageEmployees()Dim hrDept As clsDepartmentSet hrDept = New clsDepartmentDim emp1 As clsEmployeeSet emp1 = New clsEmployeeemp1.ID = "E001"emp1.Salary = 5000hrDept.AddEmployee emp1MsgBox "部门总工资:" & hrDept.TotalSalary
End Sub

五、注意事项与最佳实践
内容说明
命名规范类名以 cls 开头(如 clsCustomer),变量名以对象类型缩写开头(如 cust)。
内存管理使用 Set obj = Nothing 显式释放对象,避免内存泄漏。
错误处理在类方法中添加 On Error 语句,确保对象状态安全。
封装原则通过 Private 变量隐藏实现细节,仅暴露必要的属性和方法。

通过类模块,你可以将复杂逻辑封装成独立对象,显著提升代码的可维护性和复用性。建议在实际项目中逐步应用这些技巧,加深理解!

http://www.xdnf.cn/news/8827.html

相关文章:

  • 数据仓库中的业务域与数据域
  • 关于PHP的详细介绍,结合其核心特点、应用场景及2025年的技术发展趋势,以清晰的结构呈现:
  • 用HTML5实现实时ASCII艺术摄像头
  • git子模块--常见操作
  • HarmonyOS NEXT 技术特性:分布式软总线技术架构
  • OpenLayers 加载全屏显示控件
  • 【Fargo】razor框架调用mediasoup的发送和接收能力
  • FFT Shift
  • 双目视野高精度拼接
  • PCB设计教程【入门篇】——PCB设计基础-PCB构成与组成
  • DeepONet深度解析:原理、架构与实现
  • python+vlisp实现对多段线范围内土方体积的计算
  • 连接表、视图和存储过程
  • JDK21深度解密 Day 3:模式匹配全解析
  • pvlib(太阳轨迹)
  • nginx的一些配置的意思
  • 攻防世界RE-666
  • 发电厂进阶,modbus TCP转ethernet ip网关如何赋能能源行业
  • java线程中断的艺术
  • spike:一款协议模糊测试器工具包!全参数详细教程!Kali Linux教程!
  • TF-IDF和词袋模型
  • FPGA高速接口 mipi lvds cameralink hdml 千兆网 sdi
  • 「Python教案」输入输出函数的使用
  • c语言和系统的文件接口
  • 427. 建立四叉树
  • OpenLayers 加载动画控件
  • 对比Redis与向量数据库(如Milvus)在AI中的应用
  • PyQt5高效布局指南:QTabWidget与QStackedWidget实战解析
  • LangChain4j第三篇: RAG的简单应用与实践
  • 留存率问题