vb类模块的举例说明百度文库_第1页
vb类模块的举例说明百度文库_第2页
vb类模块的举例说明百度文库_第3页
vb类模块的举例说明百度文库_第4页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、vb 类模块的举例说明百度文库【篇一: vb 类模块的举例说明百度文库】vb 类模块的使用_it/ 计算机 _ 专业资料。 vb 类模块【篇二: vb 类模块的举例说明百度文库】这里简单地介绍 vba 中的类模块,使大家能够在应用程序中创建并使用简单的类。类是对象的模板 。对象可以是任何事物,而类不会做任何事情,也不会占用内存,只有当类成为对象并使用 set 语句和 new 关键字实例化为具体对象后,才能做事情并占用内存。实例化类为具体对象的语法为:dim c as class1set c=new class1上述语句创建了一个名为 c 的对象,该对象的数据类型为定义的类 class1 。在详

2、细介绍类之前,让我们先看看 vba 的用户自定义数据类型,即使用 type 关键字定义的变量。例如,下面的 type 变量定义了雇员的信息:type employeename as stringaddress as stringsalary as doubleend type上面的语句定义了变量 employee ,包含元素 name 、address 和 salary 。接着,您可以声明一个 employee 型的变量,并为其中的每个元素赋值:sub test()dim fan as = fanjyfan.address = yichangfan.salar

3、y = 1000end sub用户自定义类型是很有用的,但是有三个主要的局限:1、在编译时必须声明所有的自定义类型变量。虽然可以使用动态数组来处理多个自定义类型,但必须使用 redim preserve 关键词。并且,不能在运行时添加新的自定义类型变量。2、不能控制赋给自定义类型中元素的值。例如,在上述代码中,有可能给 salary 元素赋一个负值。3、自定义类型不做任何事情,只是静态地存储数据。用户自定义类型被广泛用于在对 windows api 函数调用时,除此之外,使用类模块是更好的选择。类克服了用户自定义类型的局限。1、使用 new 关键字,可以创建任意数量的类的新实例,并且能够将其存

4、储在 collection 对象中。2、使用 property let/set/get语句,可以编写代码验证赋给类元素的值,并且可以编写当值改变时执行的相应代码。例如,能够编写代码确保 salary 的值不为负值。3、类可以定义方法(使用sub过程和function过程),执行某项动作。下面,让我们将自定义类型 employee 转换为类。首先,在辑器中插入一个类模块,并将其重命名为 cemployee ,如图vbe 1编所示。(类模块由属性和方法组成,类本身类似于名词;属性可以当作形容词,用来描述类;方法则为动词,执行操作。)cemployee 类应该有三个属性: name 、address

5、 和 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 addr

6、ess(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薪水

7、怎能为负呢?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 语句的数据类型必须相

8、匹配。例如,let salary接受double类型的值作为其参数,这意味着其返回的相应的get 属性的值必须是 double 。如果数据类型不一致,就会导致编译错误。这些 get 语句简单地将三个属性向外公开。要创建只读属性,则忽略 property let语句而仅使用property get语句。例如,withholdingtax属性是只读的,在get 语句中的代码计算合适的值并将其公开,但避免从外部改变该属性的值: property get withholdingtax() as double withholdingtax = some_tax_calculation end prope

9、rty该属性没有对应的let 语句,因此该属性只读,没有办法将值赋给withholdingtax。类模块能够包含方法,例如 cemployee 类有一个用于雇员复核薪水的方法:public sub printpaycheck()放置打印复核的实际代码end sub好了,我们已经完成了cemployee类的初步定义,如图1 所示。图 1: cemployee 类下面,在标准模块的代码中实例化类,并使用其属性和方法。首先,在 vbe 编辑器中插入一个模块,声明一个 cemployee 类型的变量。(注意,在复杂的应用程序中,在类模块中声明并实例化另一个类是完全合法的)dim emp as cemp

10、loyee接下来,实例化该类,创建一个可用来工作的实际对象,如下列语句:set emp = new cemployee上述语句创建了一个名为 emp 的对象,能够使用 cemployee 类中的属性来引用特定的雇员信息,例如: = fanjyemp.address = yichangemp.salary = 1000这三个语句调用在 cemployee 类中声明的 property let 语句来赋值给类中的私有变量。我们能够使用下列代码读取对象的属性的值:debug.print debug.print emp.addressdebug.print emp.sa

11、lary上述语句调用类模块中的 property get 语句并获取数据。我们也能读取类中的只读属性 withholdingtax : debug.print emp.withholdingtax由于 withholdingtax 属性没有相应的 let 语句,因此不能给该属性赋值。如果试图赋值:emp.withholdingtax = 4000则会导致:编译错误:不能给只读属性赋值。也能够调用方法来执行操作:emp.printpaycheck在集合中存储类的多个实例如果到运行时还不知道有多少个雇员,那么能够在运行时按需要创建多个 emp 对象,每创建一个emp 对象之后将其存储在集合中。例如

12、:dim coll as new collectiondim ndx as longdim emp as cemployeefor ndx = 1 to numberofemployeesset emp = new cemployee设置 emp 对象的属性coll.add item:=emp, key:=next ndx上面的 for next循环将创建cemployee类的 numberofemployees个实例,具体数量由运行时决定,并将其存储在名为 coll 的集合对象中。之后,能够使用 for each 循环从 coll 集合中获取每个雇员信息或执行操作:for e

13、ach emp in collemp.printpaychecknext emp类的 instancing属性类的 instancing属性决定其可见性(或称作作用域),默认属性值为 1-private ,意味着类仅能在包含该类的工程中创建和访问。其他工程不能基于该类创建对象。对于绝大多数应用程序来说, private 是足够了。instancing属性的另一个值是2-publicnotcreatable,表明其他工程能够将变量声明为该类,但是不能使用set 语句创建该类的实例。在多个工程间使用类如果一个工作簿需要使用定义在另一个工作簿中的类,则需要在包含类模块的工作簿中编写代码导出类到另一个

14、工程。该类的instancing属性必须是2-publicnotcreatable。假设 book1.xls工作簿中包含一个名为class1 的类模块,book2.xls 需要使用该类。首先,将 book1 工作簿的工程名称从缺省的 vbaproject 修改为唯一的名称,例如 myproject 。然后,在 vbe 编辑器中激活 book2 工作簿的界面,设置对 book1 工作簿的引用,即在 vbe 中选择 工具 引用 ,然后在列表中选择 myproject 。然后,在 book2 中,创建如下声明:public c as myproject.class1因为 instancing的属性值为publicnotcreatable,所以可以声明一个 class1 类的变量,但不能创建该类的实例。因此,需要在中编写一个函数来创建 class1 的新实例,并返回该实例给在 book1 中,创建下面的过程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论