《VBA中类的解读及应用》教程【10165646】是我推出的第五套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。
类,是非常抽象的,更具研究的价值。随着我们学习、应用VBA的深入,有必要理解这些抽象的理论知识。对象,类,过程,方法,属性,事件,接口,接口如何实现等等。掌握了这些理论,不仅对于VBA这种寄生语言的实质有所深入的理解,也对自然界的很多事物将同样有所感悟。目前,这套教程程序文件已经通过32位,64位两种office系统测试。
这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:第六讲:构建类的事件(下)
【分享成果,随喜正能量】时间是刹那刹那的过,刹那刹那的催人老。勿待老来方学道,孤坟多是少年人。用功的人要善于调和身心,务使心平气和,无挂无碍,
无我无人,行住坐卧,妙合玄机。。
第六讲 如何构建类的事件
大家好,今日我们继续讲解VBA中类的解读及应用,今日的内容是如何构建类的事件。这讲的内容虽然枯燥,但对于学习非常有用。
3类事件的实例讲解,计算器的实现
下面我们通过一个实例来理解上面的讲解,这个实例有点像计数器。我们每次点击数字的时候,在TEXTBOX控件中会显示数字。
思路:我们在一个窗体上建立10个数字按钮及清空按钮,并建立一个textbox的控件用于显示点击的数字,显示的数字也就是按钮的Caption.
实现的过程思路:构建一个myclass的类,在这个类中定义一个mycmd的对象,并应用这个对象的点击事件。我们看下面的代码:
类模块myclass的代码
Option Explicit
Public WithEvents mycmd As CommandButton
Private Sub mycmd_Click()
If mycmd.Caption = "清空" Then
UserForm2.TextBox1 = ""
Else
If mycmd.Caption = "0" And UserForm2.TextBox1 = "" Then
UserForm2.TextBox1 = ""
Else
UserForm2.TextBox1 = UserForm2.TextBox1 & mycmd.Caption
End If
End If
End Sub
窗体UserForm2的代码
Dim mycol As New Collection
Private Sub UserForm_Initialize()
Dim i%
Dim myct As MyClass
For Each r In Me.Controls
If TypeName(r) = "CommandButton" Then
Set myct = New MyClass
Set myct.mycmd = r
mycol.Add myct
End If
Next
tt = mycol.Count
Set myct = Nothing
End Sub
代码截图:
代码分析:
1) Public WithEvents mycmd As CommandButton这行预先声明mycmd作为CommandButton一个事件源的对象。
2) Private Sub mycmd_Click()
If mycmd.Caption = "清空" Then
UserForm2.TextBox1 = ""
Else
If mycmd.Caption = "0" And UserForm2.TextBox1 = "" Then
UserForm2.TextBox1 = ""
Else
UserForm2.TextBox1 = UserForm2.TextBox1 & mycmd.Caption
End If
End If
End Sub
上述过程是类模块的事件过程,是处理类对象在响应点击动作时的一系列操作。
3) 在窗体的构建函数中,执行下面的代码:
Dim myct As MyClass
For Each r In Me.Controls
If TypeName(r) = "CommandButton" Then
Set myct = New MyClass
Set myct.mycmd = r
mycol.Add myct
End If
Next
代码的运行:
首先要在窗体上每个控件进行循环,对于CommandButton控件,定义为新的MYCLASS类对象myct,然后对这个新的类进行set赋值,此后这个对象将响应mycd对象的系列事件了。
点击,清空后会清空上述输入的数据。
今日内容回向:
1 类的事件是如何创建的?
2 什么是类的事件?
本讲内容参考程序文件:VBA-CLASS(1-28).xlsm
今日内容回向:
1 类的事件是如何创建的?
2 什么是类的事件?
本讲内容参考程序文件:VBA-CLASS(1-28).xlsm
我20多年的VBA实践经验,全部浓缩在下面的各个教程中: