看一下上面的代码,对象和事件之间用什么来分隔?还是不是点?
千万别懒,一定要动手,换其他的事件或其他的对象试一试,试着用代码改一下其他对象的属性,在单元格里添加点什么东西,这些随你了,你可千万别说你不知道哪些事件是干嘛用的。
别忘记,抹黑代码,按F1,再重复一遍,这是一件好武器,一般人我不告诉他. VBA过程
================
一个过程就是执行某些动作的代码组合。 VBA过程分Sub过程和Function过程。
1、Sub过程总是以?sub 过程名()?开头,以?End Sub?结尾,一个过程就是执行某项动作的一套指令,Sub过程不返回运行的结果。
2、Function总是以?Function 程序名()?开头,以?End Function?结尾,和Sub过程的区别是Function过程返回程序运行的值,值可以是一个值或一个数组,就像我们的工作表函数,Function过程也就是我们说的自定义函数。
在这里,叶枫主要要给大家讲的是Sub过程,Function过程如果需要的话,在后面我们再讲。
好了,今天已经讲得够多了,你对VBA应该已有一个简单的认识了吧?
要设计一个过程,其实很简单,把需要的对象收集起来,看看我们要对他们的属性进行怎样的修改?我们需要做什么?需要用什么样的方法?要用哪些事件?收集起来就是一个完整的过程。
只要你肯动手,一定会觉得很简单,你不要被那一大堆的对象、属性、方法和事件给吓晕了,完全不必全部记住它们,需要的时候知道在哪里找就行,而代码也不必一个一个的去输入,还记得前面一贴我们说的录制宏吗?当你需要进行某项操作的时候,不妨先录一段宏,但是宏是呆板的,有许多我们不需要的东西,给它修修枝,剪剪叶,整理整理,一个程序就OK了。
同时,建议你在VBE窗口中,单击?工具——选项?,在弹出的?选项?对话框里勾选?自动列出成员?。
1.jpg (32.45 KB)
设臵好后,试着在代码窗口里输入点代码,看看,有什么?呵呵......,不用我说了,对于初学的我们,很需要它吧?
2.jpg (15.69 KB)
了解了对象,属性,方法及事件后,猪八戒按门铃开门的过程我们都可以把它写成程序: Sub 门铃_单击()
如果 嫦娥.位臵=在家 那么 门.开 End sub
上面这个并不是真的程序,但都有了程序的思想了,程序里,事件、对象、属性及过程都有了,你能找出来吗?
多尝试,温故知新,你可以想着用程序去解决一些你在使用Excel过程中遇到的问题,每一个问题的解决,你都会发现自己得到了很大的进步.
好了,还是那句话,路在脚下,继续走,精彩会慢慢为你上演,让我们一起努力,共同进步。
在上面,我们简单介绍了VBA的开发环境、几个常用的窗口,并对对象、对象的属性、对象的方法、对象的事件等概念作了简单的介绍,贴子大家认真看了吗?有没有一点点的收获?学习成绩如何?
什么是对象?什么是集合?什么是属性?什么是方法?什么是事件?如何正确地表示它们?
这些,你都能回答了吗?
先沉思三秒钟,如果你不能回答,那请赶快回过头去,再看一遍,我们说VBA是采用面向对象的程序设计方式,这些都是很重要的概念,如果不弄清楚,实际应用时,你可能会感到手忙脚乱。
如果已经掌握了,那让我们一起继续本贴的内容。
这次,我们将继续单调的基本功练习,讲一些VBA里面的关键字,为程序设计打下基础,还是那句话,希望你不要嫌内容的单调,一口你永远也吞不下一个大胖子,学习是一个循序渐进的过程。
------------------
数据类型、变量、常量、数组
====================
VBA的主要目的是什么?不用说了你也知道,当然是处理数据。某些数据存在于对象中,如工作表的单元格区域里,某些数据存在于我们自定义的变量中。 ------------------------------------------------------- 1、数据类型
数据类型告诉计算机如何将数据存储在内存中,如以整数、字符串、日期等。 数据类型是变量的特性,数据类型包括:
数据类型 Byte Boolean Integer Long(长整型) 存储空 间大小 1 个字节 2 个字节 2 个字节 4 个字节 范围 0 到 255 True 或 False -32,768 到 32,767 -2,147,483,648 到 2,147,483,647 负数时从 -3.402823E38 到 -1.401298E-45;正数时从 1.401298E-45 到 3.402823E38 负数时从 -1.79769313486232E308 到 -4.94065645841247E-324;正数时4.94065645841247E-324 到 1.79769313486232E308 从 -922,337,203,685,477.5808 922,337,203,685,477.5807 Single (单精度浮4 个字节 点型) Double (双精度浮8 个字节 点型) Currency (变比整型) 从8 个字节 到 Decimal 14 个字节 没有小数点时为 +/-79,228,162,514,264,337,593,543,950,335,而小数点右边有 28 位数时为 +/-7.9228162514264337593543950335;最小的非零值为 +/-0.0000000000000000000000000001 100 年 1 月 1 日 到 9999 年 12 月 31 日 任何 Object 引用 Date Object String (变长) String(定长) Variant(数字) Variant(字符) 8 个字节 4 个字节 10 字节加0 到大约 20 亿 字符串长度 字符串长度 1 到大约 65,400 16 个字节 任何数字值,最大可达 Double 的范围 22 个字节加字符串长与变长 String 有相同的范围 度 所有元素所每个元素的范围与它本身的数据类型的范围相同。 需数目 用户自定义 (利用 Type) ------------------------------------------------------- 2、变量
变量是用于保存在程序运行过程中需要临时保存的值或对象。就相当于我们在操作工作表的时候插入的辅助单元格、辅助列或辅助表一样。
同工作表的单元格一样,变量可以接纳很多种的数据类型,如其名,程序运行后,变
量的值是可以改变的。
如何定义变量?
定义变量可以使用Dim语句:
Dim 变量名 As 数据类型
变量名有一定的命名规则,这里我就不详细说明了,需要提醒的是在程序的设计过程中,你可能会定义很多的变量,为了阅读及修改程序的方便,你定义的变量名尽量能让人一看就明白这个变量具体代表的是什么。在Dim语句中,我们可以不必声明变量的数据类型,直接输入?Dim 变量名?此时定义的变量将被指定为Variant类型。
但我们在程序设计的过程中,一般应该明确数据的类型,这是一个好的编程习惯,因为指定数据类型后会提高程序的运行速度。
我们可以在模块中输入?Option Explict?作为第一句语句来强制声明所有变量。也可以点?工具——选项?,在选项对话框里勾选?要求声明变量?。这样,VBA在遇到没有声明的变量名称,该语句将导致程序停止。
定义变量除了可以使用Dim语句外,比较常的还有:static语句,Private语句,Public语句。使用不同的语句定义的变量不同的是它们的作用作用域不同,具体为:
(1)如果在一个过程中包含了一个Dim或Static语句,此时声明的变量作用域为此过程,即本地变量。
(2)如果在一个模块的第一个过程之前包含了Dim或Prvate语句,此时声明的变量作用域为此模块里所有的过程,也就是在此模块里所有的过程都可以使用它,即模块作用域下的变量;
(3)如果在一个模块的第一个过程之前包含了Public语名,此时声明的变量作用域为所有模块,即公有变量。
变量的作用域是指变量保留其值的这段时间,也称为变量的生成周期,它决定变量可以用于哪个模块或过程中。
给变量赋值
用等号(=)是VBA里的赋值运算符。
比如我们把\我在学习VBA变量!\这个字符串赋给变量A,则直接输入:
A=\我在学习VBA变量!\ 对了,你可以在立即窗口里试一下逐条输入: A=\我在学习VBA变量!\ Mgbox A
看一下效果。
注意,在VBA里文本是要用英语引号引起来的,还有日期要用#号,比如将日期2009-3-10赋给变量A,则为:
A=#2009-3-10#
------------------------------------------------------- 3、常量
执行过程时,变量的值会发生改变,所以我们称它为?变量?,但有时候我们需要引用不会发生变化的数据,这就是常量。常量声明后,不以对它进行再赋值。
声明常量设定常量的值,需要用Const语句:
Const 常量名 As 数据类型 = 常量的值
-------------------------------------------------------
4、数组
除了变量和常量以外,数组也是我们常用到的。 什么是数组?
数组是具有相同数据类型并且共享一个名字的一组变量的集合。数组也是变量。 数组中的元素通过索引数字加以区分。 如何声明数组?
可以用Dim语句或者Public语句声明数组。 Dim/Public 数组名 (a to b) as 数据类型 a 和b 是数组中元素的个数,数组元素素最小值为a,最大值为b,元素个数为(b-a+1)个,当然,你也可以直接输入个数,此时默认最小索引号为0。 如: Dim myarr(5) As Integer 这个数组的最小元素索引号为0,元素个数为6。
上面定义的只是一维数组,你还可以定义二维、三维、四维……. 如: Dim myarr(1 to 5,1 to 10) As Integer 这就是一个二维数组,元素个数为5*10=50个。
在程序设计的过程中,定义数组的时候我们可能不能确定数组的元素个数,对数组进行声明后,可以在运行时用ReDim语句重新指定数组的大小。 -------------------------------------------------------
今天的这一部分内容实在很枯燥,连叶枫都有点耐不住了,拉拉杂杂说了这么多,也不知道你看出点门道没?同前一贴讲的内容一样,这些基础都是非常重要的,多读几遍,扎好马才能修练更高深的武功,千万别嫌这个过程的漫长。
一个让你心仪的女孩子,想牵上她的小手,徜徉在公园里的林荫小道上,先前的送花、打电话等等那一串串巴结的行动你会不会嫌太漫长?
VBA不像函数那样直面我们,它躲在Excel的背后,像一个?养在深闺未得见?的美丽姑娘,她飘在墙角的那缕模糊却美丽的身影对我们充满了诱惑,现在我们正在想法设法寻找她的联系电话,要想成功俘虏她,这一步能少吗?
看的没有动的快,动手操作才是学习的正确方法。发现问题,解决问题,这岂不是一个快乐的过程。
有人问:如何知道该定义变量为何种类型? ===========
这就要根据你的实际需要,再结合各种数据的的范围来看。
在编写程序的过程中,选择需要存储空间尽量小的数据类型来保存所需要的数据,这是很有必要的,虽然我们可以把变量设为Variant型,但上面我说了,定义变量类型会提升程序的运行速度,这也是VBA提供各种数据类型存储空间的原因。 该定义变量为哪一种类型?看一看它的长度。 用生活中的一个实例来说这个问题:
有一天你上街去买一斤菜油,我们需要选择一个容器来装我们所要买的菜油(相当于声明变量的类型),如果我们没有选择选择容器,上帝可不知道你要买多少斤菜油,他就扔给你一个超级大的水缸,这个水缸无论你要买多少菜油都是可以装得下的。可是携带这样一个水缸上街你会不会觉得太不方便了?用一个水缸来装一斤菜油会不会太浪费了?所以我们得自己