ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:28.81KB ,
资源ID:1330473      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/1330473.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(VBA类模块完全教程.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

VBA类模块完全教程.docx

1、VBA类模块完全教程写下这个题目,可能会让很多朋友疑惑,笔者先埋下一个关子,很快我会让您知道这个标题的寓意。这份礼物送给现在想学习类知识或曾经学过但因为各种原因没有“修成正果”的朋友,我期望的结果是这篇文章后,您可以在类模块中像在标准模块中写代码一样熟练,我也期望不至于太乏味而使您没有耐心看完整篇文章,或者说期望您学习的过程是轻松愉悦的,但愿我可以做到。文章构划为 8部分:1什么是类2.为什么要学习类3.类的预备知识4.创建类属性5.创建类方法6.创建类事件7.个完整的类实例8.未完的结尾什么是类在我们身边,相同或相似的物品无处不在,从生活用品,至U工业产品,通常它们都是由同一个可以称为“模具

2、”的东西生产岀来。理解类,一般要先从对象谈起,但由于从不同的角度,有不同的理解,从而也有不同的关于类的定 义,本文不去探讨一个完整并且公认的类概念,在这一部分后,只要你有一个基本的判断并且在遇到时知 道是类就可以了。在上面的这个例子中,一个“模具”就是一个“类”,而由它生产岀的每一个产品,就是一个“对象。看下面的 VBA语句:Dim tx1 As Textbox不用解释它的意思吧,这里我们用到一个类 Textbox定义了一个对象tx1,再来看:Dim tx1 As TextboxDim tx2 As Textbox又定义了一个对象tx2,如果你不嫌烦,我还可以继续下去。对象增加了,但 As后的

3、Textbox没有变,它可以无限制的使用下去。类是一个隐者,上面 Textbox是VBA已经给我们准备好的一个类,我们无法知道 VBA是怎么准备的(它的真身被隐藏了),但我们可以知道对象 tx1怎么用。VBA把对对象的使用划分为三种,属性、方法和事件(后面预备知识我们再提)。然而,Textbox是一个类,仍然不是本文要说的类,因为它是 VBA已经给我们准备好了的,我们要做的,只是知道如何使用它而已。本文要介绍的,是利用 VBA已经给我们提供的资源,来构建我们自己的类,姑且可称之为自定义类。这需要在 VBE下,通过插入类模块,然后向类模块中写入代码来完成。这就是你常常听说的类,本文的主题就是这个

4、包含代码的模块!通过这个模块,可以提供给我们一个和 VBA提供给我们的诸如Textbox功能性质完全相同的类,然后,再由我们自己象使用 Textbox 一样使用!类是一个隐者,她把自己藏在所有模块的最后,甚至在多数情况,她从不出场。现在,她挂着神秘的微笑,向你走来,你要拒绝吗为什么要学习类模块类通常被认为是学习 VBA的难点之一,之所以如此,因为相对于制造一个标准模块或用户窗体,我 们可以找到的类的学习资源少之又少, 甚至很多VB的书籍也只有缪缪字语(在后面的预备知识,我们再提另一个重要的原因)。从技术角度上看,类的构建,不象窗体, VBA的类也不象有些语言提供了可视的设计界面,感性上那样直接

5、,隐者!她是不可视的设计,所有的构建都是通过在类模块中写代码来实现的。1学习是一种兴趣的追求俗语云:学的千千万,用的有几何?又曰:书到用时方恨少。林语堂先生将做学问划分为三重境界,第二重说“为伊消得人憔悴,衣带渐宽终不悔”,大多数朋友,包括本人,都不是专业程序员,学习程序只是一种兴趣和爱好,就好象有人喜欢修炼网游一样,对喜欢程序的人,不断地学习和提高,也是一种追求优秀的态度,并且乐意享受这个追求的过程。模块、控件、 链接库和类构成软件工程开发的四大技术,而类技术是控件和链接库技术的基础,我们不得不学。2类有什么用如你前面看到的我们使用 Textbox类,类可以创建大量性质相近的对象,减轻我们的

6、程序量,简洁 代码并提高效率。类定义后,在其它模块中使用时,我们就可以暂时忘记或不必考虑它内部复杂的细节,让我们变得轻松,VBA虽然不能真正封装类的形式,但在这里,我们可以封装它的概念。这并不是类的全部好处,其它的,留着朋友们用的时候慢慢体会吧。类挂着神秘的微笑,已经走到你的大门口,开门迎接她吧,你还等什么?类的预备知识广义上讲,所有 VBA的知识,包括语句、函数以及为我们提供的标准类甚至第三方的资源都可以在 类中被使用。本文无法也不准备逐一探讨,这里只说一些最密切最基本的,但即使这样,笔者仍然不能把 这些点的知识都写到,甚至因为对问题解释清晰或符合逻辑的需要,采用非规范的表述,对专门问题的全

7、 面理解,请读者注意参考有关标准帮助文档并加以甄别。1从构建者的角度理解对象上一回我们提到,类被认为是 VBA难点还有一个原因,这就是我们的思想! VBA提供了大量的现成的类,我们几乎不再需要去构建自己的类, 这种结果,我们熟练地习惯了从使用者的角度去理解类一的实例:对象,包括它的属性、方法和事件。但是,现在你还要尝试做一个提供者,这和你作为使用者时的思考方 法是完全不同的,甚至是革命性的。这种角色的转位是痛苦的,它需要你放弃你原本可以自豪地解释岀对 象以及它的属性、方法、事件的定义,它们原本是如此逻辑地被划分,如此清晰,但现在,类模块中的一 切,彼此交织,你会发现它们都模糊了!是需要你忘掉所

8、有固执的“招势”的时候了,当你心中无剑时, 转位也就完成了,隐者变得清晰了,她是如此美丽。且慢,在你完全忘掉前,让我们最后再看一眼它们的 样子,呵呵,如果你实在忘不掉,你就提醒一下自己构建者的身份吧。下面是通常情况下关于对象、属性、 方法、事件的基本表述,如果你以前没了解过,则应当找些资料先认真地理解它们,然后再按照上面的提 示去做。对象是由类创建的一个实例,它是类的实体化。对象的引用和操作被逻辑上划分为不重叠的三个部分:属性是指对象的特性。以前面的 Textbox为例,有长度,高度,框中显示的文字等等。方法是指对象的某个操作。如让 Textbox成为当前的焦点(即光标移动到它上面)。事件是指

9、对象对外部动作的响应。如我们用鼠标点击 Textbox时,会产生一个 Click事件,改变它的值,则产生一个Change事件变量的作用域变量因为声明的位置和方式不同,从而有不同的作用域。作用域是指变量在多大范围内能被代码识 别。可以划分为过程级、模块级和全局变量。过程级变量在过程中声明,这里过程指的是一个 Sub或Function,也包括后面提到到属性过程。通 常用Dim或Static进行声明。Dim声明的变量,只在该过程执行时存在, 过程结束,变量的值也就消失了。 Static声明的变量称为静态变量,这个值在整个程序运行期间都存在。模块级变量对整个模块的所有过程都有效,但对其它模块不可用。可

10、以在模块顶部声明。声明模块级变量用Private关键字和直接使用 Dim没有区别。但推荐使用 Private进行声明,因为这样可以方便地与后面的全局变量区分开来。全局变量是对整个 VBA工程的所有过程都有效的变量, 使用Public关键字在标准模块的顶部来声明。在类模块中,对变量作用域的理解要注意下面两点:(a) 由于类是生成对象的模具, 每生成一个对象,相当于产生了一个副本, 这个副本就是对象的“真 身”,畐本间是相互独立的,从而,模块级的变量只作用于副本自身。(b) 类模块中使用Public关键字,只有当对象变量是这个类的实例时,才能被访问。过程和函数变量、过程(Sub)、函数(Funct

11、ion )是我们在标准模块中使用的最基本的构件,在类摸块中,它 们仍然是最基本和重要的角色。对于它们,你已经再熟悉不过,之所以前面还要花这么多文字,是为了突 岀它的重要,也是想让你放松一下,哦,我花了很短的时间已经看了这么多(我也写了这么多!)。过程和函数并无实质的区别,当需要返回值时,就使用Function,如果不需要返回任何结果,随你的爱好,但这时推荐你使用 Sub,因为这样更符合微软的本意。过程( Sub)、函数(Function )也有作用域,在标准模块中通过使用 Private和Public关键字(可以省略 Public关键字,因为它是默认的),可以划分为模块级和全局级,以决定它是在

12、当前的模块有效还是整个工程有效。同变量一样,在类模块中使用Public关键字,只有当引用对象变量是这个类的实例时, 才能被访问。通用内部控件Control ( s)VBA提供Control类作为一般内部控件类型,当使用Dim Ct As Control声明了一个变量后,就可以将任何控件赋给该变量,而不管具体的类型,因为在类的使用通常是处理大量相近的对象,所以这种特性非常有用。在实际使用时,我们多是通过容器控件的 Controls属性来返回一个Control的集合对象。Dim Ct As ControlFor Each Ct InIf TypeName(Ct) = CommandButton T

13、hen MsgBoxNext上面这段代码可以遍历窗体的所有控件并报告找到的命令按钮。集合 CollectionCollection 是我们在使用类时最常用到的对象。 一个Collection 对象代表一组相关的项目,虽然它的成员并不被强制要求是同一类型的的,但请记住,这通常并不能给我们带来额外的方便,相反,我们通 常是用来收集同一类型的数据。建立集合的方法和建立其它对象一样,如:Dim col As New Collection集合建立后,可以使用 Add方法添加成员,用 Remove方法删除成员,用Item方法从集合中返回特定成员。Private Sub CommandButton1_Cli

14、ck()Dim col As New CollectionDim i%Dim ct As ControlFor Each ct InIf Left, 7) = TextBox Then ctNext ctFor i = To 1 Step -1MsgBox 下面删除成员& (i).NameNext iEnd Sub上面的代码先将窗体上所有的 TextBox加入到集合中,然后再删除掉。Count属性返回集合的成员数量,Remove方法后面的参数是集合成员的索引号。成员的索引号通常是按照加入的顺序自然编号,从 1开始,但可以在加入时使用 Add方法的参数进行改变。 Add方法的完整语法是:item

15、 , key , before , afteritem必需的。任意类型的表达式,指定要添加到集合中的成员。key可选的。唯一字符串表达式,指定可以使用的键字符串,代替位置索引来访问集合中的成员。before/after 可选的。表达式,指定集合中的相对位置。下面语句向集合增加一个对象 TextBox1,并定义该成员的关键字为 tx1。TextBox1, tx1然后,下面两句都可以向集合中增加一个 TextBox2,并把它放在成员 TextBox1的前面。TextBox2,TextBox2, , tx1第一句中,因为只有一个成员,所以也是索引号使用事件的WithEvents变量WithEvents不是一个单独的语句,为了使用对象的事件,需要在声明该对象时使用 WithEvents关键字。例如:Dim WithEvents app As Applicationapp:将上面的语句写入ThisWorkBook的模块,可以看到在通用框中出现了一个变量此主题相关图片如下:在通用框选择app后,左边的声明框便会显示 app的事件。此主题相关图片如下:需要注意的是,使用WithEvents只是声明了对象变量,而并不实际生成对象,为了生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1