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
参与评论 您还未登录,请先 登录 后发表或查看评论
<p> <span style="font-size:24px;">      本课程属性Excel VBA中比较高阶的课程,主要讲解关于各种事件的应用,各种控件的应用,如果使用模块,如果在VBA用调用SQL语句去处理数据库中的数据等操作。学习完成本课后,你可以在Excel中开发各种小型应用系统。以下是课程主要内容。</span> </p> <p> <span style="font-size:24px;background-color:#009900;color:#FFFFFF;"><strong>第1章:工作表,工作簿常用事件。</strong></span><br /><br /><span style="font-size:24px;background-color:#009900;color:#FFFFFF;"><strong>第2章:</strong></span><span style="font-size:24px;background-color:#009900;color:#FFFFFF;"><strong>窗体控件应用</strong></span><br /><br /><span style="font-size:24px;background-color:#009900;color:#FFFFFF;"><strong>第3章:</strong></span><span style="font-size:24px;background-color:#009900;color:#FFFFFF;"><strong>ActiveX控件应用</strong></span><br /><br /><span style="font-size:24px;background-color:#009900;color:#FFFFFF;"><strong>第4章:</strong></span><span style="font-size:24px;background-color:#009900;color:#FFFFFF;"><strong>模块应用</strong></span><br /><br /><span style="font-size:24px;background-color:#009900;color:#FFFFFF;"><strong>第5章:</strong></span><span style="font-size:24px;background-color:#009900;color:#FFFFFF;"><strong>vba+ado+sql</strong></span><br /><br /><span style="font-size:24px;background-color:#009900;color:#FFFFFF;"><strong>第6章:</strong></span><span style="font-size:24px;background-color:#009900;color:#FFFFFF;"><strong>实战应用(考试系统开发)</strong></span><br /><span style="font-size:24px;"></span> </p>

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

me_to_007

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值