零基础也能学会VBA?当然!
各位表亲好,叶枫老师是EH论坛VBA编程在线课程的讲师,也是史上最畅销图书《别怕,Excel VBA其实很简单》的作者。前些时间,陆续推送VBA的一些基础知识,初步认识了VBA与宏、VBE、对象的方法和属性等概念,今天继续学习VBA的相关知识。
先来看什么是VBA过程
一个过程就是执行某些动作的代码组合。
VBA过程分Sub过程和Function过程。
1、Sub过程总是以“sub过程名()”开头,以“EndSub”结尾,一个过程就是执行某项动作的一套指令,Sub过程不返回运行的结果。
2、Function总是以“Function程序名()”开头,以“EndFunction”结尾,和Sub过程的区别是Function过程返回程序运行的值,值可以是一个值或一个数组,就像我们的工作表函数,Function过程也就是我们说的自定义函数。
在这里,叶枫主要要给大家讲的是Sub过程,Function过程如果需要的话,在后面我们再讲。结合前两期的内容,相信大家对VBA应该已有一个简单的认识了吧?
要设计一个过程,其实很简单,把需要的对象收集起来,看看我们要对他们的属性进行怎样的修改?我们需要做什么?需要用什么样的方法?要用哪些事件?收集起来就是一个完整的过程。
只要你肯动手,一定会觉得很简单,你不要被那一大堆的对象、属性、方法和事件给吓晕了,完全不必全部记住它们,需要的时候知道在哪里找就行,而代码也不必一个一个的去输入,还记得前面一贴我们说的录制宏吗?当你需要进行某项操作的时候,不妨先录一段宏,但是宏是呆板的,有许多我们不需要的东西,给它修修枝,剪剪叶,整理整理,一个程序就OK了。
同时,建议你在VBE窗口中,单击“工具——选项”,在弹出的“选项”对话框里勾选“自动列出成员”。
设置好后,试着在代码窗口里输入点代码,看看,有什么?呵呵......,不用我说了,对于初学的我们,很需要它吧?
了解了对象,属性,方法及事件后,猪八戒按门铃开门的过程我们都可以把它写成程序:
Sub门铃_单击()
如果嫦娥.位置=在家那么门.开
Endsub
上面这个并不是真的程序,但都有了程序的思想了,程序里,事件、对象、属性及过程都有了,你能找出来吗?
多尝试,温故知新,你可以想着用程序去解决一些你在使用Excel过程中遇到的问题,每一个问题的解决,你都会发现自己得到了很大的进步.
好了,还是那句话,路在脚下,继续走,精彩会慢慢为你上演,让我们一起努力,共同进步。
在上面,我们简单介绍了VBA的开发环境、几个常用的窗口,并对对象、对象的属性、对象的方法、对象的事件等概念作了简单的介绍,贴子大家认真看了吗?有没有一点点的收获?学习成绩如何?
什么是对象?什么是集合?什么是属性?什么是方法?什么是事件?如何正确地表示它们?
这些,你都能回答了吗?
先沉思三秒钟,如果你不能回答,那请赶快回过头去,再看一遍,我们说VBA是采用面向对象的程序设计方式,这些都是很重要的概念,如果不弄清楚,实际应用时,你可能会感到手忙脚乱。
如果已经掌握了,那让我们一起继续本贴的内容。
这次,我们将继续单调的基本功练习,讲一些VBA里面的关键字,为程序设计打下基础,还是那句话,希望你不要嫌内容的单调,一口你永远也吞不下一个大胖子,学习是一个循序渐进的过程。
然后再给大家讲一下,什么是数据类型、变量、常量、数组
VBA的主要目的是什么?不用说了你也知道,当然是处理数据。某些数据存在于对象中,如工作表的单元格区域里,某些数据存在于我们自定义的变量中。
1、数据类型
数据类型告诉计算机如何将数据存储在内存中,如以整数、字符串、日期等。
数据类型是变量的特性,数据类型包括:
Byte、Boolean、Integer、Long(长整型)、Single (单精度浮点型)、Double (双精度浮点型)、Currency(变比整型)、Decimal、Date、Object、String(变长)、String(定长)、Variant(数字)、Variant(字符)以及用户自定义。
2、变量
变量是用于保存在程序运行过程中需要临时保存的值或对象。就相当于我们在操作工作表的时候插入的辅助单元格、辅助列或辅助表一样。
同工作表的单元格一样,变量可以接纳很多种的数据类型,如其名,程序运行后,变量的值是可以改变的。
如何定义变量?
定义变量可以使用Dim语句:
Dim变量名As数据类型
变量名有一定的命名规则,这里我就不详细说明了,需要提醒的是在程序的设计过程中,你可能会定义很多的变量,为了阅读及修改程序的方便,你定义的变量名尽量能让人一看就明白这个变量具体代表的是什么。
在Dim语句中,我们可以不必声明变量的数据类型,直接输入“Dim变量名”此时定义的变量将被指定为Variant类型。
但我们在程序设计的过程中,一般应该明确数据的类型,这是一个好的编程习惯,因为指定数据类型后会提高程序的运行速度。
我们可以在模块中输入“OptionExplict”作为第一句语句来强制声明所有变量。也可以点“工具——选项”,在选项对话框里勾选“要求声明变量”。这样,VBA在遇到没有声明的变量名称,该语句将导致程序停止。
定义变量除了可以使用Dim语句外,比较常的还有:static语句,Private语句,Public语句。使用不同的语句定义的变量不同的是它们的作用作用域不同,具体为:
(1)如果在一个过程中包含了一个Dim或Static语句,此时声明的变量作用域为此过程,即本地变量。
(2)如果在一个模块的第一个过程之前包含了Dim或Prvate语句,此时声明的变量作用域为此模块里所有的过程,也就是在此模块里所有的过程都可以使用它,即模块作用域下的变量;
(3)如果在一个模块的第一个过程之前包含了Public语名,此时声明的变量作用域为所有模块,即公有变量。
变量的作用域是指变量保留其值的这段时间,也称为变量的生成周期,它决定变量可以用于哪个模块或过程中。
如何给变量赋值?
用等号(=)是VBA里的赋值运算符。
比如我们把'我在学习VBA变量!'这个字符串赋给变量A,则直接输入:
A='我在学习VBA变量!'
对了,你可以在立即窗口里试一下逐条输入:
A='我在学习VBA变量!'
MgboxA
看一下效果。
注意,在VBA里文本是要用英语引号引起来的,还有日期要用#号,比如将日期2009-3-10赋给变量A,则为:
A=#2009-3-10#
3、常量
执行过程时,变量的值会发生改变,所以我们称它为“变量”,但有时候我们需要引用不会发生变化的数据,这就是常量。常量声明后,不以对它进行再赋值。
声明常量设定常量的值,需要用Const语句:
Const常量名As数据类型=常量的值
4、数组
除了变量和常量以外,数组也是我们常用到的。
什么是数组?
数组是具有相同数据类型并且共享一个名字的一组变量的集合。数组也是变量。
数组中的元素通过索引数字加以区分。
如何声明数组?
可以用Dim语句或者Public语句声明数组。
Dim/Public数组名(atob)as数据类型
a和b是数组中元素的个数,数组元素素最小值为a,最大值为b,元素个数为(b-a+1)个,当然,你也可以直接输入个数,此时默认最小索引号为0。
如:Dimmyarr(5)AsInteger
这个数组的最小元素索引号为0,元素个数为6。
上面定义的只是一维数组,你还可以定义二维、三维、四维…….
如:Dimmyarr(1to5,1to10)AsInteger
这就是一个二维数组,元素个数为5*10=50个。
在程序设计的过程中,定义数组的时候我们可能不能确定数组的元素个数,对数组进行声明后,可以在运行时用ReDim语句重新指定数组的大小。
今天的这一部分内容实在很枯燥,连叶枫都有点耐不住了,拉拉杂杂说了这么多,也不知道你看出点门道没?同前一贴讲的内容一样,这些基础都是非常重要的,多读几遍,扎好马才能修练更高深的武功,千万别嫌这个过程的漫长。
一个让你心仪的女孩子,想牵上她的小手,徜徉在公园里的林荫小道上,先前的送花、打电话等等那一串串巴结的行动你会不会嫌太漫长?
VBA不像函数那样直面我们,它躲在Excel的背后,像一个“养在深闺未得见”的美丽姑娘,她飘在墙角的那缕模糊却美丽的身影对我们充满了诱惑,现在我们正在想法设法寻找她的联系电话,要想成功俘虏她,这一步能少吗?
看的没有动的快,动手操作才是学习的正确方法。发现问题,解决问题,这岂不是一个快乐的过程?