VBA基础知识小结

来源:互联网 发布:java socket长连接实例 编辑:程序博客网 时间:2024/05/16 07:38

一、什么是宏?

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 FriendAdd 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

测试表达式必须为数值表达式或字符串表达式:

表达式列表可以是用逗事情分开的表达式,也可以使用tois关键字,如“

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”1100的自然数和是:”& 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循环条件]

第二种比第一种多执行一次循环部分的语句

开头判断循环语句流程图