VBA中类的解读及应用第二十七讲:利用类完成查找的方案-5
《VBA中类的解读及应用》教程【10165646】是我推出的第五套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。
类,是非常抽象的,更具研究的价值。随着我们学习、应用VBA的深入,有必要理解这些抽象的理论知识。对象,类,过程,方法,属性,事件,接口,接口如何实现等等。掌握了这些理论,不仅对于VBA这种寄生语言的实质有所深入的理解,也对自然界的很多事物将同样有所感悟。目前,这套教程程序文件已经通过32位,64位两种office系统测试。
这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:VBA中类的解读及应用第二十七讲:把源数据赋给类,然后利用类完成查找的方案-5
【分享成果,随喜正能量】253 老人言:“拆穿多没意思,年纪大了就喜欢看别人演戏,精彩的地方我还可以给你鼓掌。”心态,是命运的舵手,虽然不是人生的全部,但能左右人生的全部。人生是一场修行,修炼好自己的内心,才能万事从容,成为最后的赢家。。
第二十七讲 把源数据赋给类,然后利用类完成查找的方案-5
各位学员好,我们今日继续上一讲的内容的讲解。在上一讲中我们讲了实现类模块进行查找另一个方案中的类模块的内容,今日我们讲解标准模块的内容。
11 标准模块中代码
类模块构建了一个框架,也就是规划了一个虚无缥缈的“魂”,在标准模块中,我们要给这个“魂”赋给“肉身”对象,让这个魂在肉身上实现“活”起来。下面我们先看看标准模块的代码:
Sub mynzclass23_27_2()
Dim tes As MYNEWDYG
Set tes = New MYNEWDYG
For Each rn In Range("a1", Cells(rows.Count, 1).End(xlUp))
Set tes.DYGB = rn
Next
i = 1
Do While Cells(i, "l") <> ""
tes.TJ = Cells(i, "L")
Cells(i, "m") = tes.QSA
Cells(i, "N") = tes.QSB
i = i + 1
Loop
End Sub
代码的截图:
12 标准模块代码的解读
代码解析:上述代码首先将MYNEWDYG类赋给了tes,让tes具有类MYNEWDYG的各种属性及功能,然后我们要首先执行一次遍历,将Range("a1", Cells(rows.Count, 1).End(xlUp))这个区域的单元格传递给tes的DYGB属性,大家注意,这里的传递相对于第23到25讲的方案提前了,在第23到25讲中这个传递是发生在每次的循环体之中。传递后,之后代码的思路是和第23到25讲中的思路是一致的。下面讲解一下具体的实现过程。
1) 声明类的对象,并将类赋给这个对象。
Dim tes As MYNEWDYG
Set tes = New MYNEWDYG
声明后用set赋值是最为基本的类的应用操作。
2) 将源数据区域的单元格关联到tes对象的属性,这里用的是遍历循环操作。
For Each rn In Range("a1", Cells(rows.Count, 1).End(xlUp))
Set tes.DYGB = rn
Next
数据关联后会将上述数据内容存放在类的数组中备用。
3) 在L列建立一个循环,并将单元格赋值给tes的TJ属性。在给TJ属性赋值的时候,类模块中会根据TJ属性的值自动给出QSA和QSB的属性值,这个功能完全是在类模块中实现的,我们在主程序过程中只是告诉给TES这个对象将要传递进去的值即可。
Do While Cells(i, "l") <> ""
tes.TJ = Cells(i, "L")
Cells(i, "m") = tes.QSA
Cells(i, "N") = tes.QSB
i = i + 1
Loop
上述过程完成后会将QSA和QSB的属性值分别回填到M列和N列。从而达到我们查找的目的。
13 改进后的代码运行
下面我们看看运行的结果:
在上述代码中,由于我只给出了两列的值的查找,所以数据3那列是空白的。
在最近的5讲中,我讲了利用类模块完成查找的过程,共讲了两种方案。这两种方案中,后者利用了在类模块中先把源数据进行存储,理论上可以节约时间。
对于初识类的朋友,到这里基本上了解了类的一些基本的概念及应用上的基本技巧,这之后的章节中我仍将就类的知识与应用作深入的讲解。
本讲内容参考程序文件:VBA-CLASS(1-28).xlsm
我20多年的VBA实践经验,全部浓缩在下面的各个教程中: