第六课 认识过程整理版.docx

上传人:b****7 文档编号:26028705 上传时间:2023-06-17 格式:DOCX 页数:16 大小:238.53KB
下载 相关 举报
第六课 认识过程整理版.docx_第1页
第1页 / 共16页
第六课 认识过程整理版.docx_第2页
第2页 / 共16页
第六课 认识过程整理版.docx_第3页
第3页 / 共16页
第六课 认识过程整理版.docx_第4页
第4页 / 共16页
第六课 认识过程整理版.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

第六课 认识过程整理版.docx

《第六课 认识过程整理版.docx》由会员分享,可在线阅读,更多相关《第六课 认识过程整理版.docx(16页珍藏版)》请在冰豆网上搜索。

第六课 认识过程整理版.docx

第六课认识过程整理版

第六课认识过程

课程重点:

●过程的定义

●子过程的语法

●过程的作用域

●静态与动态过程

●过程的命名规则

●过程的参数

●执行过程的方法

●过程的执行流程

今天开始真正的进入编程的环节,开始编写代码,前几节都是铺垫,包括学习方法论及让大家重塑信心。

1.过程的定义

VBA中一段完整的可以执行的语句就叫过程,过程包括子过程、函数过程和属性过程,应用最频繁的是子过程。

录制宏产生的过程都是子过程。

每个新手刚开始接触的全是子过程。

自定义函数属于VBA的综合应用,高级用户才需要

以下过程属于子过程的标准格式:

Sub提示()

MsgBox"欢迎使用Excel,今天是"&Date

EndSub

大家可以按Alt+F11组合键进入VBE界面,然后单击“插入”\“模块”,然后粘贴以上代码,接着按F5键执行代码查看过程的执行结果。

使用VBA时95%的情况都是在使用子过程。

函数过程的标志是以Function开头,能返回值。

以下过程属于函数过程的标准格式:

Function及格率(cellAsRange)

及格率=WorksheetFunction.CountIf(cell,">=60")/WorksheetFunction.CountIf(cell,">0")

及格率=Format(及格率,"0.00%")

EndFunction

这是一个自定义函数,我录了一个动画,大家可以了解一下自这一义函数的使用方法。

今天课程的重点是子过程,即Sub开头、EndSub结尾的过程。

对于自定义函数的开发过程以后有专门的课程讲述

2.子过程的语法

[Private|Public|Friend][Static]Subname[(arglist)]

[statements]

[ExitSub]

[statements]

EndSub

这是子过程的语法,比较复杂。

这样标示后就不那么复杂了。

对于以上语法说明需要补充五点:

其一:

其中方括号“[]”中的部分表示可选的,可以根据需要决定是否录入。

而“|”符号是并列分隔符,表示它前后的内容属于同一级别,只能选其中一项。

例如“[Private|Public|Friend][Static]Subname[(arglist)]”实际上相当于以下三句:

[Private][Static]Subname[(arglist)]

[Public][Static]Subname[(arglist)]

[Friend][Static]Subname[(arglist)]

其中:

Public表示所有模块的所有其它过程都可调用这个Sub过程。

Private表示只有当前模块中的其它过程才可以访问当前过程。

Friend仅用于类模块中

如果这3者都忽略,那么默认当作Public处理,也就是说编写sub过程时,sub之前什么都不写,表示这个过程是公有过程,有使用Public相同的效果。

其二:

Static用于声明当前过程是动态过程还是静态过程。

有Static时表示当前过程是静态过程,其特点是过程中的私有变量的值不会消失;

过程无Static时表示当前过程是动态过程,其特点是过程中的私有变量的值将在过程结束后消失。

在后面的内容中会有案例展示。

其三:

括号“()”中的部分表示它是过程的参数。

例如“(arglist)”,同时由于参数外边也有方括号,表示参数也是可选的,可以忽略。

使用了参数的过程只能通过代码执行,不能通过【Alt+F8】的形式在“宏”对话框中执行此过程。

后面会有演示....

其四:

子过程包含程序外壳和代码两部分,程序外壳包括“Subname”和最末一句“EndSub”,这是必选项,任何时候不能省略;

代码部分可以完全省略,不过代码部分才是程序的主体,省略后就不再有意义,所以通常会至少有一句代码。

其五:

代码部分“[statements]”表示过程的任意代码,“[ExitSub]”表示终止过程,该代码允许放在过程中的任意位置,通常配合IF使用或者Goto语句使用,表示符合某条件时终止过程。

接下来针对以上五点分别阐述。

3.过程的作用域

主要针对[Private|Public]二者讲述。

所谓的作用域是指过程的可调用范围。

例如过程可在当前模块中调用,那么过程的作用域就是当前模块,如果过程能在所有模块中调用,那么它的作用域就是所有模块。

其中Public表示所有模块的所有其它过程都可调用这个Sub过程,甚至可以跨工作簿调用。

