VBA新手入门教程综述.docx
- 文档编号:17734361
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:42
- 大小:34.88KB
VBA新手入门教程综述.docx
《VBA新手入门教程综述.docx》由会员分享,可在线阅读,更多相关《VBA新手入门教程综述.docx(42页珍藏版)》请在冰点文库上搜索。
VBA新手入门教程综述
VBA新手入门教程
目录
第一讲VBA与宏及VBE窗口的介绍2
第二讲录制宏修改宏保存宏指定宏自定义按钮加载宏3
第三讲VBA的语法基础7
第四讲Range对象8
第五讲VBA语句
(一)12
第六讲VBA语句
(二)15
第七讲错误处理和代码调试17
第八讲工作表和工作薄对象19
第九讲目录的制作21
第十讲工作表和工作薄事件OnTime和OnKey事件24
第十一讲自定义函数27
第十二讲添加快捷菜单30
第十三讲添加菜单32
第十四讲窗体与控件和音乐播放器的制作34
第十五讲怎样才能不断的提高VBA水平38
附录一最常用的语句39
附录二最常用关键字44
前言
Excel作为使用最广泛的电子表格软件,它以操作简便,功能丰富和效率高而著称,非常适合对计算机熟悉程度不高的人员使用。
但是随着学习的深入,工作上的需求,提高工作效率,用户期望Excel提供更加自动化的操作,这就需要借助ExcelVBA。
VBA的优点:
1.解决重复的操作。
(大大提高了工作效率)
2.在Excel的现有基础上再增添一些更适合自己的新功能
3.可以自定义函数(来简化冗长的公式和计算,方便初,中级用户)
4.设置个性化的操作界面(更适合自己工作的菜单,快捷菜单)
5.二次开发
本教材包括的内容,前面第一讲到第七讲是VBA基础内容;第八讲到第十五讲是提高篇和实例讲解篇
附:
书中代码前面#表示行,如4#表示第4行。
第一讲VBA与宏及VBE窗口的介绍
一.VBA的定义:
内置在Excel里一种最简单的编程语言。
打个比方我们去英国,那我们要会英文,才能和当地的人进行沟通,我们要用和Excel进行人机对话,那我们要会VBA,也就是说VBA是Excel能识别的编程语言,也是编程员能识别的一种最简单的编程语言。
二.什么是宏:
宏是一连串动作的集合,动作是由VBA代码组成的,打个比方说,我们家里以前的洗衣机是有加水,加洗衣粉,转动,放水,甩干,现在我们把其它打包成一个命令按钮,这样我们只要按一下,衣服就洗好了,以前要用按五下,这样就大提高了工作效率,实现办公自动化。
所以接触过Excel的朋友都会通过录制宏来完成一些重复的工作。
三.VBE窗口的介绍:
1.进入VBE窗口的方法:
因为VBE窗口是VBA代码编辑窗口,我们所有的代码都在VBE窗口里编写。
第一种方法:
Alt+F11,第二种方法:
通过命令按钮进行,(如图1)(备注我们常用工具栏上没有这个,要从自定义里拖出来才有),进入VBE编辑的方法不只这二种
2.VBE窗口的介绍:
A.视图菜单下:
工程资源管理器;属性窗口;立即窗口。
B.插入菜单下:
插入模块;插入过程;插入用户窗体。
C.调试菜单下:
逐语句调试(快捷键F8)。
切换断点(快捷键F9)
D.运行菜单下:
运行子过程(快捷键F5)
F.工具菜单下:
选项编辑器格式选项卡字体大小为11磅
3.代码的缩进:
A.Tab键右缩进
B.Shift+Tab键,还原右缩进一步
4.模块:
A.普通模块,对象模块(工作表模块,工作薄模块),窗体模块,类模块。
第二讲录制宏修改宏保存宏指定宏自定义按钮加载宏
1.录制行高的宏
方法:
选择第3行选择工具菜单宏录制新宏,跳出一个对话框,确定后,选择第3行,单击鼠标右键,行高设置为30确定,然后选择工具宏停止录制
ALT+F11,打开VBE编辑窗口,左键双击模块,这就是刚才录制的宏代码,
1#SubMacro1()
2#Selection.RowHeight=30
3#EndSub
代码解析第一行表示子过程开始;第二行Selection是选择的意思,RowHeigh行高,选择的行高设置为30;第三行是结束的意思
继续,在画图工具中选择椭圆,再左键点椭圆,右键,点击指定宏,做到这步以后,选择第6行,然后点击椭圆,看看效果,这个就是录制宏到使用宏
2.录制选择性粘贴的宏
方法:
打开工作薄”选择性粘贴的宏(未做的)”备注这个工作薄在课件里选择工作表1选择工具菜单宏录制宏,跳出一个对话框,绝对引用确定后选择区域B3:
C7单击鼠标的右键复制选择区域H3:
I7选择性粘贴加确定双击单元格E3,单击单元格E4停止录制
ALT+F11,打开VBE编辑窗口,这就是刚才录制的宏代码,
1#SubMacro1()'
2#'Macro1Macro
'3#宏由999宝藏网录制,时间:
2011-2-7
4#Range("B3:
C7").Select
5#Selection.Copy
6#Range("H3:
I7").Select
7#Selection.PasteSpecialPaste:
=xlPasteAll,Operation:
=xlAdd,SkipBlanks:
=_
False,Transpose:
=False
8#EndSub
代码解析:
第四行代码单元B3:
C7选中,第五行代码复制B3:
C7,第六行代码单元格H3:
I7选中,第7行代码选择性粘贴,加
然后把宏指定给一个椭圆,试试
3.录制一个清除数据的宏
方法:
选择工具菜单宏录制宏,跳出一个对话框,绝对引用选择区域B3:
C7,按Delete键然停止录制
ALT+F11,打开VBE编辑窗口,这就是刚才录制的宏代码,
1#SubMacro2()'Macro2Macro
'宏由雨林木风录制,时间:
2010-11-24
2#Range("B3:
C7").Select
3#Selection.ClearContents
4#EndSub
代码解释:
第二行单元格B3:
C7选中;第三行清除选中的单元格里的数字
然后把宏指定给一个椭圆,试试
4.修改宏:
修改第2个宏
1#Sub汇总()
2#Range("B3:
C7").Copy
3#Range("H3:
I7").PasteSpecialPaste:
=xlPasteAll,Operation:
=xlAdd
4#Application.CutCopyMode=0
5#EndSub
代码解释第二行复制单元格B3:
C7;第三行把复制的数据选择性粘贴到单元格H3:
I7,Operation:
=xlAdd的意思是选择加;第四行代码取消复制模式,也就是那个虚线框
5.保存宏
一种是保存在当前工作薄,一种是保存在个人宏工作薄,另一种保存新工作薄
6.自定义按钮
视图菜单工具栏自定义命令选项卡类别宏按住左键不放,把自定义按钮那个笑脸拖到常用工具栏上把光标放在那个笑脸上(前提条件是不要关闭自定义工具栏单击鼠标右键命名更改按钮图像指定宏(指定你要实现的此功能
7.指定宏:
可以把宏指定给图片,自选图形。
第三讲VBA的语法基础
1.数据类型:
学生的姓名,学生的年龄,学生的出生日期(常用数据类型有:
Byte(字节型);Integer(整型);Long(长整型);Single(单精度浮点型,7位有效数字);Double(双精度浮点型,有效数字15位);String(字符串型);对象型(例如单元格区域和工作表);Variant(变体型,也叫万能的类型)
2.变量:
变量可以使程序变得更加富有活力
(1).变量名称要注意几点:
A.不能把关键字做变量名
B.部分符号不能在变量中出现,如(#*%!
)
C.不区分大小写,但我们一般大小写混写,第一个字母大写,其它的小写。
D.也可以使用中文名称,但是尽量不用中文名称,如果在英文版会报错。
(2)变量声明(电脑里划出一个储存区域来储存变量的值,变量的声明就决定了变量的大小,而大小就是我们前面讲的数据类型决定的)
(3)变量的声明方式
A.语法格式:
Dim变量as数据类型.如DimiasInteger
B.也可以一行定义多个变量,之间用逗号分开
如DimiAsInteger,FAsString,DAsLong
(4).强制声明:
变量使用前声明是一个好习惯,由于VBA里可以不声明变量,因此用户会忘记这一点,所以我们要求变量进行强制声明(工具菜单==选项==编辑器==要求声明变量)
(5)变量的作用域:
A.过程级变量
B.模块级变量
c.全局级变量
3.运算符和表达式:
(1).算术运算符:
有+,-,*,/,&
(2).比较运算符:
=,<>,>=,<=,Like
(3).逻辑运算符:
And,Or,Not
(4)表达式:
右边的值赋给运算符左边的
第四讲Range对象
Range对象是Excel应用程序中最常用的对象,一个Range对象代表一个单元格、一行、一列、包含一个或者更多单元格区域(可以是连续的单元格,也可以是不连续的单元格)中选定的单元格,在操作Excel内的任何区域之前都需要将其表示为一个Range对象,然后使用该Range对象的方法和属性。
1.单元格的引用方法及应用
在VBA中经常需要引用单元格或单元格区域,主要有以下几种方法。
1)使用Range属性
VBA中可以使用Range属性返回单元格或单元格区域,如下面的代码所示。
1#Sub选择1()
2# Sheet1.Range("A1:
D9,D1:
D9").Select
3#EndSub
代码解析:
第二行单元格A1:
D9和单元格D1:
D9同时选中
“选择1”过程使用Select方法选中A1:
A9,D1:
D9单元格区域。
Range属性返回一个Range对象,该对象代表一个单元格或单元格区域,语法如下:
Range(Cell1,Cell2)
参数Cell1是必需的,必须为A1样式引用的宏语言,可包括区域操作符(冒号)、相交区域操作符(空格)或合并区域操作符(逗号)。
也可包括美元符号(即绝对地址,如“$A$1”)。
2)使用Cells属性
使用Cells属性返回一个Range对象,如下面的代码所示
Sub输数字1()
DimIAsInteger
ForI=1To10
Sheet1.Cells(I,1)=I
NextI
EndSub
代码解析:
“ 输数字1”过程使用For...Next语句为工作表中的A1:
A10单元格区域填入序号1到10。
Cells属性指定单元格区域中的单元格,语法如下:
Cells(RowIndex,ColumnIndex)
参数RowIndex是可选的,表示引用区域中的行序号。
参数ColumnIndex是可选的,表示引用区域中的列序号。
如果缺省参数,Cells属性返回引用对象的所有单元格。
Cells属性的参数可以使用变量,因此经常应用于在单元格区域中循环
3)使用快捷记号
在VBA中可以将A1引用样式或命名区域名称使用方括号括起来,作为Range属性的快捷方式,这样就不必键入单词“Range”或使用引号,如下面的代码所示。
Sub输字2()
[A1:
A10]="佛山小老鼠"
EndSub
代码解析:
“输字2”过程使用快捷记号为单元格区域赋值。
第2行代码使用快捷记号将活动工作表中的A1:
A10单元格赋值为”佛山小老鼠”
注意使用快捷记号引用单元格区域时只能使用固定字符串而不能使用变量。
4)使用Offset属性
可以使用Range对象的Offset属性返回一个基于引用的Range对象的单元格区域,如下面的代码所示。
Sub输数字3()
Sheet1.Range("A1:
A10").Offset(1,1)=2
EndSub
代码解析:
“输数字3”过程使用Range对象的Offset属性选中A1:
A10单元格偏移一行一列后的区域B2:
B11,且在B2:
B11输入了数字2
应用于Range对象的Offset属性的语法如下:
expression.Offset(RowOffset,ColumnOffset)
参数expression是必需的,该表达式返回一个Range对象。
参数RowOffset是可选的,区域偏移的行数(正值、负值或0(零))。
正值表示向下偏移,负值表示向上偏移,默认值为0。
参数ColumnOffset是可选的,区域偏移的列数(正值、负值或0(零))。
正值表示向右偏移,负值表示向左偏移,默认值为0。
5)使用Resize属性
使用Range对象的Resize属性调整指定区域的大小,并给单元格区域赋值,如下面的代码所示。
Sub输数字4()
Sheet1.Range("A1").Resize(3,3)=“佛山小老鼠”
EndSub
6)使用Union方法
使用Union方法可以将多个非连续区域连接起来成为一个区域,从而可以实现对多个非连续区域一起进行操作,如下面的代码所示。
Sub输数5()
Union(Sheet1.Range("A1:
A9"),Sheet1.Range("D1:
D9,G1:
G9"))="佛山小老鼠"
EndSub
也可以用代码
SubAA()
Range("A1:
D9,D1:
D9,G1:
G9")="佛山小老鼠"
EndSub,
不过要记得中间是用逗号分开,只能是一对双引号
代码解析:
“输数字4”过程给单元格区域A1:
A9和D1:
D9,G1:
G9所组成的区域赋值为”佛山小老鼠。
Union方法返回两个或多个区域的合并区域,语法如下:
expression.Union(Arg1,Arg2,...)
其中参数expression是可选的,返回一个Application对象。
参数Arg1,Arg2,...是必需的,至少指定两个Range对象。
7)使用UsedRange属性
使用UsedRange属性返回指定工作表上已使用单元格组成的区域,如下面的代码所示。
Sub选择2()
Sheet1.UsedRange.Select
EndSub
代码解析:
“选择2”过程使用UsedRange属性选择工作表上已使用单元格组成的区域,包括空单元格。
8)Cells(数字),一个单元格有一个数字代表,因为一行有256个单元格,257就是第二行的第一个单元格如
SubAA()
Cells(257)="小老鼠"
EndSub
第五讲VBA语句
(一)
一.WithEndWith可以对代码进行精减
精简前的如下
1#SubMacro1()
2#'Macro1Macro
3#'宏由999宝藏网录制,时间:
2011-2-8
4#Selection.Font.Bold=True
5#WithSelection.Font
6#.Name="宋体"
7#.Size=18
8#.Strikethrough=False
9#.Superscript=False
10#.Subscript=False
11#.OutlineFont=False
12#.Shadow=False
13#.Underline=xlUnderlineStyleNone
14#.ColorIndex=xlAutomatic
15#EndWith
16#Selection.Font.ColorIndex=3
17#EndSub
代码解析:
第4行代码选中字体加粗;第五行到15中间用了一个WithEndWith语句;第6行字体为宋体;第7行字体大小为18磅,Size是大小的意思;第8行Strikethrough是删除线的意思;第9行代码Superscript是上标的意思;第10行代码Subscript是下标的意思;第11行OutlineFont字体空心的意思;第12行代码Shadow是阴影的意思;第13行代码是下划线类型为无;14行字体的颜色为自动
精简后的如下
1#SubMacro1()
2#WithSelection.Font
3#.Name="宋体"
4#.Size=18
5#.Bold=True
6#.ColorIndex=3
7#EndWith
8#EndSub
代码解析:
第2行选中的单元格字体进行设置;第3行代码字体为宋体;第4行代码字体大小为18磅;第5行代码字体加粗;第6行代码字体颜色为红色
二.IfThen判断语句(单行结构)
1#Sub按钮1_单击()
2#IfRange("a1").Value>=60Then
3#Range("b1")="及格"
4#EndIf
5#EndSub
代码解析:
第2行代码判断,如果A1单元格的值大于等于60,那么;第3代码在单元格B1输入及格
三.IfThenElse(简单的多行分支结构)
1#Sub按钮1_单击()
2#IfRange("A1").Value<60Then
3#Range("B1").Value="不及格"
4#Else
5#Range("B1").Value="及格"
6#EndIf
7#EndSub
代码解析:
第2行代码判断,如果A1单元格的值小于60,那么;第3行代码给单元格B1赋值为”不及格”;第4行代码是否则;第5行代码给单元格B1赋值为”及格”
四.IfThenElseIfThen(ElseIfThen…)Else复杂的多行分支结构
1#Sub加循环的复杂的多行分支结构()
2#DimIAsInteger
3#ForI=2To11
4#IfRange("A"&I)<60Then
5#Range("B"&I)="不及格"
6#ElseIfRange("A"&I)<70Then
7#Range("B"&I)="及格"
8#ElseIfRange("A"&I)<80Then
9#Range("B"&I)="良好"
10#Else
11#Range("B"&I)="优秀"
12#EndIf
13#NextI
14#EndSub
代码解析:
第2行定义变量I为整型;第3行代码到13行代码用了一个循环语句ForNext;第4行代码判断A列从A2开始到A11的值是否小于60;第5代码如果第4代码小于60,那么对应的B列从B2开始到B11单元格显示不及格,同理第6行,第7行,第8行,第9行代码。
五.Inputbox和Msgbox函数
1#Sub按钮1_单击()
2#OnErrorResumeNext
3#Application.DisplayAlerts=0
4#Sheet1.Delete
5#Application.DisplayAlerts=1
6#ANS=MsgBox("只剩下最后一张工作表了,不能删除",48,"佛山小老鼠提醒你")
7#EndSub
代码解析:
第2行过程中有错语就忽掉;第3行阻止弹出保存提示对话框;第4行代码工作表1删除;第5行代码还原第3行代码,这两个是一对一对的用;第6行代码用输出函数MsgBox弹出提示
1#Sub按钮1_单击()
2#S=InputBox("请输入姓名","输入提醒")
3#Range("A1")=S
4#EndSub
代码解析:
:
第2行用输入函数InPutbox提醒输入姓名且把其输入的值赋给S;第3行代码把S赋给单元格A1
第六讲VBA语句
(二)
一.ForNext语句
1#Sub按钮1_单击()
2#DimIAsByte,CAsInteger
3#ForI=1To100
4#C=C+I
5#NextI
6#MsgBoxC
7#EndSub
代码解析:
:
第2行定义变量I为字节型,C为整型;第3行代码到第5行用了一个循环语句ForNext,给I赋值,赋值范围从1到100;第4行代码累加;第6行代码用输出函数MsgBox显示最后累加的C
二ForEachNext语句
1#Sub按钮1_单击()
2#DimRGAsRange
3#ForEachRGInRange("A1:
A10,D1:
D10")
4#C=C+RG
5#NextRG
6#MsgBoxC
7#EndSub
代码解析:
第2行代码定义变量RG为对象型,单元格对象型;第3代码到第5行代码用了一个循环语然ForEachNext语句,以RG在单元格区域A1:
A10,D1:
D10中循环一次;第4行代码,把单元格RG的值累加;第6行代码用输出函数MsgBox显示最后累加的C
三.SelectCase语句
1#Subaa()
2#DimIAsInteger
3#ForI=2To7
4#m=Sheet1.Range("a"&I)
5#SelectCasem
6#CaseIs>=80
7#Sheet1.Range("b"&I)="优秀"
8#CaseIs>=70
9#Sheet1.Range("b"&I)="良好"
10#CaseIs>=60
11#Sheet1.Range("b"&I)="及格"
12#CaseElse
13#Sheet1.Range("b"&I)="不及格"
14#EndSelect
15#NextI
16#EndSub
代码解析:
第2行定义变量I为整型;从第3行到15行用了一个循环语句ForNext,给I赋值从2到7;第4行代码把工作表1从A2开始到A7的值赋给m;从第5行代码到14行代码用了SelectCaseEndSelect语句
第七讲错误处理和代码调试
一错误类型(语法错误,编译错误,运行错误,逻辑错误)
A.语法错误(把关键字写错,把Dim写成Dam)
B.编译错误(If后面没有Then就换行)
C.运行错误(比方说0不能作为除数,运行是就会报错)
D.逻辑错误(运行的结果和我们预期的发生了偏差
1#Sub除数为0()
2#A=Range("A1")
3#B=Range("B1")
4#C=A/B
5#MsgBoxC
6#EndSub
代码解析:
第2行代码把单元格A1的值赋给A;第3行把单元格B1的值赋给B;第4行代
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VBA 新手入门 教程 综述