1、Excel VBA教程之一:写在前面VBA功能如何强大,这已勿庸费言,但如何才能很快进阶,写出自己满意的程序,却取决于个人努力和悟性。我下了很大功夫却收效甚微,有时,高手一句点拨却胜读三天书。所以,我把个人学习所得作一点整理,希望有助于后学。只所以会有看书没用之感,一来是因为市面(我国)上大多数计算机类图书多为粗制滥造之作(这话稍有唐突),二来因为计算机这东西太呆板,不见得新出现的问题就能立即得到某本书籍上的解释,新问题总是层出不穷的。想把一门编程语言全部搞懂,再去写点程序,是一个十分愚蠢的想法。你想盖房子,难道你想先学会制造砖头、玻璃等?我承认,把语言弄懂再做事情会很顺手,但是,你知道吗,有
2、多少人在弄懂一门晦涩难懂的语言之前就放弃了呢?比如,什么叫面向对象编程?OOP和以前的流线性编程有什么异同?我还是大力提倡学以致用,别指望什么事你都能成专家,计算机世界的“罗氏定理”就是:“毕其一生,不能穷其万一”,你记住了吗?那么,对于没有编程基础的人,怎样才能进步得快呢?我有几点思考:1.你一定要带着明确的目的去做一件具体的事。这样,才会在做的过程中发现问题,并逐步去解决这些问题。比如,我想做一个学生成绩分析系统,我就会想到怎么才能把学生分数分成不同的班、怎么才能算出总分、平均分、标准差等、怎样比较各班的情况,怎样用图形显示更直观,怎么样才能把某个学生的历次成绩放在一起比较等。2.你动手去
3、做一做,一点一点地完成你上面的设想,不必因为这个大工程没做出来而忽略你在局部的突破,这样,你会越来越有信心,这就够了,还有什么比有信心做事的感觉更好的了吗?3.合理及时利用网络资源,这绝对是个好东西,或许你看起来很了不起的问题,在别人看来简直不算什么,一定会有人为你解答。上网并不只是QQ和game啊! 同时要好好利用软件的帮助系统,这才是最权威的解释,很多计算机书籍抄自帮助,你想,微软的专家写的,绝对原创,他还能去抄谁?4.做了一些工作之后,再回过头来看书,就会感觉很亲切,觉得写书的人原来也不是一无是处,也是很辛苦的(不要过分自我批评了)。不过,要看书,计算机类的,我百分之一万地推荐你看外国人
4、写的,首先,软件是人家编的,当然更了解。其次,外国人写的,又被介绍到中国来,也是比较优秀的了。三来,我确实作过对比,看老外的书收益最大。语言不通的问题怎么办?金山词霸一下呗。我为什么要写这个东西?一是因为我想帮助别人,二是因为我想因此促进自己,三是因为我反感某些号称程序员的家伙,似乎编程是一件多么了不起的事,用一些极端人士的话来说:“编程有什么了不起?不就是判断和循环吗”,说得很有道理,从本质上说,计算机就是在做判断和循环,不信你就跟着我来吧。好了,Lets go Excel VBA教程之二:从一个界面设计开始一个好的软件,除了运算速度快、体积小后,更重要的是,它的用户界面是不是很友好、亲切,
5、“友好、亲切”这样的词汇在开始接触计算机语言时,感觉很好笑,但现在不一样了,我感觉这两个词最贴切!界面友好,就是引导用户能很快找到他需要的服务,最能想到他的心思,最体贴他,让他不时地心动,不时地赞叹!界面友好,就是能让用户在不经意间学到好多知识,无形中丰富了他自己,让他有美的享受!界面友好,还在于一目了然的界面却能让他需要的功能呼之即来,挥之即去!如此等等。那么,我想做一个学生成绩分析系统,我该怎么做呢?以下的界面你满意吗?这个界面上有你做成绩分析的各项功能,从考试的组织生成考号、到学科组录入各科成绩、到录错后的修改、到统计分析生成各班情况、各学科组情况、人头数、分数线的预测、到打印、存档、调
6、用。最为特色的功能是深度跟踪,它可以自动把一个学生的历次成绩都调出来,进行历史分析,看一看一位学生的成绩为什么会好或坏,这个功能能不让人心动吗?如果你不知道各个按钮的作用,旁边就是帮助系统,告诉你它们的功能是什么,你应当怎么去做。你还有什么问题呢?如果有,我已经提供了E-mail地址,告诉我啊,可以为你量身定做!要说多余,就是版权信息了,呵呵,我也是劳动,你就尊重一下没什么大不了的啊!以上这个界面,可以说十分友好了。那么,我到哪里去做这个东西呢?要编程吗?不用编程,打开Excel,按下Alt+F11,就可以了,我还可以右击工作表,选查看代码,还有其它方法,我的意见是一种就够了。我们的目的是去公
7、园玩,而不是总结有几条路可以到那里,别开小差,快回来!打开Excel,按下Alt+F11,你看到了下图:再点击“插入”菜单,选“用户窗体”,然后得到下图中间有个工具箱,上面有按钮啊、文本框啊、标签啊等等,你只要把它们拖到到右边那个带有“麻麻点”的窗体中,并调整一下它们的大小和位置,就会做得比我还好了了。精确调整它们,要用到左下角的属性窗口。怎么拖知道吗?不是用绳子捆住,不是用牛拉,而是用鼠标!建立了界面之后,你除了长舒一口气外,是不是体会到一点喜悦呢?生活就是这样,找个空偷着笑,不过,还是要干点实事的哟!我猜到了,现在你比我还急了,你更想赋于每个按钮一定的功能,希望点它一下,它就能做点事情,你
8、的想法太对了,每一个按钮,当我们给它各写一段程序,让它能实现一定的功能时,我们就把叫做面向这个对象编程,对象,在这里,就是按钮。希望那些比较“zhuai”的程序员别面带轻蔑,你倒给我说说,如何才能让不懂程序的同志很快理解“面向对象编程”这个意思?我们下一期见!Excel VBA教程之四:你要删除谁前面的学习,让我们初步体验到使用代码比较方便,代码本身也比较简单,这是VBA的优势,我们发现,编程其实并不难,不过,这只是初步,想实现比较复杂的功能,路还长着呢,好在,只要有信心,有兴趣,总是可以成功的。那么,如果我想插入的不是一张表,而是20张表,需要运行20次上节课所提到的代码吗?其实不需要,我们
9、只要再插入几行代码就可以了。回顾一下:Sub 建立工作表()Sheets.AddEnd Sub可以利用工作表的Add属性增加工作表,如果想添加更多,只要设置一个循环就可以了。还记得教程一中的那种话吗?“编程有什么了不起?不就是判断和循环吗”,我们来验证一下。Sub 建立工作表()Dim i As IntegerFor i = 1 To 5Sheets.AddNext iEnd Sub这段代码一运行,一下子就可以插入5张表,如果你把5改成50,则一下子可以产生50张表,如果是手工插入,你要花多长时间啊!其中的 fornext就是表达循环关系的一种方式,还有其它种类,暂且不表。值得提醒的是,循环变
10、化i在使用前,你一定要先和dim声明一下。你发现,所生成的工作表的名称,是自动加上去的,要是在生成的时候,就给个名字,是不是会更好呢?试试下面的代码吧。Sub creatsheet1() Dim i As Integer For i = 1 To 10 Sheets.Add ActiveSheet.Name = i Next iEnd Sub一下子生成了10张表,表名从1到10,难道用它来表示一班到十班,不是非常好吗?我想到了我们的成绩分析系统。如果名字不是一个系列的数字,你可以使用数组来表达,比如知个学科表。Sub creatsheet() Dim i As Integer Dim shee
11、tName sheetName = Array(语, 数, 英, 物, 化) For i = 0 To 4 Sheets.Add After:=Sheets(Sheets.Count) ActiveSheet.Name = sheetName(i) Next iEnd Sub到目前,你的工作簿中已经有很多工作表了,如果你实验的次数足够多,你还会收到一些错误的警告,那是因为你插入的工作表重名了。如果你要删掉一张工作表,那有点麻烦,因为你必须具体而明确地指明是哪一张工作表,否则,程序不知你对谁的工作不满意了,要删除谁,你得先指明。这完全不象某些的领导,要表扬,就会表扬一大堆,尽管有时是某名其妙的张
12、冠李戴,而批评,也是一本糊涂账。怎么删呢?看下例:Sub deleteSheets() Sheets(“sheet1”).DeleteEnd Sub如果你想删掉一些工作表,你想手动还是用代码自动化呢?当然是后者,看看下例。Sub deletesheet3() Dim i As Integer For i = 1 To 5 Sheets(CStr(i).Delete Next i End Sub千万注意不要写成Sheets(i),一定要加上CStr(),我就是吃了这个亏,浪费几个小时,气晕了头才发现的,计算机是多么机械的一个东西,不能越雷池一步,有点象某些死板的领导。要是删那种不是数据系列的工作
13、表,就得用下面的代码了。Sub deleteSheets() Dim className className = Array(语, 数, 英, 物, 化) For i = 0 To 4 Sheets(className(i).Delete Next iEnd Sub你插入的那些有名字的工作表,将逐一被删除!每删一张,都会给一句警告,能否让它不出现呢?再加两句代码,就可以了。Sub Deletesheet() Dim className className = Array(语, 数, 英, 物, 化) Application.DisplayAlerts = False For i = 0 To
14、4 Sheets(className(i).DeleteNext iApplication.DisplayAlerts = TrueEnd Sub以上代码将用到成绩分绩系统统计分析按钮和退出系统按钮中,点一下统计分析,就会产生各班级和各学科分数表,只是暂时还没有数据,会有的,你得有点儿耐心。再点一下退出按钮,将把这些表给删了,会让我们的软件体积更小。好啦,到这里,你已经可以添加你想要的任意数量的工作表,也可以把它删了,都只是弹指之间的事情,以后,你要是有什么不顺心的事,可以到这里反复添加和删除,相当于到健身房去打拳。好象,人们越来越脆弱了,据说这样可以发泄自己,让自己很快平静下来。常听到两句时髦的话:“要调整好心态”、“你不能改变世界,那你可以改变自己的心情”,我感觉人类真是越来越渺小,越来越脆弱了,这种对命运的逃避、妥协、呻吟和哀叹,真让人看不起,更有许多人,心态其实很差,往往张口避口对别人谈心态,仿佛自己人心态很好似的,不过是个掩耳盗铃的小丑!或许是虚张声势地掩盖自己的自卑而已。还有一种“心态好”,那是一种赤裸裸缺乏基本的羞耻感。扯远了,打住。本期的作业:你得看一看数组这个东西,还要看一眼变量的声明,看帮助就可以了。我们下期见!