也称公有过程。

Private表示只有当前模块中的其它过程才可以访问当前过程,称为私有过程。

私有过程不会显示在工作表界面按“Alt+F8”所打开的“宏”对话框中。

以下两个过程都是公有过程:

Subtest

Endsub

PublicSubtest

Endsub

现在请大家跟着我操作:

插入一个“模块1”,写下代码:

如果已经有模块,就不用插入模块了,删除以前的代码,进行下一步就行。

在模块中录入三段代码:

PrivateSubA()

MsgBox123

EndSub

PublicSubB()

MsgBox123

EndSub

SubC()

MsgBox123

EndSub

再插入“模块2”,写下代码:

Subtest()

CallC

CallB

CallA

EndSub

执行后出现以下错误,表示过程A不可以调用,去掉该句代码即可。

由于过程A使用了Private,所以它是一个私有的过程,只能在模块1中才可以调用,而现在在模块2中调用它,所以不能成功。

大家可以删除“CallA”这一句,再执行过程test,然后弹出两个对话框,表示过程A和B都是可以调用的。

因为它们是公有过程,可以跨模块调用。

实事上不仅仅是跨模块间的问题,大家可以按Alt+F11返回工作表界面,然后按Alt+F8:

下图结果显示,私有过程是不可以通过Alt+F8执行的

所以,当你的过程需要声明是私有的时,在Sub前加上Private就行了。

4.静态与动态过程

过程中静态还是动态的由Static决定,我们通常写代码时都忽略了这个前置参数,忽略时表示过程是动态的。

动态和静态有何分别呢?

静态过程特点是过程中的私有变量的值不会消失;动态过程的特点是过程中的私有变量的值将在过程结束后消失。

请大家跟着我操作:

插入一个空白的模块

然后录入以下两个过程:

StaticSubtest1()

b=b+2

MsgBoxb

EndSub

Subtest2()

b=b+2

MsgBoxb

EndSub

两个过程的分别在于第一个是静态的,第二个是动态的。

请先执行第二个过程

执行方法是:

鼠标单击过程中的任意位置,使过程成为当前过程,然后按F5就行了。

最好删除前才的几个过程,前面的那三个过程包括A、B、C

否则会产生干扰。

Subtest2()

B=B+2

MsgBoxB

EndSub

的结果是:

永远都是2。

此过程的含义是:

B=B+2表示对变量B在B的原值基础上加2,原值是0,所以B的结果是2

MsgBoxB表示将B的结果显示在对话框中

此处B是一个变量,变量在过程结果后就自动消失,还原为0

所以第二次执行过程时,B又是0,在0的基础上加2,仍然是2

StaticSubtest1()

B=B+2

MsgBoxB

EndSub

这是静态过程,过程中的一切私有变量的值都会保留下来,B的原值是0,加2后就成了2

此时B的值不会消失,下一次执行代码时在2的基础上再累加。

所以就成了4、6、8、10....,这就是动态与静态的分别。

当然,工作中很少用静态的过程,此处稍有了解即可

5.过程的命名规则

我们在编程时,对过程命名有很多规则:

(1)首字母不能是数字

(2)不能含有标点符号及空格

(3)不能使用系统内置的保留字

(4)同一个模块中不能与其它过程同名

(5)长度不能超过255

以下是一些不合格的过程名称:

2008:

首字母使用了数字,若用“北京2008”则可以

Sub北京2008()

MsgBox"ILoveVBA"

EndSub

Sub2008()

MsgBox"ILoveVBA"

EndSub

以下是一些不合格的过程名称:

2008:

首字母使用了数字,若用“北京2008”则可以

Sub北京2008()

MsgBox"ILoveVBA"

EndSub

Sub2008()

MsgBox"ILoveVBA"

EndSub

红色表示过程的命名错了

AS:

这是系统的保留字,不可用于过程名称。

为避免与系统冲突,禁止使用此类名称

Subas()

MsgBox"ILoveVBA"

EndSub

Date:

系统的保留字,不可用于过程名称。

为避免与系统冲突,禁止使用此类名称

Subdate()

MsgBox"ILoveVBA"

EndSub

中国-北京:

使用了标点符号之类的特殊符号

Sub中国-北京()

MsgBox"ILoveVBA"

EndSub

VBA:

这个名称虽然可以作为过程的名称,但是建议不用,它会导致通过“VBA.”调用VBA的函数和常数时失败。

但是有了名为VBA的过程后,这招就不灵了,当我们输入vba.时会产生提示信息,帮助我们录入VBA自带的一些函数或者属性。

但是有了名为VBA的过程后,这招就不灵了。

大家可以测试

Range:

这个名称虽然也可以使用,但是建议不用,VBA中表示单元格就使用Range,为了避免误导阅读代码者,尽量改用与VBA中的对象、方法、属性名称不同的名称

