《VBA中类的解读及应用》教程【10165646】是我推出的第五套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。
类,是非常抽象的,更具研究的价值。随着我们学习、应用VBA的深入,有必要理解这些抽象的理论知识。对象,类,过程,方法,属性,事件,接口,接口如何实现等等。掌握了这些理论,不仅对于VBA这种寄生语言的实质有所深入的理解,也对自然界的很多事物将同样有所感悟。目前,这套教程程序文件已经通过32位,64位两种office系统测试。
这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:VBA中类的解读及应用第十三讲:限制复选选择,窗体模块的搭建
【分享成果,随喜正能量】专注地做一件事,做到极致,胜过敷衍地做很多事。不求多,但求精,不求散,但求专。每个人的时间和精力都是有限的,专注于某个领域,沉得住气,静得下心,充分发挥自己的潜能,持续深耕,才能有所作为。。
第十三讲 限制复选选择(中)
大家好,我们今日继续讲解类与类模块的知识,今日讲解限制复选选择第二部分,在上讲中,我们讲了这个问题类模块的构建,我们在类模块中搭建了一个mytadi的类,在这个类中,我们声明了两个相应类事件的对象,一个是xuanzhe类对象,一个是yemian 的类事件。同时在类中,我们还给出了xuanzhe类对象所响应的事件。
3 窗体模块的搭建
我们这讲讲解如何把窗体的对象关联到声明了的响应类事件的对象.如果仅仅是WithEvents声明了响应类事件的对象,不做关联,真的没有任何意义。只有关联到了窗体对象,那么才可以在代码中让这些窗体对象步调一致,听从指挥。
我们先搭建一个窗体,上面有5个选择按钮,分别为OptionButton1到OptionButton5,这5个选择的CAPTION对应ABCDE,同时按钮对应5个选择项目,在窗体的最下边增加一个重置的按钮,在选择错误的时候,可以重置。
我们看窗体的代码:
Dim kuang() As New mydati
Private Sub CommandButton1_Click()
For i = 1 To 5
Controls("OptionButton" & i).Value = False
Controls("OptionButton" & i).Enabled = True
Next
End Sub
Private Sub UserForm_Initialize()
For Each myctl In Me.Controls
If TypeName(myctl) = "OptionButton" Then
m = m + 1
ReDim Preserve kuang(1 To m) '创建一个新的mydati类对象
Set kuang(m).xuanzhe = myctl '设置新类和OptionButton(i)控件创建关联
Set kuang(m).yemian = Me '类窗体也和当前窗体建立关联
End If
Next
End Sub
代码截图:
4 窗体模块代码的讲解
1) 上述代码首先声明一个类:Dim kuang() As New mydati,这个类是我们在类模块中已经命名了的,就是将类mydati 实例化为kuang().此处是一个动态数组。
2) Private Sub UserForm_Initialize()
For Each myctl In Me.Controls
If TypeName(myctl) = "OptionButton" Then
m = m + 1
ReDim Preserve kuang(1 To m) '创建一个新的mydati类对象
Set kuang(m).xuanzhe = myctl '设置新类和OptionButton(i)控件创建关键
Set kuang(m).yemian = Me '类窗体也和当前窗体建立关联
End If
Next
End Sub
上述代码是窗体的构建函数,在窗体的构建过程中,对每一个控件进行遍历,如果是OptionButton类型的控件,那么我们就将这个控件和新类相关联。我们主要的目的是让类对象来响应事件。
3) 对于重置按钮,但按下时会响应事件
For i = 1 To 5
Controls("OptionButton" & i).Value = False
Controls("OptionButton" & i).Enabled = True
Next
也就是说将每个OptionButton处于待选择状态。
为了能执行答题的界面,我们还要在公用模块中写入下面的代码,让答题时弹出答题界面.
今日内容回向:
1 类模块的构建函数中做了什么工作?
2 如何把控件和类事件的声明对象相关联?
(待续)
本讲内容参考程序文件:VBA-CLASS(1-28).xlsm
我20多年的VBA实践经验,全部浓缩在下面的各个教程中: