VBA类模块介绍

同其他编程语言一样,VBA有可以创建类对象,VBA的类对象有自己的属性、方法、事件

公共变量和私有变量的区别

  • 公共变量:可以跨模块调用,使用public关键词,在模块最上方声明
  • 私有变量:只能在本模块类使用,使用private关键词定义,在模块最上方声明
  • 函数、过程未使用关键词声明,默认为public,可以跨模块使用
public i as long   ' 声明公共变量,不同模块都可以调用
private num as byte   ' 声明私有变量,只在当前模块内可以使用

' 未带关键词声明,等同于public声明
Sub public_test()
MsgBox "未带关键词,默认为public,可以跨模块调用该方法"
End Sub

' 使用private声明,只能在当前模块使用
Private Sub private_test()
MsgBox "使用private私有定义,只能在当前模块使用"
End Sub

插入类模块

打开VBE窗口,点击插入-插入类模块,win系统界面可能会有些许区别(win快捷键:alt+f11)
面板左下方,可以修改类命名,这里我们修改类命名为Person
插入类模块

类的属性

  • 直接在类模块声明变量:可随便修改
  • 使用关键词Property定义类属性:可设置只读,修改有效性验证等
    外部过程修改属性值时,会执行Property过程。过程中可以编写代码,对设置的值进行检查,控制其在一个规定的范围中。Property过程有以下3种形式:
    • Property Let:这类过程用来设置类模块的属性值。
    • Property Get:这类过程用来读取类模块的属性值。
    • Property Set:这类过程用来设置对对象的引用。
      在使用Property过程设置属性值时,类模块中的变量可声明为Private类型,避免过程直接修改类模块中变量的值。
      每个Property Get的过程声明行都需要指定属性的名称和数据类型
Public public_var as long   ' 可以在类模块顶部通过public声明一个属性,不过该属性可以在其他模块直接修改

Private m_age As Byte          ' 定义年龄属性
Private m_sex As String     ' 定义性别属性
Private m_name As String    ' 定义姓名属性
Private m_weight As Long    ' 定义体重属性

Property Get age() as Byte
age = m_age    ' 返回年龄值
End Property

Property Let weight(m_weight As Long)    ' let过程必须带一个变量参数赋值
weight = m_weight    ' 设置体重属性
End Property

' Exit Propert语句可以结束Propert过程
Property Let age(a as long)
If a >= 0 And a <= 100 Then  ' 设置范围,变量为数值,且在0-100之间
    m_age = a
Else
	MsgBox "您设置的年龄无效,请输入0-100的数字"
    Exit Property   ' 如果变量无效则结束property过程
End If
End Property

类的方法

同过程、函数,直接在类模块里写函数、过程,即为类的方法

Sub class_method(str as String)
MsgBox "在类里面直接写过程过函数,即为类方法"
MsgBox "向class_method方法里传入参数:" & str
End Sub

' 当然也可以写函数,跟模块里写函数是一样的
Public Function func(num As Integer)
MsgBox num
End Function

类的事件

同工作表,工作簿一样,类也有事件

  • Initialize事件:实例初次创建时触发
  • Terminate事件:最后一个指针释放或破坏时触发

可以用Initialize事件设置对象类的默认属性值;用Terminate事件进行销毁对象前的整理工作。
在类模块下拉列表选择Class,右侧选择对应的事件。
创建类事件

Private Sub Class_Initialize()
m_weight = 60    ' 初始化m_weight变量
End Sub

类的实例调用

现在我们写了这样一个类模块

Public var As Long
Private m_age As Byte          ' 定义年龄属性
Private m_sex As String     ' 定义性别属性
Private m_name As String    ' 定义姓名属性
Private m_weight As Long    ' 定义体重属性

Private Sub Class_Initialize()
m_weight = 66   ' 初始化m_weight变量
End Sub

Property Let weight(w As Long)
m_weight = w     ' 设置weight属性
End Property

Property Get weight() As Long
weight = m_weight     ' 读取weight属性
End Property

Sub class_method()
MsgBox "在类里面直接写过程过函数,即为类方法"
End Sub

Public Function func(num As Integer)
MsgBox num
End Function

Property Let age(a As byte)
If  a >= 0 And a <= 100 Then   ' 设置范围,变量为数值,且在0-100之IsNumeric(a) And间
    m_age = a
Else
    MsgBox "您设置的年龄无效,请输入0-100的数字"
    Exit Property   ' 如果变量无效则结束property过程
End If
End Property


Property Get age() As Byte
age = m_age   ' 读取年龄属性
End Property


我们插入一个模块,创建类实例调用

Sub test1()
Dim m As New Person

m.weight = 171       '设置体重属性
MsgBox m.weight

m.class_method     ' 调用类方法

m.func (111)    ' 调用类函数

m.age = 190
m.age = 27
Debug.Print m.age
End Sub
  • 5
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VBA模块是一种用于创建自定义对象的代码模块。通过模块,您可以定义对象的属性、方法和事件,以及对象与其他对象之间的关系和交互方式。模块使得将代码和数据封装在一个单独的对象中成为可能,从而提高了代码的可复用性和可维护性。 要创建一个模块,请按照以下步骤操作: 1. 在 VBA 编辑器中,选择“插入”菜单中的“模块”。 2. 在模块中,定义的属性和方法,以及事件过程。 3. 在需要使用该的代码模块中,声明该的变量并使用“New”关键字来实例化该。例如: ``` Dim myObject As New MyClass ``` 4. 使用该的属性、方法和事件过程来操作对象。 以下是一个简单的模块示例: ``` ' MyClass 模块 Private m_name As String Public Property Let Name(value As String) m_name = value End Property Public Property Get Name() As String Name = m_name End Property Public Sub SayHello() MsgBox "Hello, " & m_name & "!" End Sub ``` 在上面的示例中,我们定义了一个名为“MyClass”的,该具有一个名为“Name”的属性和一个名为“SayHello”的方法。在我们需要使用该的代码模块中,我们可以这样来实例化该并使用它: ``` ' 使用 MyClass Dim myObject As New MyClass myObject.Name = "John" myObject.SayHello ``` 以上代码将创建一个名为“myObject”的 MyClass 对象,并设置其 Name 属性为“John”,然后调用其 SayHello 方法来显示一个消息框,其中包含“Hello, John!”这个消息。 当然,模块的功能远不止如此,您可以在其中定义更复杂的属性、方法和事件,以及实现多态、继承等高级 OOP 概念。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值