文档详情

VBA类模块初步.docx

发布:2017-07-08约4.32千字共10页下载文档
文本预览下载声明
VBA类模块初步这里简单地介绍VBA中的类模块,使大家能够在应用程序中创建并使用简单的类。类是对象的“模板”。对象可以是任何事物,而类不会做任何事情,也不会占用内存,只有当类成为对象并使用Set语句和New关键字实例化为具体对象后,才能做事情并占用内存。实例化类为具体对象的语法为:Dim C As Class1Set C=New Class1上述语句创建了一个名为C的对象,该对象的数据类型为定义的类Class1。在详细介绍类之前,让我们先看看VBA的用户自定义数据类型,即使用Type关键字定义的变量。例如,下面的Type变量定义了雇员的信息:Type EmployeeName As StringAddress As StringSalary As DoubleEnd Type上面的语句定义了变量Employee,包含元素Name、Address和Salary。接着,您可以声明一个Employee型的变量,并为其中的每个元素赋值:Sub test()Dim Fan As EmployeeFan.Name = “fanjy”Fan.Address = “YiChang”Fan.Salary = 1000End Sub用户自定义类型是很有用的,但是有三个主要的局限:1、在编译时必须声明所有的自定义类型变量。虽然可以使用动态数组来处理多个自定义类型,但必须使用Redim Preserve关键词。并且,不能在运行时添加新的自定义类型变量。2、不能控制赋给自定义类型中元素的值。例如,在上述代码中,有可能给Salary元素赋一个负值。3、自定义类型不做任何事情,只是静态地存储数据。用户自定义类型被广泛用于在对Windows API函数调用时,除此之外,使用类模块是更好的选择。类克服了用户自定义类型的局限。1、使用New关键字,可以创建任意数量的类的新实例,并且能够将其存储在Collection对象中。2、使用Property Let/Set/Get语句,可以编写代码验证赋给类元素的值,并且可以编写当值改变时执行的相应代码。例如,能够编写代码确保Salary的值不为负值。3、类可以定义方法(使用Sub过程和Function过程),执行某项动作。下面,让我们将自定义类型Employee转换为类。首先,在VBE编辑器中插入一个类模块,并将其重命名为CEmployee,如图1所示。(类模块由属性和方法组成,类本身类似于名词;属性可以当作形容词,用来描述类;方法则为动词,执行操作。)CEmployee类应该有三个属性:Name、Address和Salary。在类模块的声明部分声明三个Private变量来存储这些值,属性的实际值被存储在这三个私有变量中。Private pName As StringPrivate pAddress As StringPrivate pSalary As Double因为这些变量都被声明为私有的,因此仅能在类内部访问,在类的外部是不可见的。如何为这些变量赋值呢?这就是Property Let语句要做的工作。每个私有变量都有相应的Property Let语句。Property Let Name(S As String)pName = SEnd PropertyProperty Let Address(S As String)pAddress = SEnd PropertyProperty Let Salary(D As Double)pSalary = DEnd PropertyProperty Let语句用于给属性赋值,即将值引入类。在上例中,简单地将引入的值赋给私有变量。由于Property Let语句中能够包含代码,因此能够编写用于数据验证的代码。例如,改写Property Let Salary函数中的代码,使之不允许接受负值:Property Let Salary(D As Double)If D 0 ThenpSalary = DElse‘错误提示MsgBox “薪水怎能为负呢?”End IfEnd Property与Property Let函数相对应的是Property Get函数,用于从类中获取属性的值。在CEmployee类中,相应的Property Get语句为:Property Get Name() As StringName = pNameEnd PropertyProperty Get Address() As StringAddress = pAddressEnd PropertyProperty Get Salary() As DoubleSalary = pSalaryEnd PropertyLet语句和Get语句的数据类型必须相匹配。例如,Let Salary接受Double类型的值作为其
显示全部
相似文档