另外,如果在同一个过程中存在多个过程同名时,将无法执行代码,它将导致代码编译错误。

下图是执行过程时由于多个过程同名而产生的错误提示:

所谓的“二义性的名称”是指一个名称出现了多次,系统无法判断该执行哪一个。

所以看到此类提示时需要马上检查模块中是否存在同名的过程。

6.过程的参数

过程的参数比较复杂,为什么要用参数也很难短时间内说明白,所以在第8课时专门讲参数,本课时忽略这个内容。

7.执行过程的方法

执行Sub过程有六种方法:

VBE界面中:

选择过程后,按F5键,刚才大家试过了,VBE界面中:

运行按钮。

大家可以找找看,能否看到绿色三角形按钮,工作表界面中:

Alt+F8

选择宏名称后,单击执行就行。

工作表菜单:

按钮

工作表界面(不是菜单)

进入“开发工具”中,单击插入,在上方有一个按钮,单击按钮后,在工作表中拖放即可。

它会自动弹出选择宏的对话框,选择宏名后返回工作表界面,然后单击按钮就能执行了,单击按钮可以调用指定的Sub过程。

工作表界面:

快捷键(以后的课程中再详述用代码对过程指定快捷键)

工作表界面:

菜单(以后的课程中再详述用代码对过程指定快捷键)

9.过程的执行流程

当一个过程中有多句代码时,代码总是按从上到下的顺序逐句执行。

大家可以使用以下简单的语句进行测试:

Sub问候()

MsgBox"早上好"

MsgBox"中午好"

MsgBox"下午好"

MsgBox"晚上好"

EndSub

执行过程后,分别弹出4个对话框,按上下顺序执行,VBA允许将多句代码写在同一行中,中间用冒号分隔开即可。

当多句代码出现在同一行时则按从左到右的顺序执行。

可以通过以下代码验证VBA代码的执行顺序:

Sub问候2()

MsgBox"早上好":

MsgBox"中午好"

MsgBox"下午好":

MsgBox"晚上好"

EndSub

请注意中间的冒号....

不过可以随时通过“ExitSub”终止程序,从而使其后面的所有代码都不再执行。

例如以下代码中使用了两次Msgbox函数,表示会弹出两个信息提示框。

不过由于在中间插入了代码“ExitSub”,所以第二个Msgbox语句并不会执行,在“ExitSub”语句处已经结束了过程。

Sub提示()

MsgBox"Excel很不错!

"

ExitSub

MsgBox"VBA也很犀利啊!

"

EndSub

由于过程是从上到下执行的,当执行到第二句时“ExitSub”结束了过程

所以此处的第三句自动忽略掉了。

如果删除第二句,后面的就可以执行

如果中途调用了另一个子过程,那么执行完该过程中的所有代码后再执行Call语句后面的代码。

以下过程“问候3”中调用了子过程“问候4”,所以执行完“问候4”的两句代码后才执行“问候3”的最后一句代码。

Sub问候3()

MsgBox"早上好"

Call问候4

MsgBox"晚上好"

EndSub

Sub问候4()

MsgBox"中午好"

MsgBox"下午好"

EndSub

大家可以测试以下代码

由于“Call问候4”在“MsgBox"晚上好"”之前

所以执行完“问候4”所有代码后,再执行“MsgBox"晚上好"”

当然,VBA也提供了改变执行顺序的办法,从而适应工作中的实际需求——使用Goto语句。

Goto语句的语法如下:

GoToline

其中参数line是标签名称

标签就相当于为代码作一个标记,当Goto语句指向此标签时可以改变代码的执行流程,跳转到标签所在位置执行其后的代码。

定义标签的方法是在代码之前插入标签名称,以冒号结尾。

以下过程“问候5”使用标签A,代码“IfHour(Now)>20ThenGoToA”表示如果当前时间大于20点,那么执行标签“A”后面的代码,Goto语句到标签A之间的所有代码都将被忽略。

Sub问候5()

MsgBox"早上好"

IfHour(Now)>20ThenGoToA'如果时间大于20点,则执行标签“A”后面的代码

MsgBox"中午好"

MsgBox"下午好"

A:

'设置一个标签:

A

MsgBox"晚上好"

EndSub

请大家录入代码后,不要按F5键执行代码,而是按F8键,每按一次执行一句,反复按下F8,可以查看代码的执行流程,F5快捷键表示瞬间执行过程。

F8一次执行一句代码,F8主要用于调试/查看代码。

使用Goto语句可以随意更改代码的执行语句,通常配合IF使用,表示符合某条件时执行某语句,符合另一条件时执行另一语句。

关于条件语句IfThen在后面的课程会有讲解。

今天的课程就讲到这里,下一次课讲

Msgbox和Inputbox

因为很多时候举例都要用到这两个语句,所以提前接触一下它们的语法和应用思路。

也就是以前的课程中间插入一课,其它的延后。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1