没有合适的资源?快使用搜索试试~ 我知道了~
VBA类模块完全教程
资源推荐
资源详情
资源评论
~ 1 ~
VBA
类:隐者的秘密
前言
写下这个题目,可能会让很多朋友疑惑,笔者先埋下一个关子,很快我会让您知道这个
标题的寓意。
这份礼物送给现在想学习类知识或曾经学过但因为各种原因没有“修成正果”的朋友,我
期望的结果是这篇文章后,您可以在类模块中像在标准模块中写代码一样熟练,我也期望不
至于太乏味而使您没有耐心看完整篇文章,或者说期望您学习的过程是轻松愉悦的,但愿我
可以做到。文章构划为 7 部分:
1.什么是类
2.为什么要学习类
3.类的预备知识
4.创建类属性
5.创建类方法
6.创建类事件
7.一个完整的类实例
什么是类
在我们身边,相同或相似的物品无处不在,从生活用品,到工业产品,……通常它们都
是由同一个可以称为“模具”的东西生产出来。
理解类,一般要先从对象谈起,但由于从不同的角度,有不同的理解,从而也有不同的
关于类的定义,本文不去探讨一个完整并且公认的类概念,在这一部分后,只要你有一个基
本的判断并且在遇到时知道是类就可以了。在上面的这个例子中,一个“模具”就是一个“类”,
而由它生产出的每一个产品,就是一个“对象”。看下面的 VBA 语句:
Dim tx1 As Textbox
不用解释它的意思吧,这里我们用到一个类 Textbox 定义了一个对象 tx1,再来看:
Dim tx1 As Textbox
Dim tx2 As Textbox
又定义了一个对象 tx2,如果你不嫌烦,我还可以继续下去。对象增加了,但 As 后的
Textbox 没有变,它可以无限制的使用下去。
类是一个隐者,上面 Textbox 是 VBA 已经给我们准备好的一个类,我们无法知道 VBA
是怎么准备的(它的真身被隐藏了),但我们可以知道对象 tx1 怎么用。VBA 把对对象的使
用划分为三种,属性、方法和事件(后面预备知识我们再提)。
然而,Textbox 是一个类,仍然不是本文要说的类,因为它是 VBA 已经给我们准备好了
的,我们要做的,只是知道如何使用它而已。本文要介绍的,是利用 VBA 已经给我们提供
的资源,来构建我们自己的类,姑且可称之为自定义类。这需要在 VBE 下,通过插入类模
块,然后向类模块中写入代码来完成。这就是你常常听说的类,本文的主题就是这个包含代
码的模块!通过这个模块,可以提供给我们一个和 VBA 提供给我们的诸如 Textbox 功能性质
完全相同的类,然后,再由我们自己象使用 Tex tb ox 一样使用!
类是一个隐者,她把自己藏在所有模块的最后,甚至在多数情况,她从不出场。现在,
她挂着神秘的微笑,向你走来,你要拒绝吗
~ 2 ~
为什么要学习类模块
类通常被认为是学习 VBA 的难点之一,之所以如此,因为相对于制造一个标准模块或
用户窗体,我们可以找到的类的学习资源少之又少,甚至很多 VB 的书籍也只有缪缪字语(在
后面的预备知识,我们再提另一个重要的原因)。从技术角度上看,类的构建,不象窗体,
VBA 的类也不象有些语言提供了可视的设计界面,感性上那样直接,隐者!她是不可视的设
计,所有的构建都是通过在类模块中写代码来实现的。
1.学习是一种兴趣的追求
俗语云:学的千千万,用的有几何?又曰:书到用时方恨少。
林语堂先生将做学问划分为三重境界,第二重说“为伊消得人憔悴,衣带渐宽终不悔”,
大多数朋友,包括本人,都不是专业程序员,学习程序只是一种兴趣和爱好,就好象有人喜
欢修炼网游一样,对喜欢程序的人,不断地学习和提高,也是一种追求优秀的态度,并且乐
意享受这个追求的过程。模块、控件、链接库和类构成软件工程开发的四大技术,而类技术
是控件和链接库技术的基础,我们不得不学。
2.类有什么用
如你前面看到的我们使用 Textbox 类,类可以创建大量性质相近的对象,减轻我们的程
序量,简洁代码并提高效率。
类定义后,在其它模块中使用时,我们就可以暂时忘记或不必考虑它内部复杂的细节,
让我们变得轻松,VBA 虽然不能真正封装类的形式,但在这里,我们可以封装它的概念。
这并不是类的全部好处,其它的,留着朋友们用的时候慢慢体会吧。
类挂着神秘的微笑,已经走到你的大门口,开门迎接她吧,你还等什么?
类的预备知识
广义上讲,所有 VBA 的知识,包括语句、函数以及为我们提供的标准类甚至第三方的
资源都可以在类中被使用。本文无法也不准备逐一探讨,这里只说一些最密切最基本的,但
即使这样,笔者仍然不能把这些点的知识都写到,甚至因为对问题解释清晰或符合逻辑的需
要,采用非规范的表述,对专门问题的全面理解,请读者注意参考有关标准帮助文档并加以
甄别。
1.从构建者的角度理解对象
上一回我们提到,类被认为是 VBA 难点还有一个原因,这就是我们的思想!VBA 提供
了大量的现成的类,我们几乎不再需要去构建自己的类,这种结果,我们熟练地习惯了从使
用者的角度去理解类—的实例:对象,包括它的属性、方法和事件。但是,现在你还要尝试
做一个提供者,这和你作为使用者时的思考方法是完全不同的,甚至是革命性的。这种角色
的转位是痛苦的,它需要你放弃你原本可以自豪地解释出对象以及它的属性、方法、事件的
定义,它们原本是如此逻辑地被划分,如此清晰,但现在,类模块中的一切,彼此交织,你
会发现它们都模糊了!是需要你忘掉所有固执的“招势”的时候了,当你心中无剑时,转位也
就完成了,隐者变得清晰了,她是如此美丽。且慢,在你完全忘掉前,让我们最后再看一眼
它们的样子,呵呵,如果你实在忘不掉,你就提醒一下自己构建者的身份吧。下面是通常情
况下关于对象、属性、方法、事件的基本表述,如果你以前没了解过,则应当找些资料先认
真地理解它们,然后再按照上面的提示去做。
对象是由类创建的一个实例,它是类的实体化。
对象的引用和操作被逻辑上划分为不重叠的三个部分:
属性是指对象的特性。以前面的 Textbox 为例,有长度,高度,框中显示的文字等等。
方法是指对象的某个操作。如让 Textbox 成为当前的焦点(即光标移动到它上面)。
~ 3 ~
事件是指对象对外部动作的响应。如我们用鼠标点击 Textbox 时,会产生一个 Click 事件,
改变它的值,则产生一个 Change 事件
变量的作用域
变量因为声明的位置和方式不同,从而有不同的作用域。作用域是指变量在多大范围内
能被代码识别。可以划分为过程级、模块级和全局变量。
过程级变量在过程中声明,这里过程指的是一个 Sub 或 Function,也包括后面提到到属
性过程。通常用 Dim 或 Static 进行声明。Dim 声明的变量,只在该过程执行时存在,过程结
束,变量的值也就消失了。Static 声明的变量称为静态变量,这个值在整个程序运行期间都
存在。
模块级变量对整个模块的所有过程都有效,但对其它模块不可用。可以在模块顶部声明。
声明模块级变量用 Private 关键字和直接使用 Dim 没有区别。但推荐使用 Private 进行声明,
因为这样可以方便地与后面的全局变量区分开来。
全局变量是对整个 VBA 工程的所有过程都有效的变量,使用 Public 关键字在标准模块
的顶部来声明。
在类模块中,对变量作用域的理解要注意下面两点:
(a)由于类是生成对象的模具,每生成一个对象,相当于产生了一个副本,这个副本
就是对象的“真身”,副本间是相互独立的,从而,模块级的变量只作用于副本自身。
(b)类模块中使用 Public 关键字,只有当对象变量是这个类的实例时,才能被访问。
过程和函数
变量、过程(
Sub
)、 函 数 (
Function
)是我们在标准模块中使用的最基本的构件,
在类
摸块中,它们仍然是最基本和重要的角色。对于它们,你已经再熟悉不过,之所以前面还要
花这么多文字,是为了突出它的重要,也是想让你放松一下,哦,我花了很短的时间已经看
了这么多(我也写了这么多!)。
过程和函数并无实质的区别,当需要返回值时,就使用
Function
,如果不需要返回任何
结果,随你的爱好,但这时推荐你使用
Sub
,
因为这样更符合微软的本意。过程(Sub)、 函
数( Function)也有作用域,在标准模块中通过使用 Private 和 Public 关键字(可以省略 Public
关键字,因为它是默认的),可以划分为模块级和全局级,以决定它是在当前的模块有效还
是整个工程有效。
同变量一样,在类模块中使用 Public 关键字,只有当引用对象变量是这个类的实例时,
才能被访问。
通用内部控件
Control
(
s
)
VBA 提供 Control 类作为一般内部控件类型,当使用
Dim Ct As Control
声明了一个变量后,就可以将任何控件赋给该变量,而不管具体的类型,因为在类的使
用通常是处理大量相近的对象,所以这种特性非常有用。在实际使用时,我们多是通过容器
控件的 Controls 属性来返回一个 Control 的集合对象。
Dim Ct As Control
For Each Ct In Me.Controls
If TypeName(Ct) = "CommandButton" Then MsgBox Ct.Caption
Next
上面这段代码可以遍历窗体的所有控件并报告找到的命令按钮。
集合
Collection
Collection 是我们在使用类时最常用到的对象。一个 Collection 对象代表一组相关的项目,
虽然它的成员并不被强制要求是同一类型的的,但请记住,这通常并不能给我们带来额外的
剩余13页未读,继续阅读
资源评论
CODE-boy1
- 粉丝: 166
- 资源: 156
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功