一、什么是宏?
1、 宏录制器好比就是个录像机,它具备有录像机的录制和播放功能,当然录像机录制的是视频资料,而宏录制器录制的刚是操作命令集,即宏。
2、 引伸到Excel中,当你打开宏的录制功能时,宏录制器会像录像机一样将你在Excel中的大多数操作进行录制,并且可对这些录制内容(即代码)进行回放和编辑。
二、实例演示宏录制,执行(回放)的过程
1、 打开Excel工作表→工具→宏→录制新宏→宏的名称→确定→先中A1单元格→字体改为12号字→颜色橙色→停止录制宏。
2、 回放,选中2月工作表→工具→宏→执行宏。回放完成。
3、 修改宏,工具→宏→Visual Basic编辑器(Alt+F11)→双击模块1→正文前加dim sht as wotksheet
For each sht in thisworkbook.worksheets
Sht.select
Next
End sub
右击→smart indent →indent procedure 美化代码
4、 运行子过程/用户窗体→视图Microslft Excel
5、 Crtl+F11,右击→VBA Friend→Add Line Nunbers
6、 分析,sub后面为宏的名字
'开头为注释,不被执行,
第10行为dim语言,
第20-210行为for each
With 语句是宏的主要语句通常和selection font并用
Name = “微软雅黑”
Strikethrough = false
……
Colorindex = xlautomatic
不影响宏执行可删除
删除多余的代码提高运行速度
三、介绍一个批量打印文档的宏
Sub sanjteprinter()
Application sereenupdating = false
With application.file search
.lookin = “d:我的文档桌面已经实施行” 此处为可变
.filetype = msofile typecxcelworkbook
.search subfolders = true
If execute>0 then
For I = 1 to.foundfiles.count
Workbooks.openfilename:=foundfiles(i)
Worksheets(1).printout
Activeworkbook.closesavechanges:=false
Next
Else
Magbox”没有找到任何工作簿文件”
End if
End with
Application.screenupdating=true
End sub
单击→运行子过程/用户窗体→确定
Sub过程与程序流程控制语句
一、sub过程
1、 一个过程就是一组完成所需操作的VBA代码的组合;
2、 VBA的过程主要包括“sub过程”和“Function过程”两种;
3、 Sub过程不可以返回值,Function过程可以返回值。
二、声明sub过程
1、 录制的“宏”就是一个简单的sub过程,使用录制宏功能只能生成sub过程的代码;
2、 Sub过程的特点:
(1) 以“sub过程名()”开头,以“End sub”结尾;
(2) Sub过程一般保存在模块里;
(3) 不返回运行结果。
3、 声明sub过程语法形式:
[public/private][static]sub过程名称([参数1,参数2……])
公共过程/私有过程,二选一
[语句块]
[Exit sub]
[语句块]
End sub
打开VBA编辑器→右击→插入→模块→双击模块→录入:
Sub mysub()
Msgbox”这是我的第一个VBA过程”
End sub
→单击运行子过程/用户窗体→确定
不写参数默认为公共过程
Private sub siyou()
Msgbox”这是我的私有过程”
End sub
4、 同一个过程执行另一个过程:
(1) 输入过程名称以及参数,参数用逗号隔开;
过程名[参数1,参数2,……]
Sub test()
‘mysub
siyou
End sub
打开工具→宏→mysub→运行→确定
打开工具→宏→test→运行→确定
(2) 在过程名称以及参数前使用call关键字,参粗线条用括号括起来,并用逗号隔开;
Call过程名[(参数1,参数2,……)]
Sub rest()
‘mysub
‘siyou’第一种方法
Call mysub
Callsiyou
End sub
打开→工具→宏→test→执行宏→确定
5、利用application对像的run方法:
Application.run表示过程名的学符串(或字符串变量)[参数1,参数2,……]
Sub test()
‘mysub
‘siyou’第一种方法
‘call mysub
‘call siyou’第二种方法
Application.run “mysub”
Dim a as string
A = “siyou”
Application.run a
End sub
单击→运行子过程/用户窗体→确定
三、判断与循环语句:
顺序结构判断分之,循环语句
(一)IF语句
IF逻辑表达式样 then
语句块1
[else
语句块2] 可选
End if
罗辑表达式值是否为真
↓是 ↓否
语句块 ↓
↓ ↓
↓ ←
比一比,看谁算的又对又快!
11+19=?
回答完毕
Sub出题()’生成新的题目
[d6].value = int(rnd * 20)
[f6[.ralue = int(rnd * 20)
End sub
Sub dt()
If[h6].value = [d6].value+[f6].value then ‘检查是否答对
End if
Call 出题 ‘调用过程,得新生成题目
End sub
添加if[h6].value<>[d6],value+[f6].value then’检查是否答对
Magbox”答错了,继续努力!”
End if
Else
逻辑表达式值是否为真
是→语名块1/不是→语句块2
注释前面语句→视图→工具→编辑→设置注释块
If[h6].value = [d6].value + [f6].value the ‘检查是否答对
Msgbox”答对了,你真棒!”
Else
Msgbox”答错了,继续努力!”
End if
Call 出题 ‘调用过程,重新生成题目
End sub
If逻辑表达式1是否为真 then
语句1
[else if逻辑表达式2 then
语句2
[else if] 逻辑表达3 then
语句3
……
Else
语句块n]
End if
判断H6单元格是否为空
Sub test()
If [h6].value = “” then
Msgbox”还没有输入答案!”
Else if [h6].value = [d6].value + [f6].value then ‘检查是否答对
Msgbox”答对了,你真棒!”
Else
Msgbox”答错了,继续努力!”
End if
Call 出题
End sub
插入窗体控件,命名为答题
IF使用两次判断
(二)Select case 语句(三种更多选择项做选择)
Select case 测试表达式
Case 表达式列表1
语句块1
Case 表达式列表2
语句块2
Case 表达式列表3
语句块3
……
Case 表达式列表n
语句块 n
[case else
语句块 n + 1]
End select
测试表达式必须为数值表达式或字符串表达式:
表达式列表可以是用逗事情分开的表达式,也可以使用to或is关键字,如“
Case1,1,2,3,4
Case 1 to 4
Case is < 4
Case语句后面可以使用多重表达工,各表达式的数据类型可以不相同,它们之间是逻辑或的关系如:
Case 1 to 4 ,”a” ‘数值或文本
Sub sll()
Select case[f6].value
Case””
Msgvox”还没有输入答案”
Case [d6].value + [f6].value
Msgbox”答对了,你真棒!”
Case else
Msgbox”答错了,请继续努力!”
End select
Call出题
Edn sub
插入窗体控件,命名为答案
Sub 等sl级()
Dim dj as string
Select case [d3].value
Case is >= 90
Dj = “A”
Case is >= 80
Dj = “B”
Case is >= 60
Dj = “C”
Case is >= 200
Dj = “D”
Case else
Dj = “E”
End select
[e3].value = dj
End sub
(三)for循环语句
For-------next 循环语句
For循环变量 = 初值to 终值[step步长]
循环体
[next for]
循环体
Next[循环变量] []内为可选参数
初值小于终值,步长大于1
循环变量初始化
↓
循环变量<=(>=)终值
↓
Y
↓
循环体
循环变量 = 循环变量 + 步长
循环语句结束
Sub sum 1 to 100()
Dim mysum as long,I as integer
For I = 1 to 100 step 1
Mysum = mysum + i
Debug print i
Next i
Msgbox”1到100的自然数和是:”& mysum”
End sub
Sub 等级for()
Dim dj as string,I as integer
For I = 14 to 143 srep 1
Select case cells(I,”d”).value
Case is >=90
Dj = “A”
Case is >=80
Dj = “B”
Case is >=60
Dj = “C”
Case is >=20
Dj = “D”
Case else
Dj = “E”
End select
End sub
(四)For each-------next循环语句
For each元素变量in对象集合
语句块
[next for]
语句块
Next[元素变量]
Sub 等级 each()
Dim dj as string, rng as range
For each rng in range(“d14”:”d143”)
Select case rng.value
Case is >=90
Dj = “A”
Case is >=80
Dj = “B”
Case is >=60
Dj = “C”
Case is >=20
Dj = “D”
Case else
Dj = “E”
End select
Rng.lffser(0,1).value = dj
Next rng
End sub
(五)do while循环语句
1、开头判断循环语句条件
Do [wihle循环条件]
循环体
[next do]
循环体
Loop
2、结尾判断循环语句条件
Do
循环体
[next do]
循环体
Loop[wihle循环条件]
第二种比第一种多执行一次循环部分的语句
开头判断循环语句流程图