Excel 2007 VBA 教程
第三讲 VBA 语法基础
在学习VBA之前,我们要了解VBA里的对象,属性,方法,事件,就像我们在生活中一样,和一个人谈恋爱,是不是要相互了解对方,才能步入结婚的礼堂。下面来一一介绍它们 一、对象
1) 什么是对象呢?生活中的手机,电视机,桌子等等这些就是对象,而在我们的Excel里VBA 的对象是指
什么呢?这个可能抽象一点。工作簿,工作表,艺术字,图片这些就是Excel里的对象 2) 实例 A. Workbooks 代表工作簿集合,所有的工作簿,Workbooks(i),表示已打开的第i个工作簿 B. Workbooks (\汇总表\代表“汇总”工作簿 C. ActiveWorkbook 当前正在操作的工作簿 D. ThisWorkBook 代码所在的工作簿 E. Sheets(\汇总\代表“汇总”工作表 F. Sheet1表示第一个插入的工作表,Sheet2表示第二个插入的工作表....... G. Sheets(i) 表示按排列顺序,第i个工作表 H. ActiveSheet 表示当前活动工作表 I. Worksheet 也表示工作表,但不包括图表工作表、宏工作表等。 J. Cells 所有单元格 K. Range (\单元格地址\L. Cells(行数,列数) M. Activecell 当前选中的单元格 N. Selection 被选中的单元格或者单元格区域 二、属性
1) 属性是指对象的特点,对象固有的,如图片就有图片高度,图片的宽度,单元格就有单元格的底纹,单
元格字体的颜色,这些就是它们的的属性,打个比方,生活的一些东西,如“苹果”,苹果的形状,苹果的颜色,苹果的重量,这些就是苹果的属性。 2) 实例 A. 显示单元格A1相对引用的地址,而这个Address就是单元格Range的属性 Sub test()
MsgBox Range(\End Sub B. 代码解释 属性中间一定要用点号分开,可能有的学生会问,怎么才有能知道它有那些属性呢?打个
比方,我现在想知道工作表有那些属性,我们可以先输入Sheet1再加一下点号,就会自动弹出其相应的属性列表出来,就像我们的Excel2007版的函数一样,你输入一个字母,就会弹出以这个字母开头所有函数出来,这样大家也就不用去记这些属性具体这个英文单词怎么写,只要大概了解知道有个这样的属性就可以了
三、方法
1) 方法是作用对象的一些动作,工作表删除,工作表移动,单元格复制,这些删除,移动,复制就是相应
对象的方法。打个比方,苹果被削了,削就是苹果的方法。 2) 实例 A. 在第一个工作表前面插入一个工作表 Sub test()
Sheets.Add before:=Sheets(1) End Sub B. 代码解释 Sheets是指工作表类,也就是工作表对象,中间用一个点分开,Add就是方法了,然后再
输入一个空格,before是对Add方法的一个补充说明,格式一定要这样,输入了Before之后,再
第 8 页 共 52 页
Excel 2007 VBA 教程
输入一个冒号,接着输入一个等号,整个代码的意思,在第一个工作表前插入一个新的工作表。
四、事件
1) 事件在Excel VBA里是指一定条件下,触发过程,如双击左键,右击,改变单元格内容,选择不同的单
元格就会触发一个过程就叫做事件,事件一般都是写在相应的工作表模块里 2) 实例 A. 双击就会弹出一个问候对话框
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) MsgBox \你好\End Sub B. 代码解释:双击左键就会弹出一个问候对话框,Private Sub Worksheet_BeforeDoubleClick(ByVal
Target As Range, Cancel As Boolean这个是自动生成的,你到工作表模块里,如双击Sheet1模块,通用列框里选择Worksheet,声明列表里选择BeforeDoubleClik,Msgbox是显示对话框函数。
五、变量
1) 什么是变量 变量是指在代码运行过程中其值能够发生变化的量,举个例子,Y=2*X,这是一个方程 ,
当X=1时,Y=2,当X=2时,Y=4,当X=3时,Y=6, 这个X就是一个变量 2) 变量中不能使用的一些符号 # * % !,用的最多的是 _
3) 变量不区分大小写,也可以使用中文,但实际应用中很少用,我们用英文表示变量名一般也会采取一些
特点,如文本型的变量用Str ,这样让人一看就这个变量表示文本型数据类型String 4) 为什么要声明变量 A. 如果数据量不大,在Excel里VBA不声明变量也没有影响的,但是,如果数据量很大时,不声明,
程序的运行速度就会慢许多。 B. 打个比方,你打了一个电话给公交车公司你要租一辆车,但是你没有说你要租一辆多少人坐的车,
那么出租车公司就会给你一坐100个人的车,而实际人你才要一个30人坐的车。大车的费用肯定比小车的费用贵,这样你不划算啊,变量也是这样,你不声明,它就给存储空间最大的个数据类型给你那不声明的变量。 C. 再打个比方:小明的妈叫小明去菜市场去一斤打酱油,小明从家里拿了一个麻袋去,小明妈妈拉住
小明了,说麻袋不能装酱油,会漏掉,于是小明提了了一个大水缺,在路上,小明摔了一跤,酱油也没有了,水缺也破了,小明真是陪了夫人又折兵,后来他妈妈告诉小明,下次你去打酱油就拿一个装一斤矿泉水瓶子去就可以了。呵呵,相信听了这个故事肯定笑了。也明白了为什么要声明定义变量。
5) 变量声明方式 A. 格式一 Dim 变量名 as 数据类型
Dim i as Integer B. 格式二 dim 变量名 as 数据类型,变量名 as 数据类型 记得用用逗号分开
Dim I as Integer,Rg as Range,Str as String
6) 强制声明 A. 变明使用前声明是一个好习惯,但我们会忘记,怎么办呢 B. 方法一 Alt+F11——>>工具菜单——>>选项——>>编辑器选项卡中——>>钩起“要求变量声明”复
选框 如图 12
图 12
第 9 页 共 52 页
Excel 2007 VBA 教程
C. 方法二 在代码模块顶端输入 Option Explicit 7) 声明变量的一种简写形式 A. 我们经常会看这样的一种定义变量的格式 Dim I% ,大家会问,这个是什么意思呢?,把变量I数
据类型定义为整型。常见的有整型Integer用% 长整型Long用& 字符串String用$ 单精度浮点型Single用! 双精度浮点型Double用#
8) 变量的作用域
变量的生命周期,也就是变量什么时候销毁,释放内存,因为变量只是暂时的存在内存中的,根据这样把变量分为 过程级变量,模块级变量,全局性变量,静态变量 A. 过程变量:定义变量是写在过程中的,其作用是在过程运行中,当过程结束变量也就销毁了。
1. 实例 Sub test()
Dim i As String i = \佛山小老鼠\ MsgBox i End Sub B. 模块级变量:定义变量写在模块的顶端,在此模块中可以调用此变量,其值还是存在,别的模块就
不行了 1. 实例
Dim Str As String Sub test1()
Str = \小老鼠\ MsgBox Str
Str = \佛山\End Sub Sub test2() MsgBox Str Str = \End Sub
代码解释 先运行Test1,然后运行Test2,大家可以看到对话框显示“佛山小老鼠”,也就是说运行过程Test2时,把过程Test1里的小老鼠也继承下来了。 C. 全局性变量 也是定义变量写在模块的顶端,不过就不是用Dim来定义了,要用Public,这个变量
就在所有的模块都可以调用,也就是这个变量值一直存在,直到把Excel程序关闭,变量值才会销毁。
1. 实例
先插入两个模块,在模块1中输入以下代码 Public Str As String Sub test1()
Str = \佛山小老鼠\ MsgBox Str End Sub
在模块2中输入以下代码 Sub test2() MsgBox Str End Sub
然后先运行模块1中的代码,然后再运行模块2中的代码,大家就会发现对话框中显示了“佛山小老鼠”,相信大家都明白了这个道量,另外全局性变量不能重复定义,重复定义就会报错。
第 10 页 共 52 页
Excel 2007 VBA 教程
9) 静态变量
静态变量 定义静态变量是在写在过程中,用Static定义,结束后,变量值仍旧保留,但是大家要用和模级变量区分,模块级变量是值作用于此模块所有过程,而静态变量只值只作用于本过程,不作有于其它过程。 A. 实例 Sub Test1()
Static i As Integer MsgBox i i = i + 1 End Sub Sub Test2() MsgBox i End Sub 代码解释:先运行Test1过程,显示i为0,再运行Test1过程为1,再运行Test1过程为2,再运行Test1过程为3,我们发现每运行一次结果会加1,因为我们有一个累加变量 i=i+1,其值还是保留,但当我们再行Test2时,可是那个i还是0,说明静态变量只作用于Test1,而不作用于Test2
六、常量
1) 常用申明用关键字Const,其值在过程运行中不会发现变化 2) 常量作用域 A. 和变量一样 B. 实例 计算圆面积
Sub test1() '过程开始
Dim S As Single '定义变量S为单精变浮点型,目的让其有保留二位小数,如果你定义Integer就没有小数点位数了
Const Pai = 3.14 '定义常量Pai r = 2 '给r赋值为2
S = Pai * r ^ 2 '计算圆的面积公式
MsgBox \算出的圆的面积为:\显示圆面积结果 End Sub C. 代码截图如图 13
图 13
第 11 页 共 52 页
Excel 2007 VBA 教程
第四讲 单元格对象
单元格和单元格区域是用户操作最多的一个对象,它可以表示一行,一列,一个区域,整个工作表,关键大家要理解它的引用方式 一、单元格的引用方式
1) Range表示 A. 如表示A1单元格 Range (\B. 实例
Sub Range表示()
Range(\佛山小老鼠\End Sub 2) Cells表示 A. 如表示D3单元格 Cells(3,4) B. 实例
Sub Cells表示()
Cells(3, 4) = \佛山小老鼠\End Sub
3) Activecell表示 A. 实例
Sub ActiveCell表示()
ActiveCell = \佛山小老鼠\End Sub
二、单元格区域的引用方式
A. 实例“表示单元格区域A1到D9的区域,有下面几种表法方法 Sub test1()
Range(\End Sub Sub test2()
Range(\End Sub Sub test3()
Range(Cells(1, 1), Cells(9, 4)) = 5 End Sub Sub test4()
Range([A1], [D9]) = 6 End Sub B. 其它方式引用单元格区域
1. Selection 2. UsedRange 3. CurrentRegion 4. Union 5. Intersect 6. Resize
它们的代码用法如下
第 12 页 共 52 页