|
楼主 |
发表于 2009-1-20 13:25
|
显示全部楼层
【2009.1.20】代码起步——关键字(续)
原帖由 fdd 于 2009-1-19 11:04 发表
感谢楼主热情的讲解及乐于助人的精神!这样的论坛就是靠这样的精神支撑起来的!
我从一个初学者的角度向楼主建议:每次的内容以一个生动的事例为核心,重点讲解相关的知识点。这样内容会更吸引人,也会有更好的 ...
大伙的热情支持,真的让我很感动,提出的很多建议对我也非常有启发,今后的帖子里将会不断吸收各位的好的意见和建议,尽我所能把这篇入门指南写好。
什么今天讲?不,今天讲什么?哎太过激动以至于有点语无伦次了。对了,今天先说说框架类关键字。列举如下:
【框架类关键字】
工程(Project): 是指用于创建一个应用程序的文件的集合。
对象(Object): 可控制的某个东西,例如窗体和控件。
窗体(Form): 应用程序的用户界面。
控件(Control): 指的是各种按钮、标签、文本框等。
属性(Property):是指对象的特征,如大小、标题或颜色。
工作表(Worksheet):指EXCEL文件里的工作表,例如sheet1、sheet2等。
模块(Module):指在VBA工程中存放独立于用户定义对象代码的容器。
过程(Sub):容纳和组织代码的限定符号,一般和End Sub联用,不返回结果。
函数(Function):容纳和组织代码的限定符号,一般和End Function联用,并返回结果。
记得我在学写程序的时候(那是很久很久以前的事情了),我最怕的就是看到这些E文字母。我经常去看HELP里面的例子,然而那里面居然连变量和过程的名字都是很长的E文。没办法,谁叫人家微软是美国公司呢!(记得之前有过几个用中文写程序的编辑器,甚至还热过一阵某语言,但随着时间的流逝,好像现在也不知去向了......)那么怎么样才能记住这些又长又难记的单词呢?不用记,你如果用VBA编程,你会发现只要你输入了正确的第一个关键字之后,可以通过支持VBA语言的编辑器自动提示输入接下来的单词,是不是很简单啊~其实多使用几次,你也就记住了。还有一个可以判断是否输入正确的方法,就是你总是用小写字母书写关键字,如果正确,编辑器会自动修正你录入的关键字的第一个字母为大写。
Project,中文翻译为工程、项目等。这个关键字在VBA中表示一个工作簿所关联的代码的总容器。所有和这个工作簿(XLS文件)关联的代码,都装在这个容器里。但这个容器不仅仅装代码,还能装好多东西,比如工作表、模块、过程、函数等。那么这个容器是不是一个对象呢?请大家结合前面的讲解思考下这个问题?答案是肯定的。(如果你答错了,请接着往下看;否则请跳过下一段。)
Object,对象,实体。在VBA中,工程、窗体、控件、工作表、模块等无一不是对象,因为这些都是实体,具备了独立存在的所有条件。比如,我问你书是对象嘛?是,因为书可以独立存在。那么颜色是对象嘛?不是,因为你无法单单拿出来一个叫“颜色”的东西,它只能作为其他东西的一种属性而存在。同样,工程,在VBA中是独立存在的,可以作为对象来看待。窗体、控件、工作表、模块也是一样。还有个小提示给大家,大家以后看到代码中某个对象名称后面跟了个S,在E文里应该表示复数,即多于一个的意思。那么在VBA中表示什么意思呢?表示多个对象放在一起,我们给它们一个名字叫“集合”。集合是对象嘛?不是,是多个对象放在一起。这个千万要注意,因为中文是没有复数的表示方法的,所以不能理解为“一个人是人嘛?是;一群人是人嘛?当然是!”,那就错了,在VBA里“一群人”不是人,是人的集合!那么你可能又会将集合同我们之前讲的“类”搞在一起了,类是对象的抽象,还拿书做例子,一本实实在在的书是一个对象,它可能是文学书,也可能是计算机书,当然可能是红色的,也可能是绿色的。而如果你脱离了具体的书而说“书”的概念,那么这时就指书这个类了。一个典型的例子是来自于生物界的分类。比如某只麻雀和某只鸽子,都是具体对象,而麻雀和鸽子都可以作为独立的一类鸟这个概念来描述,这时应该说成是麻雀类和鸽子类,同时它们又都属于鸟类这个概念,所以在类这个东西里,是可以分很多层次的,但除非具体到某一只鸟,不然就都是类的概念,而不是对象。集合呢?一群麻雀或者一群鸽子,就是集合,因为它们是由具体的很多只麻雀或鸽子组成的。干嘛费那么大劲说这些概念呢?可能你听得都快睡着了。但我还是要说,因为如果你不弄清楚类、对象和集合等概念,那么在以后写代码的时候,你就会犯糊涂,“怎么我写了一个‘对象’,就是不能用它的某个属性或方法呢?”,其实,很有可能你把对象写成了类或集合,因为他们就差一点点。(比如Row可以作为一个类,也可以作为一个对象,就看你如何声明它,同时,Rows就是一个集合)。
我还要讲一下如何使用类、对象和集合。类一般在声明部分使用,比如DIM A As Range,这里Range就表示“行”这个“范围”类,而A被声明为属于“行”这个类的类型的变量,换句话说,A在经过这样的声明以后,就可以用来引用某个具体的行对象了。比如Set A = Sheet1.rows(1)。那么这时,A就可以代表第一行这个对象了。这里的ROWS代表Sheet1的所有行对象的集合。一般集合有一个属性,叫做COUNT,表示在这个集合中的对象的个数。同时,要用集合表示具体对象时,要在集合名称后加上一对括号,里面填写对象的索引值或名称。
Form,窗体。你一般在Windows里运行的程序,都具备可视化的功能。那么这就是Form的功劳。通过引用FORM对象,你可以对这个工程里的一些窗体进行属性的设置、事件的定义以及运行某些方法。
Control,控件。 指的是各种按钮、标签、文本框等。它们可以装饰你的窗体,并在窗体中提供用户各种功能。从某种意义上讲,窗体也可以看做是控件的容器。
Worksheet,工作表。指EXCEL文件里的工作表,例如sheet1、sheet2等。通过引用这个对象,可以对工作表以及下级对象的属性进行设置、事件进行定义、方法进行执行。
Module,模块。指在VBA工程中存放独立于用户定义对象代码的容器。如果你想定义一些变量、过程或函数,并且想在各个对象(比如Sheet1、Sheet2等)中都能使用,并且可以互相传递值。那么就应该将这些声明或代码写在模块中。详细的以后用到再详述。
以上讲的都是对象,请大家参考对象的用法,具体操作一下如何声明、如何引用它们。至于如何通过对象设置属性、定义事件和执行方法,我们在具体讲解各类对象的时候再详细阐述。
Sub,过程。容纳和组织代码的限定符号,一般和End Sub联用,不返回结果。Function,函数。容纳和组织代码的限定符号,一般和End Function联用,并返回结果。这两个概念,本来应该在代码里讲的,这里只是提示一下。大家只要明白一个概念,除声明语句外其他代码都应该放在这两种容器内。
Property,属性。是指对象的特征,如大小、标题或颜色。最后讲讲这个。还记得上面讲到的对象的声明和引用的例子吗?刚讲过,应该不会忘吧,否则应该回头重新看下这篇文章了。现在,A已经被声明为一个Range类对象,并且已经赋予A引用为Sheet1的第一行了。那么如果想对Sheet1表的第一行设置为值都等于0,应该如何做呢?其实只要对Range类对象的一个Value属性设置一下就可以了,即:A.value=0。把上面所有的代码都放在Sheet1的一个叫“Worksheet_SelectionChange”的事件中,然后随便用鼠标点一个单元格试一下,是不是第一行的所有单元格都是0?恭喜你,写出了第一个完整的程序!不仅如此,你还可以在设置属性的语句后面,再写一句“A.Select”,这个是什么意思?先运行下试试(别忘记先保存)。是不是在将第一行都赋值为0以后,又把第一行都选中了?这里执行了Range类对象的一个叫“Select”的方法,作用是选中对象。回过头来想想,事件是什么?看下这个事件的名称吧:Worksheet_SelectionChange,翻译过来就是“工作表的选中项目发生改变”,也就是说只要该工作表(Sheet1)中的选中位置发生了变化,那么这个事件就会被触发,其中的代码就会被自动执行。现在明白什么叫“事件触发机制”了吧?换了以前基于过程的编程方法,那么必须规定啥时候这个单元格会被选中,而用户必须在这个规定的时候选中这个单元格,而现在有了事件触发机制,随便什么时候,只要满足事件触发的条件,这个动作就会被执行。
今天讲的所有的代码总结如下,你可以直接把它们复制粘贴到Sheet1的代码集中:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) '声明一个Worksheet_SelectionChange事件的私有过程
Dim A As Range '声明一个变量A,并制定为Range类型
Set A = Sheet1.Rows(1) '将A赋值为(引用)Sheet1工作表的第一行
A.Value = 0 '设置A变量(表示Sheet1工作表的第一行)的Value属性值为0
A.Select '执行A变量的Select方法
End Sub '事件过程结束标志
具体示例程序见下面的附件。(打开EXCEL表格后,可以通过按“【ALT】+【F11】”的方法打开代码编辑窗口,并通过双击左侧Sheet1工作表的方法打开该工作表下的代码集)。
例1.rar
(5.65 KB, 下载次数: 7660)
明天继续。 |
评分
-
1
查看全部评分
-
|