神通广大的类,瞬间实例多个类对象
大家好,我们这讲讲解实例化类的存储及访问。这讲的内容也是为让我们更加深入地理解类对象的意义。和八戒相比,大师兄的本例最为称道的是拔撮毫毛吹口气,瞬间会产生多个大师兄。类是对象产生的模板,如何在类模块中实现类似功能呢?
在之前的讲解中,我们知道:在VBA中,类在类模块中进行定义,是产生对象的模板。但“对象”一词是非常模糊的。理论上我们可以定义一个对象来表示想要的任何东西;任何概念上可以描述的东西都可以用类表示。类和对象之间的区别是,类什么也不做,也不消耗内存。它就像一幅建筑工地使用的图纸。当您拥有该类类型的变量并使用New关键字创建该类的实例时(称为实例化的进程),它才能成为一个对象并消耗内存,并可以执行操作。一个类由它的属性定义,在类模块中可描述类的属性,以及类的方法(sub过程和函数过程),它们在对象中执行操作。如果类类似于名词,则属性类似于形容词——它描述对象。方法就像一个动词——它执行一个动作。
为了让类对象进行必要的操作,必须将一个类实例化为一个对象。实例化的一个例子如下所示:
Dim C As Class1
Set C = New Class1
其中Class1是类模块的名称。与其他语言不同,VBA只允许一个类模块中存在一个类,而类的名称就是模块的名称。现在C对象变量可以使用Class1中定义的属性和方法。
注:也可以将以上两个语句合并成一个语句:
Dim C As New Class1
这称为自动实例化变量。当在代码中首次遇到变量C时,将创建一个新实例。一般来说,你应该避免自动实例化变量。
为了实现让类模板创建多个类对象并存储,也就是实现拔根毫毛吹口气瞬间产生多个大师兄的功能,我们先写一个简单的员工类的代码,在这个代码中,我们再来展示一下类功能与集合字典的综合运用。
一 首先建立一个宿主型的CEmployee类,先看下面的代码:
Private pName As String
Private pAddress As String
Private pSalary As Double
Public Property Get Name() As String
Name = pName
End Property
Public Property Let Name(Value As String)
pName = Value
End Property
Public Property Get Address() As String
Address = pAddress
End Property
Public Property Let Address(Value As String)
pAddress = Value
End Property
Public Property Get Salary() As Double
Salary = pSalary
End Property
Public Property Let Salary(Value As Double)
If Value > 0 Then
pSalary = Value
Else
MsgBox "工资数值错误!"
End If
End Property
代码截图:
代码讲解:
1 上述代码过程建立了一个标准的宿主型CEmployee类,这个类的过程利用宿主实现了属性值的修改和传递,在数据写入的时候,可以通过值的判断,从而控制值的范围。这段代码是类模块中非常标准的一个代码。
2 在值的传递过程中,Get过程用于从类中返回一个值,而Let过程用于将一个值放入类中。注意,Get属性过程的返回数据类型必须与Let属性过程的(最后一个)参数相同。否则,您将得到一个编译器错误。
今日内容回向:
1 请再次理解什么是类,什么是对象?
2 对象一个标准的类模块,有哪些功能?
3 如何控制属性的值的范围?
本讲内容请参考程序文件VBA-CLASS(下69-71).xlsm
在取代OFFICE新的办公软件没有到来之前,谁能在数据处理方面做到极致,谁就是王者。其中登峰至极的技能非VBA莫属!众鸟高飞尽,孤云独去闲。相看两不厌,只有敬亭山。
学习VBA是个过程,这个过程是自己忍受孤独的过程。
“水善利万物而不争”,你看她绵绵密密,微处则无声,巨则汹涌。学习亦如此,把握现在,为达千里,需要默默耕耘,知道什么是自己所需要的,不要蜷缩在一小块自认为天堂的世界里,待到暮年时去自欺欺人。要在当下,用一颗充满生机的心灵,努力提高自己,这才是进取。越是有意义的事情,困难会越多。愿力决定始终,智慧决定成败。不管遇到什么,都是风景。看淡纷争,看轻得失。一杯茶,满也好,少也好,不要去计较;浓也好,淡也好,其中都有值得品的味道。去感悟真实的时间,静下心,多学习,积累福报。而不是天天混日子,也不是天天熬日子。一切众生的心都在变化,像时间一样,永远不会停留,把握现在就是福报。
VBA是利用Office实现自己小型办公自动化的有效手段,我记得20年前自己初学VBA时,那时的资料甚少,只能看源码自己琢磨,真的很难。20年过去了,为了不让学习VBA的朋友重复我之前的经历,我根据自己多年VBA实际利用经验,推出了五部VBA专门教程,回向给需要学习的朋友:
第一套:VBA代码解决方案 是VBA中各个知识点的讲解,覆盖绝大多数的VBA知识点,初学必备;
第二套:VBA数据库解决方案 数据库是数据处理的专业利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法和实例操作。
第三套:VBA数组与字典解决方案 数组和字典是VBA的精华,字典是VBA代码水平提高的有效手段,值得深入的学习。
第四套:VBA代码解决方案之视频 是专门面向初学者的视频讲解,可以快速入门,更快的掌握这门技能。
第五套:VBA中类的解读和利用 这是一部高级教程,讲解类的虚无与肉身的度化,可以对促进自己理论的提高。
学习的过程也是修心的过程,修一个平静的心。在代码的世界中,心平静了,心情好了,身体自然而然就好。心静则正,内心里没有那么多邪知邪见,也就没有那么多妄想。在平静中积累自己的财富。我的上述教程是我多的经验的传递,大家可以根据1,3,2,5或者是4,3,2,5的顺序逐渐深入的逐渐学习。可以WeChat: NZ9668
最后将一阙词送给致力于VBA学习的朋友:
浮云掠过,暗语无声,
唯有清风,惊了梦中啼莺。
望星,疏移北斗,
奈将往事雁同行。
阡陌人,昏灯明暗,忍顾长亭。
多少VBA人,
暗夜中,悄声寻梦,盼却天明。
怎无凭!
分享成果,随喜正能量