VBA中类的解读及应用第二十五讲:把源数据赋给类利用类完成查找(vba的类模块)

VBA中类的解读及应用》教程【10165646】是我推出的第五套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。

类,是非常抽象的,更具研究的价值。随着我们学习、应用VBA的深入,有必要理解这些抽象的理论知识。对象,类,过程,方法,属性,事件,接口,接口如何实现等等。掌握了这些理论,不仅对于VBA这种寄生语言的实质有所深入的理解,也对自然界的很多事物将同样有所感悟。目前,这套教程程序文件已经通过32位,64位两种office系统测试。

这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:VBA中类的解读及应用第二十五讲:把源数据赋给类,然后利用类完成查找的方案-4

【分享成果,随喜正能量】223善良的人,总是有福。利己则生,利他则久。心存善良的帮助他人,不是一时兴起,而是要坚持不懈的从实际出发,看到他人所需,切实的帮助到他人。

第二十六讲 把源数据赋给类,然后利用类完成查找的方案-4

大家好,今日我们继续讲解利用类来进行查找的方案。在之前的第23到25讲中我们讲了建立一个类,这个类的功能是根据输入的内容定位要返回的内容,当我们把这个类的魂赋给某个对象后就可以实现查找了。

8 mydyg类的改进分析

在上面的三讲中利用的类是mydyg,在利用输入的单元格进行判断时,对于每次输入的值都要进行相同重复的数据读取:

那么有没有办法只进行一次数据的读取,然后在读取的数据中进行提取必要的值呢?如果这种方案能实现的话可以大大的提高程序的运行效率。我今日就来讲解这种一次读取数据的方案。当然,也是利用的类模块。这种方案需要用到动态数组了。

9 类MYNEWDYG的构建

我们先来看类模块的过程:我们首先建立一个类模块MYNEWDYG,下面是相应的代码:

Private rngsA

Private rngsB

Public TJ

Private A()

Property Get QSA()

For i = 1 To UBound(A())

RR = Left(A(i), InStr(A(i), "#") - 1)

If Trim(RR) = Trim(TJ) Then

rngsA = Mid(A(i), InStr(A(i), "#") + 1, InStr(A(i), "@") - InStr(A(i), "#") - 1)

Exit For

End If

Next

QSA = rngsA

End Property

Property Get QSB()

For i = 1 To UBound(A())

RR = Left(A(i), InStr(A(i), "#") - 1)

If Trim(RR) = Trim(TJ) Then

rngsB = Mid(A(i), InStr(A(i), "@") + 1, Len(A(i)) - InStr(A(i), "@"))

Exit For

End If

Next

QSB = rngsB

End Property

Property Set DYGB(rng As Range)

ReDim Preserve A(rng.Row)

A(rng.Row) = Cells(rng.Row, 1) & "#" & Cells(rng.Row, 2) & "@" & Cells(rng.Row, 3)

kk = 1

End Property

代码的截图:

10 类MYNEWDYG的代码分析

下面我们分析一下类模块的过程:这个过程中建立了类的属性有TJ,QSA,QSB,DYGB四个属性,这四个属性的作用各有不同。同时在类模块中还有两个数据的传递变量rngsA和rngsB,这两个变量是属性QSA和QSB的“宿主”(还是用这个词吧,比较好理解)。下面我们将就每个过程进行分析,

1) 对于传入数据的处理

Property Set DYGB(rng As Range)

ReDim Preserve A(rng.Row)

A(rng.Row) = Cells(rng.Row, 1) & "#" & Cells(rng.Row, 2) & "@" & Cells(rng.Row, 3)

kk = 1

End Property

当有数据(单元格)输入的时候,会将这个单元格及之后的几个数据提取分别以"#"和"@" 进行分隔,一共分成三个部分。

2) rngsA数据的获得

Property Get QSA()

For i = 1 To UBound(A())

RR = Left(A(i), InStr(A(i), "#") - 1)

If Trim(RR) = Trim(TJ) Then

rngsA = Mid(A(i), InStr(A(i), "#") + 1, InStr(A(i), "@") - InStr(A(i), "#") - 1)

Exit For

End If

Next

QSA = rngsA

End Property

提取rngsA数据时根据第一个字段的内容提取出相应的第二段的内容。

3) rngsB数据的获得

Property Get QSB()

For i = 1 To UBound(A())

