大家好,我们今日继续讲解VBA代码解决方案的第96讲内容:利用类模块完成多个控件的统一相应。为了说明类模块的作用,我们先设计一个场景,我们在TextBox1、TextBox2、TextBox3中输入完数据后,利用文本框的Change事件使TextBox4显示其三个文本框值相加的和,需要在每一个文本框的Change事件中写上相同的重复代码,使用类模块可以简化代码。
那么什么类模块呢?类模块与窗体模块类似,只是没有可见的用户界面。可以使用类模块创建含有方法和属性代码的自己的对象。使用类模块可以创建自定义的类,使用此类作为模板创建对象。类模块包含一系列的属性,方法和事件,用来和其他对象或创建对象的代码交互。
下面看我们的实例讲解:有四个文本框,其中三个用来输入数据,一个用来显示其他三个文本框相加后的合计数,首先打开VBE,插入一个类模块建立一个类,类模块的名字就是类的名字修改为"mynzcmds",在类模块中输入下面的代码:
Public WithEvents mynzcmd As MSForms.TextBox
代码解析:
使用Public语句声明变量mynzcmd是用来响应由TextBox对象触发的事件的对象变量。
我们还需要补充一个概念,就是窗体的Initialize事件。Initialize 事件即初始化事件,任何窗体生命周期的第一个事件都是Initialize。只要在项目中使用了窗体的名称,在创建实际窗口及其控件之前,都会发生initialize事件。可以在initialize事件处理过程中正确地初始化窗体变量,它在Load事件之前发生。
在窗体的Initialize事件中写入下面的代码:
Dim mynzcol As New Collection
Private Sub UserForm_Initialize()
Dim i As Integer
Dim mynzmyc As mynzcmds
For i = 1 To 3
Set mynzmyc = New mynzcmds
Set mynzmyc.mynzcmd = Me.Controls("TextBox" & i)
mynzcol.Add mynzmyc
Next
Set mynzmyc = Nothing
End Sub
代码解析:
第1行代码在模块顶部声明变量mynzcol的类型为集合。
第5行到第9行代码,将窗体中的三个文本框赋给mynzcol集合。
在类模块中写入下面的代码:
Private Sub mynzcmd_Change()
Dim i As Integer
Dim mynzDval As Double
For i = 1 To 3
mynzDval = mynzDval + Val(UserForm2.Controls("TextBox" & i))
UserForm2.TextBox4.Value = mynzDval
Next
End Sub
代码解析:
窗体中的3个文本框统一的Change事件,当任何一个文本框中的数据发生变化时,所有文本框相加的合计数显示在最后一个文本框中。
代码截图:
类模块截图:
代码运行:
当录入数字时:求和结果会实时改变
今日内容回向:
1 什么是类模块?
2 上述不用类模块可否能实现呢?