类模块基本技术

来源:百度文库 编辑:神马文学网 时间:2024/03/29 14:29:16

类模块能够让你创建拥有自已的方法和属性的新对象。类模块可用于封装复杂的代码,并且公开与创建的对象相关的属性和方法,只需要简单地调用这些属性和方法,而不需要知道其如何实现。
了解属性、方法和事件
先了解一下属性、方法和事件的概念。
创建对象时,该对象可以具有属性、方法和事件。例如,假设对象是一颗树,那么它将具有属性(例如高度、宽度,等)、方法(例如生长,等)、以及将会发生的事件(例如,死)。
属性:指某种特征,例如姓名、创建者、高度、宽度,属性可以是只读、只写或可读/写。在命名属性时,应该使用名词,例如MyComputer.Name,其中MyComputer是对象,Name是其属性。
方法:指该对象生存期间发生的行为。例如,tree(树)对象在整个生命期间都能生长。在命名方法时,选择动词或动词短语,例如MyComputer.GetIP。
事件:指对象发生了什么。当树死时(按类的说法,当对象“中止”时),事件发生。比方说,如果担心树死,那么可以钩挂该事件,将之放到日记里,到时候进行纪念性活动。
方法和事件都使用动词,例如有Open事件,也有Open方法,那么怎么知道哪个是事件,哪个是方法呢?方法是指令,指示应用程序打开文档、工作簿或数据库;事件是在处理过程中发生了什么。
下面的示例帮助区分方法和事件:

  • MyComputer.GetIP:获取我的计算机的IP的方法。
  • MyComputer_OnGetIP:当获取IP地址时触发的事件。

通常,你不会在事件名称前添加前缀On,但建议使用这种方式,使得容易理解和区分方法和事件。
使用属性
属性是对象的一个重要方面。例如,对于Excel工作簿,可以使用Path属性获取工作簿的路径,可以修改Worksheet对象的Name属性更改工作表的名称。
设置属性是创建类模块的第一步。
在VBA工程中,插入类模块,并命名为clsProperty。
Property Let
首先,声明包含属性值的全局变量。假设对象接受Name属性,则在类模块的声明部分,编写下面的代码:

Dim gstrName As String

接着,编写该属性的代码:

Property Let name(ByVal strName As String)gstrName = strNameEnd Property

现在,可以使用与修改其它对象的Name属性相同的方法修改该属性。在标准模块中,输入下列代码:

Sub clsProperty()Dim MyComputer As New clsPropertyMyComputer.name = "My Computer Name"Set MyComputer = NothingEnd Sub

注意到,在类模块中,仅使用关键字Let定义了一个属性,因此是一个只写类。也就是说,可以通过写入新值来修改值,但不能读取该属性的值。
Property Get
上面的内容介绍了如何对属性写入值,接下来介绍如何获取属性值。此时,需要使用关键字Get。在前面的类模块中添加代码:

Property Get Name() As StringName = gstrNameEnd Property

在标准模块中编写下面的代码测试:

Sub clsProperty()Dim MyComputer As New clsPropertyMyComputer.Name = "My Computer Name"MsgBox MyComputer.NameSet MyComputer = NothingEnd Sub

经过代码完善后,clsProperty类变成了一个可读写的类。
记住,Let允许对属性写入值,而Get允许获取属性值。在上例中,使用关键字Let提供计算机名称为“My Computer Name”,然后使用关键字Get获取计算机名称,返回“My Computer Name”。
在程序结束前,使用关键字Set将变量的值设置为Nothing,以释放占用的内存,防止内存泄漏。
使用方法
方法指诸如Add(添加)、Update(更新)、MoveNext(移至下一个)、Clear(清除)、Delete(删除)等操作,使用方法的人只需实例化类并调用方法,而不需要理解该方法是如何实现的。
下图展示在声明clsClients类的新实例对象Client后,能够添加新客户,统计客户数,定义名称,或者给客户发邮件,等。

在类模块中,方法只是编写的过程或函数。如果需要返回值,那么需要使用函数,否则,使用过程执行某项操作。
下面让我们创建上图所示的方法。这里,使用Collection对象来存储客户的信息。
首先,声明一个代表客户集合的全局变量:

Dim gcolClients As New Collection

接着,开始编写方法代码。本例中,创建Add、Count、Delete和GetDetails方法。代码如下:

Sub Add(ByVal strName As String)Dim lngIDClient As LongOn Error Resume NextlngIDClient = gcolClients.Count + 1gcolClients.Add strName, CStr(lngIDClient)End Sub Function Count() As LongCount = gcolClients.CountEnd Function Sub Delete(ByVal strIDClient As String)On Error Resume NextIf gcolClients.Count = 0 Then Exit SubgcolClients.Remove (strIDClient)repopulateEnd Sub Function GetDetails(ByVal strIDClient As String) As VariantOn Error Resume NextIf gcolClients.Count = 0 ThenGetDetails = vbNullStringExit FunctionEnd IfGetDetails = gcolClients.Item(strIDClient)End Function Private Sub repopulate()Dim colTemp         As New CollectionDim lngCount        As Long On Error Resume NextFor lngCount = 1 To gcolClients.CountcolTemp.Add gcolClients.Item(lngCount), CStr(lngCount)NextSet gcolClients = NothingSet gcolClients = colTempEnd Sub

为了测试该类,在标准模块中,编写下面的代码:

Sub clsClients()Dim client As New clsClientsWith client.Add ("张三").Add ("李四").Add ("王五").Name = .GetDetails(2)MsgBox .Name.Delete (2).Name = .GetDetails(2)MsgBox .NameMsgBox .CountEnd WithSet client = NothingEnd Sub

上面的代码中,添加了3个客户。然后,获取第2个客户的详情,并通过消息框显示。接着,删除该客户,并再次请求索引值为2的客户信息,检查集合中存放的顺序和数量发生了什么变化,显示客户名并统计集合中剩下多少客户。
使用事件
事件指在执行操作时发生的事情。事件可以被指定给对象,或者有更广泛的含义,像应用程序级的事件。例如,上文中的类有两个最基本的事件,一个事件在初始化类时触发,另一个事件在中止类时触发。

Private Sub Class_Initialize()'代码End Sub
Private Sub Class_Terminate()'代码End Sub

可以使用这两个事件控制自已的类,也可以添加事件来控制应用程序或其它对象。