RR = Left(A(i), InStr(A(i), "#") - 1)

If Trim(RR) = Trim(TJ) Then

rngsB = Mid(A(i), InStr(A(i), "@") + 1, Len(A(i)) - InStr(A(i), "@"))

Exit For

End If

Next

QSB = rngsB

End Property

提取rngsB数据时根据第一个字段的内容提取出相应的第三段的内容。

我们再来回顾一下上面类模块的作用,当输入数据时,会把这些数据首先放到一个数组中,当提取时可以根据某个字段的内容进行有选择的提取。

这就是类模块,实现了一个较为完整的过程。在下一讲我们会讲到如何利用这个类模块来完成我们的具体工作了。

到这里大家基本能了解类模块应用的思路了,要首先搭建一个类,相当于要建立一个虚无的魂,再在主程序中将这个魂赋给某个具体的对象,让这个对象去完成我们实际的工作,这或许是VBA中的『机器人』️吧。

本讲内容参考程序文件:VBA-CLASS(1-28).xlsm

我20多年的VBA实践经验,全部浓缩在下面的各个教程中:

特别声明:[VBA中类的解读及应用第二十五讲:把源数据赋给类利用类完成查找(vba的类模块)] 该文观点仅代表作者本人,今日霍州系信息发布平台,霍州网仅提供信息存储空间服务。

猜你喜欢

『郭晶晶』代言唇膏💄💄被查,食品级三个字惹大麻烦,大家到底在担心什么(『郭晶晶』代言的广告视频)

1月23日,《都市时报》发出了一条消息:『郭晶晶』和『刘涛』一起代言的一个婴童护理品牌,在宣传自家润唇膏💄💄时,把它标成了食品级。她确实看过初版文案,但品牌后来改了两版,加入了食品级,她没有再过目——这不是失职,而是流程…

『郭晶晶』代言唇膏💄💄被查,食品级三个字惹大麻烦,大家到底在担心什么(『郭晶晶』代言的广告视频)

69岁米雪真不是装少女!穿『牛仔外套』🧥完全秒赢小姑娘,发量让人慕了(63岁米雪为何不嫁)

她穿上后,既有年轻女孩的活力,又不失那份岁月沉淀下来的温柔与温婉,远比那些十几岁的小姑娘穿的更有层次感和深度,对吧? 短款西装确实容易让人看起来有些死板,尤其是对于年纪稍大的女性♀️来说,肚子有点小肉或者腿型…

69岁米雪真不是装少女!穿『牛仔外套』🧥完全秒赢小姑娘,发量让人慕了(63岁米雪为何不嫁)

演员史兰芽:我这辈子最正确的选择,就是嫁给了净身出户的李幼斌(演员史兰芽个人资料图片)

史兰芽的爱情故事却并非一帆风顺,三度婚姻两度离婚的经历,充满了波折与挑战,但幸运的是,她最终遇到了对的人——李幼斌,终于迎来了属于她的幸福。刘斌渴望在婚后拥有孩子,而史兰芽则全心投入到自己的演艺事业中,两人的…

演员史兰芽:我这辈子最正确的选择,就是嫁给了净身出户的李幼斌(演员史兰芽个人资料图片)

霍家怎么也想不到!纵横跳水界的『郭晶晶』,却栽在这件小事上(霍家后来怎么样了)

2026年1月,有点不太平,好像是这样,『郭晶晶』代言了个婴童产品,可是,品牌方宣传出了问题,大家都在讨论,是不是要出事了,『郭晶晶』这次,会不会“翻车”了,人设塌房,这种说法也有,但我觉得,事情没那么简单。 这个,…

霍家怎么也想不到!纵横跳水界的『郭晶晶』,却栽在这件小事上(霍家后来怎么样了)

若韦小宝进入古墓,将会与小龙女发生怎样的事情?金庸:很丢脸(韦小宝怎么入宫的)

在神龙教中,苏荃的地位远远高于韦小宝,而韦小宝对她的第一印象是:这女人做老婆倒也不错,若是她去丽春院做生意,扬州的嫖客全都要涌来,丽春院的门都会被挤破。那么,若有别的男人在古墓中与小龙女相伴久了,也必然能走进…

若韦小宝进入古墓,将会与小龙女发生怎样的事情?金庸:很丢脸(韦小宝怎么入宫的)