《VBA中类的解读及应用》教程【10165646】是我推出的第五套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。
类,是非常抽象的,更具研究的价值。随着我们学习、应用VBA的深入,有必要理解这些抽象的理论知识。对象,类,过程,方法,属性,事件,接口,接口如何实现等等。掌握了这些理论,不仅对于VBA这种寄生语言的实质有所深入的理解,也对自然界的很多事物将同样有所感悟。目前,这套教程程序文件已经通过32位,64位两种office系统测试。
这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:VBA中类的解读及应用第十讲:限制文本框使其只能输入数值(下)【分享成果,随喜正能量】万事万物皆有宿命,因果有轮回,善恶终有报。为人善良,会得到善果;为人恶毒,会得到恶果。人世间的因果报应,只是早晚的事。。
第十一讲 限制文本框的输入,使其只能输入数值(下)(接上讲)
4 代码的运行过程及讲解1) 窗体文件的构建
Dim Txt() As New mytext
Private Sub UserForm_Initialize()
For Each myctl In Me.Controls
If TypeName(myctl) = "TextBox" Then
m = m + 1
ReDim Preserve Txt(1 To m)
Set Txt(m).Txtbox = myctl
End If
Next
End Sub
代码讲解:
① Dim Txt() As New mytext这句代码定义了一个动态数组变量为类。
② 在窗体的构建中,要对每一个控件进行判断,如果是"TextBox"类型的控件,那么就将此控件定义为Txt(m).Txtbox,而Txt(m).Txtbox中 txt(m) 定义为mytext类的对象,txtbox是这个对象的事件。Set Txt(m).Txtbox = myctl就是让myctl控件享有我们定义对象的事件。
③ ReDim Preserve Txt(1 To m),这句是一个动态数组的重新定义过程,当m值增加后,在不破坏原数据的基础上要重新定义这个动态数组。增加了一个类的对象。
2) 当我们在文本框录入数据时,由于文本框是实例化类后的对象,所以这个对象将要响应mytext类的Txtbox事件。
3) 在Txtbox_Change事件中。我们用了正则函数来实现控制录入内容的需求。
代码如下:
With CreateObject("vbscript.regexp")
.Global = True
.Pattern = "[^0-9.]+"
If .test(Txtbox.Text) Then
Txtbox.Text = .Replace(Txtbox.Text, "")
End If
End With
代码讲解:
① 上述代码中引用CreateObject("vbscript.regexp").然后就可以利用正则运算了。
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),是计算机科学的一个常用概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。RegExp对象是VBScript中用于提供简单的正则表达式支持的对象。VBScript中所有和正则表达式有关的属性和方法都与这个对象有关联。
这个对象有三个属性和三个方法:
属性: Global、IgnoreCase、Pattern
方法: Execute、Replace、Test
这讲中仅对本讲用到的属性和方法做讲解,其他的还请有兴趣的朋友阅读相关的资料:
A) Global属性:负责设置或返回一个Boolean值,指明模式是匹配整个字符串中所有与之相符的地方还是只匹配第一次出现的地方。如果Global属性的值是True,那就会对整个字符串进行查找;否则就不会。默认值是False.
b) Pattern属性:设置或返回用于搜索的正则表达
c) Replace方法:这个方法用于替换在正则表达式搜索中找到的文本代码
object.Replace(string1, string2)
对象只能是RegExp对象
string1:这是发生替换的文本字符串,必需的
string2:这是用于替换的文本字符串,必需的
Replace方法返回一份RegExp.Pattern被string2替换后的string1的副本。如果字符串中没有发生匹配,那么就会返回没有任何改变的string1。
d) Test方法:Test方法对字符串执行正则表达式搜索,并返回一个布尔值说明匹配是否成功代码
object.Test(string)
object : 是RegExp对象
string:正则表达式搜索的执行对象,必需的
如果匹配成功,Test方法返回True;否则返回False。这适用于判断字符串是否含有某个模式。
②Txtbox.Text = .Replace(Txtbox.Text, "")
代码在执行过程中要对录入的值进行判断如果不是数字,就用空来代替
4) 当点击退出按钮或者是关闭窗口时就直接END,虽然比较武断,但很实用。
5 代码的运行效果由于正则的作用,是只能输入数字的。
今日内容回向:
1 如何理解正则函数?
2 在窗体的构建构成中,执行了哪些动作?
本讲内容参考程序文件:VBA-CLASS(1-28).xlsm
我20多年的VBA实践经验,全部浓缩在下面的各个教程中: