VBA中类的解读及应用第二十四讲:把源数据赋给类利用类完成查找

360影视 国产动漫 2025-06-05 02:30 2

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

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

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

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

【分享成果,随喜正能量】163 活得通透的人,没有特别想维持的关系,也没有特别想要的东西,走近的人不抗拒,离开的人不强留,就连吃亏也懒得计较。

在上一讲中,我们讲了实现数据查找过程中类模块部分,今日我们继续讲解标准模块的代码。

根据上一讲的讲解,我们可以分析出,在标准模块中,要实现将查找区域的L列单元格的值传递给类模块,同时要实现显示这个单元格的其他属性,并将这些属性的值填到M,N,O列。下面我们看代码:

Sub mynzclass23_27_1

Dim tes As mydyg

i = 1

Do While Cells(i, "l") ""

Set tes = New mydyg

tes.TJ = Cells(i, "L")

For Each rn In Range("a1", Cells(rows.Count, 1).End(xlUp))

Set tes.DYGA = rn

Next

Cells(i, "m") = tes.QSA

Cells(i, "N") = tes.QSB

Cells(i, "O") = tes.QSC

i = i + 1

Set tes = Nothing

Loop

End Sub

代码截图:

代码的解读:上面的过程代码内容比较少,但实现的功能还是比较多的,我们来讲解一下代码的执行过程:

在代码的执行过程中首先要声明tes为我们命名的类mydyg。在i列建立一个循环,对于其中的每个单元格,首先将这个单元格关联上类mydyg的DYGA 属性,在关联的同时,在类模块中将执行下面的属性赋值过程:

Property Set DYGA(rng As Range)

If rng = TJ Then

rngsA = Cells(rng.Row, 2)

rngsB = Cells(rng.Row, 3)

rngsC = Cells(rng.Row, 4)

End If

End Property

由于此时TJ属性是已经赋值过的是Cells(i, "L")的值,这个时候这个值判断将作为一个判断的依据,将给出rngsA, rngsB,rngsC三个值,这三个值在类模块中作为变量(宿主)进行存储。

当代码执行到:

Cells(i, "m") = tes.QSA

Cells(i, "N") = tes.QSB

Cells(i, "O") = tes.QSC

的时候,将显示tes的三个属性QSA,QSB,QSC ,是如何显示的呢?当代码执行到tes.QSA的时候将读取属性的值,读取属性值的时候将执行下面的代码:
Property Get QSA

QSA = rngsA

End Property

代码的意思是将QSA = rngsA,也就是说rngsA将起到一个中间变量的作用,就是存储QSA的属性值(我们称之为宿主)。

在上面两讲中,我讲了类模块及标准模块的代码作用。两个模块相互关联,构成了一个整体,类模块中完成了属性的定义及赋值、提取数值的动作,在标准模块中,将对象关联上类,让对象具有类的属性。

上述每个单元格:

For Each rn In Range("a1", Cells(rows.Count, 1).End(xlUp))

Set tes.DYGA = rn

Next

单元格还是单元格,但赋予类的性质后,就会平添了一种魂的使命。原先的“猪悟能”就个体而言还是这个个体,但“唐三藏”大师给他赋值猪八戒后,就有了取经的“魂”。这个魂是赋值后的新生,虽然个体没有改变,还是那个实体,但“魂”已经发生了本质的改变。这就是神奇的类。

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

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

来源:VBA语言专业教育

相关推荐