首页 VBA入门指南

VBA入门指南

举报
开通vip

VBA入门指南VBA入门指南 —献给在这里得到帮助但看不懂代码的朋友(已建电梯) 1VBA入门指南 31、【2009.1.16】初识VBA 42、初识VBA(续) 53、便于对“类” 进行理解的只言片语 74、【2009.1.19】代码起步——关键字 84、【2009.1.20】代码起步——关键字(续) 115、【2009.1.21】代码起步——关键字(续) 156、【2009.1.22】代码起步——关键字(续) 177、【2009.1.27】代码起步——关键字(续) 198、【2009.1....

VBA入门指南
VBA入门指南 —献给在这里得到帮助但看不懂代码的朋友(已建电梯) 1VBA入门指南 31、【2009.1.16】初识VBA 42、初识VBA(续) 53、便于对“类” 进行理解的只言片语 74、【2009.1.19】代码起步——关键字 84、【2009.1.20】代码起步——关键字(续) 115、【2009.1.21】代码起步——关键字(续) 156、【2009.1.22】代码起步——关键字(续) 177、【2009.1.27】代码起步——关键字(续) 198、【2009.1.28】代码起步——关键字(续) 209、【2009.1.29】代码起步——关键字(续) 2310、【2009.1.30】代码起步——我的程序 2511、【2009.1.31】代码起步——我的程序(续) 2712、【2009.2.1】代码起步——我的程序(续) 2913、【2009.2.2】代码起步——我的程序(续) 3214、【2009.2.3】代码起步——我的程序(续) 3515、【2009.2.4】代码起步——我的程序(续) 4016、【2009.2.6】代码起步——我的程序(续) 4317、【2009.2.7】代码起步——我的程序(续) 此为EXCELHOME的yagi2008先生在2009年年关不辞辛劳进行的教学成果, 在此全面摘录下来,做成电子书, 以方便大家. yagi2008 为了方便大家查看本教程,特制作了索引: 【2009.1.16】初识VBA  http://club.excelhome.net/viewth ... d=701638#pid2488755 【2009.1.17】初识VBA(续) http://club.excelhome.net/viewth ... d=701638#pid2490947 【2009.1.18】初识VBA(续)  http://club.excelhome.net/viewth ... d=701638#pid2492976 【2009.1.19】代码起步——关键字  http://club.excelhome.net/viewth ... d=701638#pid2493610 【2009.1.20】代码起步——关键字(续)  http://club.excelhome.net/viewth ... d=701638#pid2496077 【2009.1.21】代码起步——关键字(续)  http://club.excelhome.net/viewth ... d=701638#pid2498626 【2009.1.22】代码起步——关键字(续)  http://club.excelhome.net/viewth ... d=701638#pid2500468 【2009.1.27】代码起步——关键字(续)  http://club.excelhome.net/viewth ... d=701638#pid2504890 【2009.1.28】代码起步——关键字(续)  http://club.excelhome.net/viewth ... d=701638#pid2505205 【2009.1.29】代码起步——关键字(续)  http://club.excelhome.net/viewth ... d=701638#pid2506201 【2009.1.30】代码起步——我的程序  http://club.excelhome.net/viewth ... d=701638#pid2507007 【2009.1.31】代码起步——我的程序(续)  http://club.excelhome.net/viewth ... d=701638#pid2507932 【2009.2.1】代码起步——我的程序(续)  http://club.excelhome.net/viewth ... d=701638#pid2509234 【2009.2.2】代码起步——我的程序(续) http://club.excelhome.net/viewthread.php?tid=390711&page=11&fromuid=701638#pid2511074 【2009.2.3】代码起步——我的程序(续) http://club.excelhome.net/viewthread.php?tid=390711&page=11&fromuid=701638#pid2513181 【2009.2.4】代码起步——我的程序(续) http://club.excelhome.net/viewthread.php?tid=390711&page=12&fromuid=701638#pid2515382 【2009.2.6】代码起步——我的程序(续) http://club.excelhome.net/viewthread.php?tid=390711&page=14&fromuid=701638#pid2519770         来这里几天了,回复了一些帖子,但仔细想想,发现很多朋友虽然得到了版主、高手们的帮助,也拿到了可以实现其所要求的功能的范例XLS文件,但往往并不能理解其中的原理和代码,更不能举一反三化为自己的东西加以应用。为了能体现“授人以鱼不如授人以渔”的技术共享精神,特开此帖,希望本帖的一些介绍能带着您进入VBA的大门。当然由于水平有限,难免出现错误,希望各位版主、高手们加以批评指正——写在开贴之初! 1、【2009.1.16】初识VBA 今天,阳光明媚,清晨刚到办公室,泡好香茗一杯,便开始构思,该如何组织这篇帖子,看来我是作好了打持久战的准备,不管最终出来的是又臭又长的裹脚布还是无厘头的流水账,只要能对您带来一点帮助或者乐趣,我就很满意了。      既然 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 目是初识VBA,那么我想先给大家一个直观的感受——什么是VBA?,往往在一些EXCEL的教材中,都会讲:VBA是一种自动化语言,它可以使常用的程序自动化,可以创建自定义的解决方案。就我看书学习的经验来说,我感到这样的定义式的描述带有很典型的中国式教材的风格,然而却不能让人立即理解,那么这样的定义有什么用呢?我给VBA下的定义是:VBA是一些代码的组合。可能这个定义没有上面教材的定义那么严谨和准确,但我想你一看就应该能明白,原来VBA就是写代码,或者说就是写程序。(如果掌握了VBA,居然我也能写程序了~~惊喜吧?)        那么你用了这么久的EXCEL,可能从来没在EXCEL的XLS文件中看到过代码,难道就写在单元格里?那我就带你去找找,VBA的代码藏在哪里吧,这也正式我今天要谈的第二个问题。当你打开一个EXCEL文件,你只能看到由许多单元格组成的工作表,这时,你可以通过【视图】菜单的【工具栏】项目,打开一个工具栏,名字叫“控件工具箱”,从左往右属第三个按钮,名字叫“查看代码”,点一下,就可以打开VBA代码编辑窗口。更简单的方法是,通过【ALT】+【F11】的快捷键,打开VBA代码编辑窗口,看到了吧,原来代码就是藏在这里的哦~~~  怎么写代码呢?你也太心急了点吧,你还没掌握命令、语法、关键字、对象、事件、属性等等 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 ,就想写代码?一口是吃不成个胖子的,还是让我来带你先认识下这里的每个角落吧,就像进了一间陌生的屋子,总归每个角落都得转到吧?最上面的几行,和EXCEL以及每一个微软平台下的应用程序都一样,总归是标题栏、菜单栏、工具栏等,接下来,看左边,有一个纵栏,写着“工程---VBAProject”,这里是工程资源管理窗口,里面通过树形列表展示了这个XLS文件(或者 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 的应该叫“工作簿”)所包含的各个工作表对象以及工作簿对象本身。有什么用呢?你双击任何一个SHEET,比如SHEET1,试试?是不是在右侧打开了一个文档编辑窗口?那么你就能明白,如果是SHEET1的代码,就应该写在这里了,那么SHEET2的呢?当然就写在双击SHEET2后打开的窗口里咯~那么SHEET3呢?你烦不烦啊~~~人家都明白了!!!再看看右侧的文档窗口吧,顶上有两个下拉列表框,一个写着“通用”,一个写着“声明”,什么东东啊?左边的那个是对象列表框,可以让你选择在这个SHEET里面包含的所有对象,右边的那个是过程列表框,可以让你选择和左侧当前选中的对象关联的系统或自定义过程。那么什么是对象?什么又是过程呢?今天没时间了,什么?领导要我马上去开会?不会加工资了吧?哈哈,明天继续! 2、初识VBA(续)  看到这么多朋友的支持和期待,倍感压力啊!怎么感觉写不好就对不起观众呢?哎,书到用时方恨少,大家将就着看吧……       昨天我们在VBA代码编辑器里转了一圈,是不是有别有洞天的感觉啊?可是,这里对于大家都是陌生的环境,到底该怎么用这里的每一个工具呢?别心急,且听我慢慢道来。在讲代码之前,我首先必须介绍一下OOP的概念和基本知识。去去去,怎么你也学着那些教材里挑些专用名词来忽悠我们啊?呵呵,因为这样才能体现作者,也就是本人的水平啊!(别扔鸡蛋,说你呢!下次不说了,还不行吗?)所谓OOP就是指Object Oriented Programming,即面向对象的程序设计方法,这种程序设计思想主要是相对于以前的面向过程的程序设计方法而言的。下面我就给大家讲个故事,很久很久以前,写程序还是很专业很神秘的一种技术活,这个时候的程序员写出来的东西,是必须要按照他给你安排好的步骤来执行的,比方说,你运行一个程序,必须先输入一条打开数据表的命令,然后才能对这个数据表进行操作,否则就会报错,甚至对于有些设计不完善的程序就会崩溃。这样写出来的程序一个是缺乏灵活性,难道作为用户就不能自己决定先浏览还是先打印?另一方面,对于那时候写出来的程序,如果将来要修改或扩充功能,那将牵一发而动全身,也为在设计这些功能的时候是一步一步安排好的,如果要修改后面的步骤,必然会影响到前面的代码,这样导致了程序员非常累。(所以高薪啊~~其实也不过是重复劳动,呵呵)。后来,出来了一个聪明人,写出了一个叫“Smalltalk”的语言,这个语言本身并没有什么特别的地方,但其中其中表现出来的接近现实形态描述的对象思想却让整个软件设计理论提升了一个新的层次。说这些和我有什么关系啊?呵呵,下面的东西就和你有关了,也为现在的基于可视化架构的程序设计基本都引入了OOP的思想,所以如果你将OOP中最主要的概念搞清楚了,那么将对以后的学习奠定扎实的基础。   面向对象的程序设计思想中主要包含四个概念。对象、事件、方法和属性。别看这些概念这么复杂,我给大家举个例子就明白了。对象是什么?就像现实中看得见摸得着的东西一样,是实实在在的东西。比如,一个苹果,就可以作为一个对象,围绕对象概念,延伸了一个“类”的概念,什么是类呢?苹果就是一个类。晕,刚才还说苹果是对象呢,怎么一会又成了类了?其实作为类而言的苹果的概念,就是指区别于梨和橘子的苹果类的概念,而不是具体指某一个苹果。红苹果、绿苹果都属于苹果这个类,哪怕烂苹果也是。(别扔啊!)我们在设计程序的时候,可以定义一个自己的类,这样以后要用到这类对象的时候,就可以通过这个类来派生出来,而不用每次都去写定义。还有个好处是,以后修改对象属性的时候,就可以通过修改类的属性来达到同时修改通过这个类派生的所有对象的属性的目的。对象的基本概念还有三个,属性、方法和事件。苹果的颜色可以看作苹果这个对象的一个属性,苹果的大小也可以看作他的一个属性,你自己还能说出什么属性吗?恩,重量、好坏、产地等等。慢点,价格是不是啊?这个问题留给大家思考吧。从上面的例子可以看出,属性是描述对象在某一方面的特征的,通过不同属性的值就可以区别开不同的对象。方法呢?对于苹果来说“吃”就是方法,啥?吃苹果也是方法?恩,别馋啊,对苹果而言,吃就是方法,因为这个是可以作用于这个对象的,还能举个例子吗?比方相对于 表格 关于规范使用各类表格的通知入职表格免费下载关于主播时间做一个表格详细英语字母大小写表格下载简历表格模板下载 对象的方法就可以是打开、关闭、修改等。方法是用来作用于对象,使其产生某种变化的。事件是什么呢?事件就是被设计用来触发某些代码来自动执行的,这个就叫做事件驱动机制。还记得刚才我们谈到的面向过程的程序设计方法的缺点吗?对,代码的执行顺序是由设计者在设计时指定的。这种吃力不讨好的事情,劝大家以后还是少做做。我们有了事件驱动机制以后,这样的情况就可以避免了。现在,可以通过将代码写在可能发生的事件中的办法,由用户决定啥时候运行这些代码,只要程序运行时,用户的操作行为触发了相应的事件,那么该事件中定义的代码,就会被自动执行了。   好了,该吃午饭了,有朋友回复说最好图文并茂,现在讲的是理论,在以后讲到代码时候,会加上插图和动画的。明天见! 3、便于对“类” 进行理解的只言片语 类是抽象的,不仅仅在程序中有,生活中到处都是。 你的衣服是按照春夏秋冬 分门别类整理存放的,到超市购物,商品也是按各种大类,小类摆放的 类 就是分类、种类的意思。 类 是人为的、按照一定的特性进行区分的一组对象(大白话就是“东西”) 你我也都是 一 “类” 生物类--》动物类--》人类 --》会使用电脑的那一类人--》会用EXCEL的一类人--》上EH的一类人 类还可以设计 ,创建 ,重复使用,这回不拿人说事了拿电脑吧 电脑粗分一下 台式机、笔记本 。 但是电脑都没有 点烟(就是汽车上的点烟器) 这个功能,但是我需要这样一个电脑,于是我就设想有这么一台,并且做了简单的设计图纸。 于是一个新类--- 点烟电脑 就设计好了(这就等于在类模块中写代码), 现在 “点烟电脑” 还只处于设计图纸中,我要想使用就必须创建,我把图纸交给厂家,厂家按设计图生产。这我才能使用(这就等于用 NEW 关键字 实体化一个类)。 我的朋友也想要一个 点烟电脑,我就不用再设计了,直接叫厂家再生产一个就行了(再 NEW一个,类的重复使用)。 整个过程当中设计图纸这一步是关键(在类模块中写代码)。 整个Windows系统中有很多种 “类”,用于实现各种功能。VBA可以直接调用。 但有些功能是我们自己想出来的,我们就只有设计一个新类,然后再调用。 谢谢LDY老师的精彩注释!!!欢迎更多的版主、朋友发表自己的想法和见解。 快过年了,早晨去了趟超市,那个人叫挤啊!本来想早点回来的,结果午饭到了2点才吃到。打开电脑,看到好多朋友都在关心这个帖子,而且好几位朋友提出了自己的见解和疑惑,想到昨天讲了“类”,今天真的感到了好“累”。   因为大家都刚接触VBA,可能光听我介绍还没有直观的感受,为了帮助大家理解,下面先介绍两个方法,可以让大家看到更多的东西。首先要介绍的是对象浏览器。打开这个对话框有三种方法。(中国的教材和教育模式下的考试,最喜欢列举完成一件事情的方法,我就纳闷,只要能解决问题,知道了一条路,干嘛还要打破沙锅问到底?)一个是通过【视图】菜单的【对象浏览器】项目,另一个是在工具栏上点击【对象浏览器】按钮。最方便的是按【F2】快捷键。打开了以后,大家看到了一个新的窗口,这里列举了三种信息,最上面的部分是用来搜索和查找信息的,中间的部分分了三栏来分别列举“库”、“类”和“成员”信息。最下面是提示和说明部分,用来说明当前选中对象的信息。为什么要介绍对象浏览器呢?大家通过这个工具可以搜索到和EXCEL以及VBA有关的各种各样的“类”和“对象”。顺便说一下,这里说的“成员”基本相当于对象、属性、方法和事件;类是成员的上级;很多类又组成了一个类库,在这里叫做“库”。以后大家如果有不明白的类,就可以在这里找到这个类有哪些对象、属性、方法和事件,以及他们之间是什么层级关系。其次,简单介绍下如何使用帮助。其实按照微软的体系,VBA的帮助包括了两个部分,一个是本地脱机帮助,也就是安装完OFFICE软件就自带的帮助,这里只是简单的介绍了VBA的基本信息。另一个部分则被微软放在了MSDN里面,这是微软单独提供给微软平台的开发人员的独立帮助工具,其中包含了非常详细的各种编程信息、技巧和案例。通过仔细研读MSDN里的内容,可以快速掌握之前不了解的编程知识,并且MSDN总是被微软的工程师们不断更新并保持着最新的状态。   下面,我们就继续昨天的内容,接着讲面向对象的编程。什么?昨天的已经都忘记了?那就先回头去看看再继续吧。今天主要给大家介绍VBA中最常用到的一些关键字。什么是关键字,关键字就是那些在OFFICE软件里已经被定义好了特定含义和用法的字符串。比方说,“IF”这个字符串,表示“如果”的意思,在VBA里用来表示条件语句的起始,那么关键字和普通字符串有什么区别呢?关键字被规定为不可以用来表示变量名、过程名、函数名等用户定义的信息,只能根据系统规定的含义使用。也就是说,你如果有个变量起个名字叫“IF”,你写一条赋值语句“IF = 1”,这样系统在编译的时候就会提示一个错误,而不能通过编译和运行。想看看VBA里一共有多少个关键字吗?从明天开始,我们将开始一一给大伙讲解,欢迎继续关注。 对于VBA,我觉得比较烦的一点儿是:对里面的对象(类)的用法不大好自学与理解。原有的帮助常常是分断的、原则性的,缺乏针对性。没有一个系统的、全面的、有较强针对性的帮助内容!或许找一本书来看,您会发现:书的知识还不如帮助呢!所以至今还未深入学习VBA。 4、【2009.1.19】代码起步——关键字  “同学们好!”,“老——师——好——”,“请坐下,把书翻到25页,今天我们讲......”,才三岁的儿子已经开始模仿和憧憬着学校的生活了~~哈哈,当我们回忆起儿时上课的情景,亲切吧?那就让我们重温一下这份感受吧。   今天开始,我们将正式进入代码的学习阶段。我多年以来的授课经验告诉我,学代码应该从关键字开始。下面列举了一些常见的关键字给大家先了解下。 【框架类关键字】 工程(Project): 是指用于创建一个应用程序的文件的集合。 对象(Object): 可控制的某个东西,例如窗体和控件。 窗体(Form):  应用程序的用户界面。   控件(Control): 指的是各种按钮、标签、文本框等。 属性(Property):是指对象的特征,如大小、标题或颜色。 工作表(Worksheet):指EXCEL文件里的工作表,例如sheet1、sheet2等。 模块(Module):指在VBA工程中存放独立于用户定义对象代码的容器。 过程(Sub):容纳和组织代码的限定符号,一般和End Sub联用,不返回结果。 函数(Function):容纳和组织代码的限定符号,一般和End Function联用,并返回结果。 【控件类关键字】 标签(Label):用来显示文本。 文本框(Textbox):用来提供给用户输入文本。 命令按钮(CommandButton):用来组织和提供程序功能。 列表框(ListBox):用来提供给用户选择列表中的数据。 组合框(ComboBox):用来提供给用户下拉选择列表中的数据。 选项按钮(OptionButton):用来提供给用户指定单项数据,一般成组使用。 复选框(CheckBox):用来提供给用户指定多项数据,一般成组使用。 【声明类关键字】 Public:声明公共类型的数据; Private:声明私有类型的数据; Static:声明静态类型的数据; Dim:声明数据类型;如:Dim myCell As Range reDim:定义未显式声明的数组的维数和元素; Const:声明常量数据;如:Const limit As Integer = 33 As:一般用于声明数据类型中的“As Type”子句; Type:声明用户自定义数据类型; 【数据类型关键字】 Byte:字节类型; Integer:整型数值类型; Long:长整型数值类型; String:字符串类型; Boolean:逻辑类型; Single:单精度类型; Double:双精度类型; Currency:货币数值类型; Decimal:可以容纳小数的数值类型; Variant:任何数字值或字符串值; Object:对象类型; 用户自定义:利用TYPE语句由用户自己定义的数据类型。 【运算符关键字】   这类关键字太多了,而且有很多种分类方法,比如按参数个数分为单目运算符、双目运算符、三目运算符和多目运算符等,按参与运算的参数类型可以分为数值运算符、字符运算符、逻辑运算符、日期运算符、字节运算符等,按照运算符的作用范围可以分为过程级运算符、函数级运算符和模块级运算符。 【程序结构类】 IF...ELSE...END IF:分支判断选择语句; DO WHILE...LOOP:先判断后执行循环语句; DO...LOOP WHILE:先执行后判断循环语句; FOR...NEXT:限定次数循环语句; GOTO...:无条件转移语句。   一下子列举了这么多的关键字,是不是眼睛都花了?是不是对这些关键字还是没搞明白该怎么用?没关系,下面就给大家一一介绍。哎呀,今天的时间又快到了,明天继续吧,别换频道啊~~ 4、【2009.1.20】代码起步——关键字(续) 大伙的热情支持,真的让我很感动,提出的很多建议对我也非常有启发,今后的帖子里将会不断吸收各位的好的意见和建议,尽我所能把这篇入门指南写好。   什么今天讲?不,今天讲什么?哎太过激动以至于有点语无伦次了。对了,今天先说说框架类关键字。列举如下:   【框架类关键字】   工程(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)   明天继续。 5、【2009.1.21】代码起步——关键字(续) 昨天刚洗了车,今天就下雨了,哎,天意弄人~~“今年春节怎么过?出门嘛?”最近听得最多的就是这句话,不管是经济危机的影响还是交通拥堵一票难求的作用,今年明显出门的人少了许多,昨天偶然听到了广播里张信哲的《逃生》,其中一首“牡丹忧”让我想起了父母,立马跑去买了龙井和翡翠的平安扣,晚上看着嘴上埋怨却掩饰不了脸上高兴的父母,总算心安了一些。不管什么借口,今年在家陪陪爸妈吧!所谓“娘生儿,连心肉;儿行千里母担忧;儿思娘亲难叩首;娘想儿来泪双流......”   言归正传,继续昨天的话题,让我们来看看第二类关键字——控件,先列表如下:   【控件类关键字】   标签(Label):用来显示文本。   文本框(Textbox):用来提供给用户输入文本。   命令按钮(CommandButton):用来组织和提供程序功能。   列表框(ListBox):用来提供给用户选择列表中的数据。   组合框(ComboBox):用来提供给用户下拉选择列表中的数据。   选项按钮(OptionButton):用来提供给用户指定单项数据,一般成组使用。   复选框(CheckBox):用来提供给用户指定多项数据,一般成组使用。   先来说说,什么是控件,顾名思义,控件就是提供给用户控制程序运行的组件。回忆一下,以往我们用过的程序很多,都用过哪些控件呢?可能之前都没有注意,但现在既然要做程序给别人用,就得注意了。我们看到,一般在我们打开的窗口上,都会有些文字,这些文字只是提供了一些信息,比如告诉你这里是输入姓名的,那里是选择性别的等等,这些文字用户并不能修改或删除,那么这些文字是不是就是写在窗体上的呢?不是,窗体只是一个容器,里面是空的,就像不能在空气里写文字一样。VBA给我们提供了一个可以写这些文字的控件,我们给它一个名字叫“标签”,E文叫“Label”。从我们上面描述的文字可以总结出标签控件的特点和作用:无法修改,主要用于显示提示信息。这是第一个控件。   第二个控件叫做“文本框”,E文叫做“Textbox”。这个控件和标签有点类似,也是放文字的,但这里的文字是让用户输入的,而不是显示给用户看的,所以我们把文本框的特点和作用做个总结就是:可以提供用户文字编辑功能,主要用来供用户录入文字信息供程序处理或存入数据库。   第三个控件叫命令按钮,E文叫“CommandButton”。这个控件的作用不用我多说了吧?当你之前每次用鼠标点击按钮,你可曾想过,为什么这么多按钮会有各种各样不同的功能?按钮除了能单击还能双击嘛?按钮的作用是在按下的时候发生还是放开的时候发生呢?所有这些问题的答案都在于事件是如何写的。按钮提供了单击、双击、按下、放开等事件,如果代码写在了按钮的某个事件里,那么在用户做出相应动作以后就会触发执行这些代码。   第四个控件叫列表框,E文叫“ListBox”。这个控件的外观,像一张一维表格(只有列标题)。这个控件的作用除了可以提供给用户一些整齐的列表信息外,还可以通过选中、单击、双击等事件,实现用户选择标准化录入的效果。   第五个控件叫组合框,E文叫“ComboBox”。这个控件比较灵活,有三种形态。第一种是下拉列表的形式,主要提供给用户选择列表里的值,用户的选择只能限于下拉列表提供的内容,不能自己输入,并且选择只能是单选。第二种是用户除了可以选择下拉列表提供的内容外,还可以输入自定义的内容,即兼具了文本框和下拉列表框的作用。第三种是用户可以对下拉列表框提供的内容进行复选。组合框是比较常用且功能较为强大的控件之一。   还有两个控件,一个叫选项按钮,就是我们平时说的单选按钮,另一个叫复选框,这两个控件经常被成组提供,主要让用户选择某些项目,而避免了文本框的不规则文本录入的问题,达到了录入结果标准化的效果。   说了这么多控件,还没看见呢!?别急,下面就告诉你怎么添加控件。如图( HYPERLINK "http://club.excelhome.net/attachment.php?aid=454063&k=e210b8d596fae4beaec05a76b8d3f854&t=1234074146¬humb=yes" \t "_blank" 1.jpg (3.83 KB) 2009-1-21 17:04 )单击“控件工具箱”工具栏中的某一个控件按钮,然后在SHEET表上就可以按住左键拖动鼠标勾画出某种控件,就这么简单。画好了,看到了,可没任何作用啊?呵呵,接下来就是要给这些控件“赋予生命”了。   再次看到“控件工具箱”工具栏,从左数第一个按钮(如图: HYPERLINK "http://club.excelhome.net/attachment.php?aid=454064&k=ce30470c1d1748d8c7cecf8ecc128cbf&t=1234074146¬humb=yes" \t "_blank" 2.jpg (4.14 KB) 2009-1-21 17:04 ),这个按钮的作用是进入设计模式和退出设计模式,如果在非设计模式下,那么对于你添加的控件就会按照你所定义的事件代码触发执行,如果要编辑这些按钮,就必须确保这个切换设计模式的按钮处于被按下的状态,这时候就进入了设计模式,这时对上述你添加的控件进行操作就不会触发你定义的事件代码,就可以提供给你编辑修改这些控件属性和代码的机会。请确认切换设计模式按钮处于按下状态,双击你添加在当前工作表中的任何一个控件,你就能看到自动打开了VBA编辑窗口,并生成了与被双击控件关联的一个事件,当前光标正在这个事件过程中一闪一闪的等你呢!请把目光移到代码编辑窗口的最顶端的两个下拉列表框那里(还记得前面讲的叫什么名字嘛?),左侧的下拉框显示的是当前控件的名称,右侧下拉框显示的是该控件的默认事件,(如图: HYPERLINK "http://club.excelhome.net/attachment.php?aid=454065&k=47bdcb383858c6a71ed5cc84235bb0c8&t=1234074146¬humb=yes" \t "_blank" 3.jpg (3.32 KB) 2009-1-21 17:04 )比如文本框,默认名称为“TextBox1”,默认事件为“Change”,这个事件表示当文本框内容发生变化的时候被触发执行。你可以下拉右侧的列表框,你会发现,和当前控件关联的事件有很多,至于如何用我们下面会逐个讲解。现在请重新回到SHEET1工作表界面,再重新选择另外一类控件,添加这个控件并双击进入编辑窗口,看看和这种(比如命令按钮)控件关联的事件有哪些?至此,知道如何给控件添加代码了嘛?   还有个小问题,你考虑过为什么这里出现的控件名称都是一样的,只是在最后添加了数字以示区别嘛?因为你没有修改控件的名称,所以就只能用默认的名称咯。其实每个控件都有名称,因为每个控件都是对象嘛!所以,设置控件的名称就是设置控件对象的一个属性。除了名称属性外,常见的还有哪些属性呢?我在这里讲一个查看属性的方法,大家不妨自己去看看各类对象的属性。所谓“师傅领进门,修行在个人”嘛!上面提到的“控件工具箱”工具栏还在吗?刚才讲了从左边数第一个按钮的作用,除了各类控件外,还有2个按钮,也就是从左边数第2个和第3个按钮没用过,你一定猜出来了,不错,第二个按钮是打开属性对话框的(如图: HYPERLINK "http://club.excelhome.net/attachment.php?aid=454066&k=08fb4e671c9ba91742e50ec89c91339a&t=1234074146¬humb=yes" \t "_blank" 4.jpg (32.43 KB) 2009-1-21 17:04 ),点了这个按钮就可以看到当前选中对象的属性,而第三个按钮则和双击某个控件一样,是打开代码编辑窗口的。   最后,我想结合一个实例讲讲常见控件的常见属性和事件。(实例: HYPERLINK "http://club.excelhome.net/attachment.php?aid=454068&k=6df82ce1e61085893411d13d28bc37b5&t=1234074146" \t "_blank" 例2.rar (9.07 KB) HYPERLINK "http://club.excelhome.net/attachment.php?aid=454068&k=6df82ce1e61085893411d13d28bc37b5&t=1234074146" \t "_blank" 例2.rar (9.07 KB) 下载次数: 70 2009-1-21 17:04 )   一般控件常见属性主要有如下几个:Enable,取值为逻辑值,通过设置该属性可以决定控件当前是否可用;Visible,取值为逻辑值,通过设置该属性可以决定控件当前是否可以被显示出来。对于标签控件,常见属性就是Caption属性,取值为文本,该属性决定了标签当前显示出来的文本。对于文本框、列表框、组合框控件,常见属性有Value属性,取值为文本,该属性决定了文本框、列表框和组合框的内容,可读写。对于命令按钮控件,常见属性有Caption属性,取值为文本,该属性决定了按钮当前显示出来的文本。   接下来,大家新建一个空白的EXCEL文档,在Sheet1工作表中,依次添加标签、文本框、命令按钮各一个,如图: HYPERLINK "http://club.excelhome.net/attachment.php?aid=454067&k=6514530d5df051b73fad3095439d79dc&t=1234074146¬humb=yes" \t "_blank" 5.jpg (6.38 KB) 2009-1-21 17:04 。设置标签控件的名称属性为:Lbl_A1;Caption属性为“A1单元格的值:”;文本框控件的名称属性为:Txt_A1;命令按钮控件的名称属性为:Cmd_A1;Caption属性为“读取”;接着,双击命令按钮控件,打开代码编辑器窗口,并在Cmd_A1_Click()事件中,添加如下代码:Txt_A1.value = Cstr(Sheet1.Range("A1").value)。保存后,回到Sheet1工作表编辑界面,单击控件工具箱的左侧第一个按钮,即退出设计模式。这时候,在A1单元格输入一个值后,只要按一下命令按钮,在文本框中就会出现A1单元格的值。   由于时间关系,今天只是简要的讲述了一些常见控件的常见属性、方法和事件,至于其他一些控件和大家以后遇到的新的控件的属性、事件和方法,可以参照我上面讲述的过程和方法自己去学习、练习和使用。   明天继续。 6、【2009.1.22】代码起步——关键字(续) 新年的脚步离我们越来越近了,越是临近过年,事情就越忙,办年货、筹备年夜饭......好不容易跑出来写点东西,不知道一会还会有啥事等着我呢!     不知道昨天讲的关于控件类的关键字大家有没有掌握,如果没搞清楚也没关系,我们接下来会专题详细讲解每一个控件的用法,只要大家耐心听下去。今天继续聊关键字的话题。今天要讲的是声明类关键字。先列示如下:     【声明类关键字】     Public:声明公共类型的数据;     Private:声明私有类型的数据;     Static:声明静态类型的数据;     Dim:声明数据类型;如:Dim myCell As Range     reDim:定义未显式声明的数组的维数和元素;     Const:声明常量数据;如:Const limit As Integer = 33     As:一般用于声明数据类型中的“As Type”子句;     Type:声明用户自定义数据类型。     考虑到该类关键字属于一个相互联系的整体,并且一般在写代码的时候都会遇到,因此我想分三个部分来讲解。首先我们先了解下VBA代码的语法结构。每一种编程语言都有各自的语法组织结构,什么内容就应该放在什么地方,就像人身上的“部件”,如果鼻子长到了眼睛的上面,那就不属于正常的人了。VBA代码一般都按照事件、过程、函数、模块、类模块等来组织,不管是系统内部定义好的还是开发人员自定义的过程、函数或模块,使用前都必须声明。声明也就是告诉VBA代码的编译器,我下面的程序中会用到这些变量、过程、函数和模块等。声明分两种,一种是显式声明,也就是将声明部分代码明确的写出来。另一种是非显式声明,意思正好和前一种相反。当您的模块中含有这条语句“Option Explicit”,那么系统就强制规定您必须显式声明该模块中的所有变量,否则将编译出错。如果没有出现上述语句,那么您可以在使用变量前不显式声明该变量,系统编译时将默认该变量类型为Variant。     声明语句可以命名和定义过程、变量、数组以及常数。当声明一个过程、变量或常数时,也同时定义了它的作用范围,而此范围是取决于声明位置以及用什么关键字来声明它。这就是我要讲的第二个问题。先说声明的位置,如果你在某个工作表的某个过程中声明了一个变量或函数,那么这个变量或函数的作用范围就局限于这个过程;如果你在一个工作表的(通用)部分声明了一个变量或函数,那么这个变量或函数的作用范围就局限于该工作表代码模块中。这就表明声明的位置可以决定变量或函数的作用范围。除了声明位置外,采用哪个关键字也可以决定被声明对象的作用范围。比如,如果你在一个自定义模块中,采用PUBLIC这个关键字来声明一个变量,那么这个变量在所有应用程序的所有没有使用 Option Private Module 的模块的任何过程中都是可用的(若该模块使用了 Option Private Module,则该变量只是在其所属工程中是公用的)。而采用PRIVATE声明的变量,其作用范围就只有该模块内部,称为私有变量。上述两个关键字只能在模块级别代码中使用。(所谓模块级别就是只在过程外部的代码,即某个工作表的<通用>部分中写的代码,区别于过程级别的代码,即过程中书写的代码)除此以外,还有一个DIM关键字,用这个关键字可以在模块级别中声明变量,也可以在过程级别中声明的变量;前者声明的变量对该模块中的所有过程都是可用的,而后者则只在过程内是可用的。STATIC关键字是用来声明静态类型变量的,这是什么意思呢?举个例子你就清楚了,一般声明的过程级别变量,在程序代码运行完该过程之后,该变量的值就自动清空了,该变量也由于所在过程的运行完毕而结束了其生存周期。这样的过程级别的变量称为动态变量。那么有另外一种变量,虽然也是在过程级别中被声明的,但在该过程运行结束以后,该变量的值仍然保持不变,直至该变量所在过程所在的模块运行中止为止。这样的变量就叫做静态变量。静态变量只能在过程级别中使用,用于声明变量并分配存储空间。在整个代码运行期间都能保留使用 Static 语句声明的变量的值,并且其生命周期与包含该过程定义的模块相同。从作用范围来讲,这类变量由于在过程级别的代码中被声明,因此其作用范围只是局限于其所在的过程内部。   如下图所示: HYPERLINK "http://club.excelhome.net/attachment.php?aid=454407&k=eea10073c53a3ba1d0c6bb86c15de296&t=1234074248¬humb=yes" \t "_blank" 变量关系图.jpg (81.61 KB) 2009-1-22 16:52 今天的内容可能比较枯燥,但绝对重要。正确理解声明类关键字的用法,对把握变量、过程、函数等对象的作用范围和生命周期有着非常总要的作用。希望今天的讲解能对大家正确理解这部分关键字带来帮助。     “什么?要定年夜饭的菜单?这就来~~~”各位,明天见! 7、【2009.1.27】代码起步——关键字(续)   小别数日,今日终于回来了。先给大伙道一声“新年好”!   早晨一早驱车三个多小时,赶到了孩子他外婆家。到达的时候已然到了中午,自然免不了应酬一番。喝了点小酒,一下午头都昏昏的。到此时日落西山,方突然想起年前许下的今日之约,立即开机上网、奋起疾书,至此,才有了下面的文字,望诸位海涵!   还记得年前我们说完了声明类关键字,今天我们要讲的是数据类型关键字,列举如下。   【数据类型关键字】   Byte:字节类型;   Integer:整型数值类型;   Long:长整型数值类型;   String:字符串类型;   Boolean:逻辑类型;   Single:单精度类型;   Double:双精度类型;   Currency:货币数值类型;   Decimal:可以容纳小数的数值类型;   Variant:任何数字值或字符串值;   Object:对象类型;   用户自定义:利用TYPE语句由用户自己定义的数据类型。   首先,我们先谈谈VBA中大伙见到的文字有哪些。大家在VBA中能够见到的文字,除了之前列举的几大类关键字(保留字)外,就是些数据和注释了。注释是以西文半角方式的单引号开头的文字,在VBA编辑器里显示为绿色。这些字主要用来注释解说变量或代码的用途。数据则有很多种,这才是我们今天要讲的主要内容。在VBA中,数据按照形态大致分为三类,常量、变量和数组。常量就是指在程序中已经指定的值,并且常量的值在程序中保持不变。举个例子,我们声明一个常量名字叫“Name”,我们在可以在声明的时候直接赋予这个常量一个值比如“张三”。那么在这个程序里,我
本文档为【VBA入门指南】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_688751
暂无简介~
格式:doc
大小:951KB
软件:Word
页数:47
分类:互联网
上传时间:2010-09-01
浏览量:30