《第5章 模块对象和VBA程序设计.ppt》由会员分享,可在线阅读,更多相关《第5章 模块对象和VBA程序设计.ppt(105页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1第第5 5章章 模块对象和模块对象和VBAVBA程序设计程序设计1本章内容本章内容n n 5.1 5.1 模块对象概述模块对象概述 n n 5.2 5.2 VBAVBA程序基础程序基础 n n 5.3 5.3 选择语句选择语句 n n 5.4 5.4 循环语句循环语句n n 5.5 5.5 数组数组n n 5.6 5.6 过程过程 25.1 5.1 模块对象概述模块对象概述 n模块模块(标准模块标准模块)是是Access数据库数据库7个对象之一,个对象之一,其实质其实质就是没有界面的就是没有界面的VBA程序。程序。n模块包含若干由模块包含若干由VBA代码组成的过程代码组成的过程。每个过程完成
2、一。每个过程完成一个相对独立的操作,不涉及界面,是个相对独立的操作,不涉及界面,是“纯纯”程序段。程序段。n模块具有很强的模块具有很强的通用性通用性,窗体、报表等对象都可以调用,窗体、报表等对象都可以调用模块内部的过程。模块内部的过程。nVBA是是VB的子集的子集。35.2 VBA5.2 VBA程序基础程序基础 5.2.1 模块和过程的创建 5.2.2 数据类型、常量、变量与表达式 5.2.3 VBA的常用内部函数 5.2.4 数据的输入与输出 45.2.1 5.2.1 模块和过程的创建模块和过程的创建1.新建模块新建模块模块由过程组成,而过程由程序员编写程序形成。模块由过程组成,而过程由程序
3、员编写程序形成。例例5-1 创建一个名为创建一个名为“模块入门模块入门”的新模块的新模块 保存为保存为“模块入门模块入门”模块模块新建新建55.2.1 5.2.1 模块和过程的创建模块和过程的创建2.过程过程n过程过程由由VBA语句语句组成,是一段相对独立的代码。组成,是一段相对独立的代码。n过程与过程之间相互隔离过程与过程之间相互隔离,系统不会从一个过程自动,系统不会从一个过程自动执行到另一个过程,但一个过程执行到另一个过程,但一个过程可以通过调用执行另可以通过调用执行另一个过程一个过程。n过程过程不是不是Access的一个独立对象,的一个独立对象,不能单独保存不能单独保存,只能存在于模块中
4、。只能存在于模块中。n过程以过程以Sub()的形式开头(圆括号内放置该的形式开头(圆括号内放置该过程被调用时需接受的参数),以过程被调用时需接受的参数),以End Sub结束结束65.2.1 5.2.1 模块和过程的创建模块和过程的创建3.新建过程新建过程 例例5-2 在在“模块入门模块入门”模块中创建一个模块中创建一个Hello过程过程。用户输入用户输入 执行过程执行过程 双击双击 Sub Hello()MsgBox 大家好!大家好!End Sub75.2.1 5.2.1 模块和过程的创建模块和过程的创建4.模块的构成模块的构成n在在通用声明段通用声明段定义的变量称为定义的变量称为模块级模块
5、级变量,这些变量可以在变量,这些变量可以在本模块的各个过程中使用。本模块的各个过程中使用。n在在过程内部过程内部定义的变量称为定义的变量称为过过程级程级变量,其使用范围只限于变量,其使用范围只限于本过程。本过程。85.2.2 5.2.2 数据类型、常量、变量与表达式数据类型、常量、变量与表达式 1.VBA的数据类型的数据类型 数值,可数值,可进行数学进行数学运算运算95.2.2 5.2.2 数据类型、常量、变量与表达式数据类型、常量、变量与表达式 2.标识符标识符 p标识符:程序中标识符:程序中常量、变量、过程常量、变量、过程等对象的名字等对象的名字pVBA标识符规定:标识符规定:q第一个字符
6、必须是字母第一个字符必须是字母q包含的字符数不超过包含的字符数不超过255个个q不得与不得与VBA的关键字同名,如不能使用的关键字同名,如不能使用Sub、For、If、Dim等。等。105.2.2 5.2.2 数据类型、常量、变量与表达式数据类型、常量、变量与表达式 2.标识符标识符 pVBA标识符规定:标识符规定:q不能使用下列字符:不能使用下列字符:!&$#%(空格)(空格)q从增强程序可读性角度出发,标识符应使人望文生义,从增强程序可读性角度出发,标识符应使人望文生义,用具有实际意义的单词词组。用具有实际意义的单词词组。例如:平均工资的标识符用:例如:平均工资的标识符用:AverageS
7、alary 运输日期的标识符用:运输日期的标识符用:ShipDate类型符类型符115.2.2 5.2.2 数据类型、常量、变量与表达式数据类型、常量、变量与表达式3.常量常量 n常量:常量:VBA在运行时其值始终保持不变的量在运行时其值始终保持不变的量n字符串常量放在一对字符串常量放在一对内,日期内,日期/时间型常量放在一对时间型常量放在一对#内。如内。如中国中国、#9/1/2005#等。等。n符号常量符号常量:用标识符保存一个常量值:用标识符保存一个常量值n使用使用Const语句定义符号常量,如:语句定义符号常量,如:Const Pai=3.141569 Const TermBeginDa
8、te=#9/1/2005#“=”表示赋表示赋值值12复复 习习n模块与过程的关系,创建方法模块与过程的关系,创建方法nVBA常用数据类型常用数据类型 日期型日期型(Date)、布尔型、布尔型(Boolean)、整型、整型(Integer)、长整型长整型(Long)、单精度型、单精度型(Single)、字符串、字符串(String)n常量常量 文本型:文本型:abc 、日期型:、日期型:#4/1/2010#Const 常量名常量名=常量值常量值135.2.2 5.2.2 数据类型、常量、变量与表达式数据类型、常量、变量与表达式4.变量变量 p变量:变量:程序运行期间值可以改变的量程序运行期间值可
9、以改变的量 p变量在使用前应该用变量在使用前应该用Dim语句进行声明语句进行声明Dim As,As,.Dim StudentName As StringDim Grade As Integer,AvgGrade As SingleDim Passed As Boolean,ExamDate As Date145.2.2 5.2.2 数据类型、常量、变量与表达式数据类型、常量、变量与表达式4.4.变量变量 p默认情况下,变量可以不经声明即可使用,该变默认情况下,变量可以不经声明即可使用,该变量被自动声明为量被自动声明为VariantVariant类型类型(变体型变体型)pVariantVaria
10、nt类型变量可以接纳各种类型的数据。类型变量可以接纳各种类型的数据。p在变量使用前在变量使用前最好根据实际类型进行声明最好根据实际类型进行声明。155.2.2 5.2.2 数据类型、常量、变量与表达式数据类型、常量、变量与表达式 强制实现变量先定义后使用:在代码窗口中执行强制实现变量先定义后使用:在代码窗口中执行“工具工具”/“选项选项”命令命令 此此后后新新创创建建的的模模块块中中,窗窗口口顶端自动出现:顶端自动出现:Option Explicit 编辑器编辑器要求声明变量要求声明变量165.2.2 5.2.2 数据类型、常量、变量与表达式数据类型、常量、变量与表达式5.5.运算符运算符p算
11、术运算符:算术运算符:(幂幂)、-(-(取负取负)、*、/、(整除整除)、Mod(Mod(取余取余)、+、-注意优先级先后顺序!可通过注意优先级先后顺序!可通过()改变运算顺序改变运算顺序175.2.2 5.2.2 数据类型、常量、变量与表达式数据类型、常量、变量与表达式5.5.运算符运算符 p关系运算符:关系运算符:其值为一个布尔量其值为一个布尔量(True(True或或False)False)、=、=、=、(不等于不等于)p逻辑运算符:逻辑运算符:连接关系表达式或布尔值连接关系表达式或布尔值 NotNot、AndAnd、OrOrp连接运算符:连接运算符:+、&“+”“+”用于连接字符串用于
12、连接字符串 “&”&”可将几个不同类型的值连接成一个字符串。可将几个不同类型的值连接成一个字符串。185.2.2 5.2.2 数据类型、常量、变量与表达式数据类型、常量、变量与表达式【例例5-3】输出当天日期及距输出当天日期及距2012年元旦的天数年元旦的天数在在“模块入门模块入门”模块模块中中添加如下添加如下Today()过程:过程:运行结果运行结果 Sub Today()MsgBox 今天的日期是今天的日期是&Date&,距,距2012年年1月月1日还有日还有&(#1/1/2012#-Date)&天天End Sub195.2.2 5.2.2 数据类型、常量、变量与表达式数据类型、常量、变量
13、与表达式6.表达式表达式n表达式:用运算符将常量、变量、函数等连接起来的表达式:用运算符将常量、变量、函数等连接起来的式子,书写在一行上。如:式子,书写在一行上。如:n n表达式可分为:表达式可分为:q算术表达式算术表达式,如,如 Count=Count+1 q关系表达式关系表达式,如,如 C20 q逻辑表达式逻辑表达式,如,如 Age=60 (-b+Sqr(b2-4*a*c)/(2*a)205.2.3 VBA5.2.3 VBA的常用内部函数的常用内部函数【例5-4】求8x2-10 x-75=0的两个实根运行结果运行结果P132215.2.3 VBA5.2.3 VBA的常用内部函数的常用内部函
14、数 n内部函数内部函数(标准函数标准函数)的调用格式:的调用格式:函数名函数名(参数参数)例如:例如:year(now()n根据函数返回值的类型,可以将函数分为:根据函数返回值的类型,可以将函数分为:q数值型函数数值型函数(教材(教材P130表表5.2)q字符串函数字符串函数(教材(教材P130表表5.3)q日期日期/时间函数时间函数(教材(教材P131表表5.4)q类型转换函数类型转换函数(教材(教材P131表表5.5)225.2.4 5.2.4 数据的输入与输出数据的输入与输出 1.InputBox()函数函数 InputBox(Prompt,Title,Default,Xpos,Ypos
15、)说明:说明:qPrompt参数必不可少,用于显示参数必不可少,用于显示输入提示文本输入提示文本;qTitle参数用于参数用于指定对话框标题指定对话框标题,缺省标题为,缺省标题为 “Microsoft office Access”;qDefault参数为对话框提供一个参数为对话框提供一个默认值默认值;q Xpos、Ypos参数决定对话框出现在屏幕上的位置,参数决定对话框出现在屏幕上的位置,缺省时出现在屏幕中央缺省时出现在屏幕中央。q返回值返回值为用户输入的值为用户输入的值 235.2.4 5.2.4 数据的输入与输出数据的输入与输出【例例5-5】输入一个年龄值,默认为输入一个年龄值,默认为18
16、岁,岁,然后用然后用MsgBox()输出。输出。Sub Age()Dim N As Byte N=InputBox(请输入你的年龄值请输入你的年龄值,输入年龄输入年龄,18)MsgBox 该生年龄为该生年龄为&N&岁岁End Sub输入提示文本输入提示文本对话框标题对话框标题默认默认18岁岁245.2.4 5.2.4 数据的输入与输出数据的输入与输出nInputBox()函数返回值的类型由接受返回值变函数返回值的类型由接受返回值变量的类型决定。量的类型决定。例如,例如,D=InputBox(测试测试,1)qD为整型变量时,为整型变量时,D输出的是默认数值输出的是默认数值1;qD为日期型变量时,
17、为日期型变量时,D输出的是默认日期输出的是默认日期 1899-12-31;qD为为Boolean变量时,变量时,D输出的默认值为输出的默认值为True。255.2.4 5.2.4 数据的输入与输出数据的输入与输出2.MsgBox()函数 MsgBox(Prompt,Buttons,Title)说明:qPrompt参数必不可少,用于输出结果或提示性文本;参数必不可少,用于输出结果或提示性文本;qButtons是一个或一组按钮,缺省为一个是一个或一组按钮,缺省为一个“确定确定”按钮;按钮;qTitle参数用于指定消息对话框标题,缺省为参数用于指定消息对话框标题,缺省为 “Microsoft off
18、ice Acces”;qButtons参数设置方法如参数设置方法如P134表表5.7所示,函数的返回所示,函数的返回值如值如P134表表5.6所示。所示。265.2.4 5.2.4 数据的输入与输出数据的输入与输出【例例5-6】让管理人员用消息对话框决定李卫星是否为让管理人员用消息对话框决定李卫星是否为马腾跃的研究生马腾跃的研究生。Sub IsGraduate()Dim Answer As Integer Answer=MsgBox(李卫星是马腾跃的研究生吗?李卫星是马腾跃的研究生吗?,vbYesNo+vbQuestion)If Answer=vbYes Then MsgBox 李卫星是马腾跃
19、的研李卫星是马腾跃的研究生究生 If Answer=vbNo Then MsgBox 李卫星不是马腾跃的李卫星不是马腾跃的研究生研究生End Sub275.2.4 5.2.4 数据的输入与输出数据的输入与输出3.Debug3.Debug窗口窗口 在在VBAVBA代码窗口的代码窗口的“视图视图”菜单中称为菜单中称为“立即窗立即窗口口”。对于数据量较大的运行结果,可以用对于数据量较大的运行结果,可以用DebugDebug窗口窗口的的PrintPrint方法输出。方法输出。PrintPrint方法使用方法使用“;”或者或者“&”连接输出项,也连接输出项,也可以使用可以使用“,”使各个输出项之间空开一
20、定距离。使各个输出项之间空开一定距离。285.2.4 5.2.4 数据的输入与输出数据的输入与输出【例例5-7】用随机函数用随机函数 产生两个产生两个100100以内的整数并相以内的整数并相加,结果在立即窗口中输出。加,结果在立即窗口中输出。Sub Add()Dim X As Integer,Y As Integer Randomize Timer X=Rnd*99:Y=Rnd*99 Debug.Print X;+;Y;=;X+YEnd Sub运运行行4次次设置随机数种子,使产生设置随机数种子,使产生的随机数尽可能不一致的随机数尽可能不一致295.2.4 5.2.4 数据的输入与输出数据的输入
21、与输出【例例5-8】输出输出1、3、5及其对应的平方根,保留及其对应的平方根,保留3位位小数。小数。Sub Sqr_Root()Debug.Print Tab(5);1;Tab(12);3;Tab(19);5 Debug.Print Tab(5);Round(Sqr(1),3);Tab(12);Round(Sqr(3),3);Debug.Print Tab(19);Round(Sqr(5),3)End Sub运行结果运行结果 Tab(n)函数:控制输出项的列位置函数:控制输出项的列位置30总总 结结 复复 习习n变量变量 Dim StudentName As String n运算符运算符 算术
22、、关系、连接、逻辑算术、关系、连接、逻辑n表达式表达式 算数、关系、逻辑算数、关系、逻辑n常用内部函数常用内部函数 数值、字符串、时期数值、字符串、时期/时间、时间、类型转换类型转换 n数据的输入与输出数据的输入与输出 InputBox(Prompt,Title,Default,Xpos,Ypos)MsgBox(Prompt,Buttons,Title)Debug窗口窗口+、&315.3 5.3 选择语句选择语句 5.3.1 IfThen语句 5.3.2 IfThenElse语句 5.3.3 块状选择语句 5.3.4 选择语句嵌套 5.3.5 Select Case语句325.3.1 IfTh
23、en5.3.1 IfThen语句语句 格式:格式:If If Then Then 关系表达式或逻辑表达式成立时执行关系表达式或逻辑表达式成立时执行ThenThen后的语后的语句,否则直接执行句,否则直接执行IfIf的下一条语句。的下一条语句。可以一条语句,也可以是若干条用冒号可以一条语句,也可以是若干条用冒号“:”隔开的隔开的VBAVBA语句组。语句组。335.3.1 IfThen5.3.1 IfThen语句语句【例例5-9】随机出一道两位数加法题让小学生回答随机出一道两位数加法题让小学生回答 345.3.1 IfThen5.3.1 IfThen语句语句【例例5-9】随机出一道两位数加法题让小
24、学生回答随机出一道两位数加法题让小学生回答 Sub test()Dim A As Integer,B As Integer,Sum As Integer Randomize Timer A=10+Rnd*89:B=10+Rnd*89 Sum=InputBox(A&+&B&=?,两位数加法两位数加法)If Sum=A+B Then MsgBox 答案正确!答案正确!If Sum A+B Then MsgBox 答错了!正确答案是答错了!正确答案是&A+BEnd Sub355.3.2 IfThenElse5.3.2 IfThenElse语句语句n格式:If Then Else nIf后的表达式成立
25、时执行Then后的语句,不成立时执行Else后的语句;然后程序继续执行If后的其他语句。If Sum=A+B Then MsgBox 答案正确!答案正确!If Sum A+B Then MsgBox 答错了!正确答案是答错了!正确答案是&A+B If Sum=A+B Then MsgBox 答案正确!答案正确!Else MsgBox 答错了!答错了!正确答案是正确答案是&A+B等等价价365.3.2 IfThenElse5.3.2 IfThenElse语句语句【例例5-105-10】编写过程实现:通过键盘输入一门课程的考编写过程实现:通过键盘输入一门课程的考试成绩,用消息对话框显示是否合格试成
26、绩,用消息对话框显示是否合格 本例的本例的If语句也可改写成:语句也可改写成:If Grade=60 Then MsgBox(合格合格)Else MsgBox(不合格不合格)End Sub37n 行式行式IFIF选择语句的格式要求:选择语句的格式要求:If If Then ThenIf If Then ThenElseElse 要求必须写在一行中,当语句组较多时,要求必须写在一行中,当语句组较多时,程序的可读性降低。程序的可读性降低。n 解决方案:解决方案:采用块状选择语句采用块状选择语句385.3.3 5.3.3 块状选择语句块状选择语句 n格式:格式:If Then End If 或或If
27、 Then Else End IfIf Grade=60 Then MsgBox(合格合格)Else MsgBox(不合格不合格)End If395.3.3 5.3.3 块状选择语句块状选择语句注意:Then后面不能有其他语句(单引号引导的注释语句除外)一旦有语句,VBA就认为是行式IF语句,从而断定End If 是多余的,程序运行出错。405.3.4 5.3.4 选择语句嵌套选择语句嵌套 If Then ElseIf Then Elseif Then Else End If适用条件:当条件不成立时,在适用条件:当条件不成立时,在ElseElse后再用后再用IfIf语句作进语句作进一步的判断一
28、步的判断,ElseIfElseIf之间没有空格。之间没有空格。41【例例5-11】编写过程实现:通过键盘输入一个成绩值,判断它编写过程实现:通过键盘输入一个成绩值,判断它是优秀(是优秀(90分及分及90以上)、合格还是不合格。以上)、合格还是不合格。Sub grade()Dim grade As Integer,evalu As String grade=InputBox(请输入成绩:请输入成绩:)If grade=90 Then evalu=优秀优秀 ElseIf grade=60 Then evalu=合格合格 Else evalu=不合格不合格 End If msgbox grade&分
29、的等级为:分的等级为:+evaluEnd Sub425.3.4 5.3.4 选择语句嵌套选择语句嵌套 指出下面条件语句中隐含的错误:指出下面条件语句中隐含的错误:If Grade 60 Then Evalu=不合格不合格 If Grade 90 Then Evalu=合格合格 Else Evalu=优秀优秀 End If44思考与练习思考与练习下面的程序中能运行的是:下面的程序中能运行的是:_A)if x100 then y=2*x else y=x-100 C)if x0 then y=x3B)if x10 and x29 else y=x y=y+2 endif end if答案:答案:B
30、455.3.5 Select Case5.3.5 Select Case语句语句nSelect Case语句是多分支选择语句,格式:语句是多分支选择语句,格式:当当测测试试表表达达式式的的值值满满足足某某个个表表达达式式时时,程程序序就执行该语句。就执行该语句。如如果果没没有有一一个个表表达达式式的的值值能能满满足足测测试试表表达达式式,则则执执行行Case Case ElseElse后后的的语句。语句。Select Case Case Case Case Else End Select 46【例例5-12】将百分制成绩转换成文字描述的等级分。将百分制成绩转换成文字描述的等级分。Sub Gra
31、de1()Dim Grade As Integer,Evalu As String Grade=InputBox(请输入考试分数:请输入考试分数:)Select Case Grade Case 100:Evalu=满分满分 Case 90 To 99:Evalu=优秀优秀 Case 80 To 89:Evalu=良好良好 Case 70 To 79:Evalu=中中 Case 60 To 69:Evalu=合格合格 Case Is 60:Evalu=不合格不合格 Case Else:Evalu=数据错误数据错误 End Select MsgBox Grade&分的等级为分的等级为&EvaluE
32、nd Sub475.3.5 Select Case5.3.5 Select Case语句语句说明:说明:n测试表达式不一定是关系表达式或逻辑表达式,可以测试表达式不一定是关系表达式或逻辑表达式,可以是任意类型,但是任意类型,但Case子句中的表达式类型必须与之子句中的表达式类型必须与之相一致。相一致。n如果如果Case子句中的表达式是一个常量,则该常量直子句中的表达式是一个常量,则该常量直接写在接写在Case之后,如之后,如Case 100。n如果如果Case子句后的表达式是一个范围,可用子句后的表达式是一个范围,可用To从小从小到大指定,如到大指定,如Case 90 To 99、Case“A
33、”To“Z”;或或者使用者使用Is 如,如,Case Is 348思考与练习思考与练习利用利用Weekday()Weekday()和和DateDate函数函数,编写程序判断某编写程序判断某天或者今天是星期几。天或者今天是星期几。49输入、输出界面如下:输入、输出界面如下:50Sub day1()Dim d As Date,week As Stringd=InputBox(请输入日期:请输入日期:,Date)Select Case Weekday(d)Case 1:week=日日Case 2:week=一一Case 3:week=二二Case 4:week=三三Case 5:week=四四Cas
34、e 6:week=五五Case 7:week=六六End SelectMsgBox 今天是星期今天是星期+weekEnd Sub51P156 实验实验(2)编写程序,要求:产生)编写程序,要求:产生两个两个10以内随机正整以内随机正整数数,用输入对话框显示并要求输入它们的和,如,用输入对话框显示并要求输入它们的和,如果答案正确用消息对话框显示果答案正确用消息对话框显示“正确!正确!”,如果,如果答案不正确则显示正确结果。答案不正确则显示正确结果。(3)设有一种商品,售价)设有一种商品,售价50元元/千克,如果购买千克,如果购买10千克以上,则超出千克以上,则超出10千克的部分可享受千克的部分可
35、享受9折优惠,折优惠,超出超出20千克的部分可享受千克的部分可享受8折优惠。编写程序,任折优惠。编写程序,任意输入一个质量值,显示应付的货款。意输入一个质量值,显示应付的货款。例5-952复 习n选择语句选择语句 行式:行式:If Then If Then Else 块状:块状:If Then If Then End If Else End If 选择语句的嵌套选择语句的嵌套 Select Case语句语句535.4 5.4 循环语句循环语句 5.4.1 For.Next循环 5.4.2 Do While.Loop循环 5.4.3 双重循环和多重循环545.4.1 For.Next5.4.1
36、For.Next循环循环 nFor.Next循环一般用于循环次数已知的过程循环一般用于循环次数已知的过程n语法格式:语法格式:For=初值初值 To 终值终值 Step 循环体循环体Next 循环变量循环变量n步长值为步长值为1时可省略时可省略Step子句子句 55执行流程执行流程循环变量在初值与终值之间?循环变量在初值与终值之间?循环变量在初值与终值之间?循环变量在初值与终值之间?FOR循环变量循环变量循环变量循环变量=初值初值初值初值执行循环体执行循环体执行循环体执行循环体循环变量循环变量步长循环变量循环变量步长循环变量循环变量步长循环变量循环变量步长Next 之后的语句之后的语句.T.F
37、.565.4.1 For.Next5.4.1 For.Next循环循环例例:计算计算 S=1+2+100Sub sum()Dim s As Integer,i As Integer For i=1 To 100 step 1 s=s+i Next I msgbox 1100的和为的和为&sEnd Sub100100以内的奇数和、偶数和?以内的奇数和、偶数和?575.4.1 For.Next5.4.1 For.Next循环循环例:编程计算p=1*3*5*25Sub mutiply()Dim p As Double,i As Integer p=1 For i=1 To 25 Step 2 p=p
38、*i Next i Debug.Print pEnd Sub58Sub even()Dim i As Integer,s As String For i=10 To 20 Step 2 s=s&i Next i MsgBox s,10至至20之间的偶数之间的偶数End Sub5.4.1 For.Next5.4.1 For.Next循环循环【例例5-13】编写编写Even()过程,输出过程,输出1020的所有偶数的所有偶数 相邻偶数相差相邻偶数相差2 思考:退出循环时,思考:退出循环时,i的值是多少?为什么?的值是多少?为什么?59Sub average()Dim score As Intege
39、r,I As Integer,sum As integer sum=0 累加和清零累加和清零 For I=1 To 10 循环循环10次次 score=300+int(Rnd*100)sum=sum+score Debug.Print score;Next I Debug.Print 换行换行 Debug.Print 入学平均分入学平均分=;sum/10End Sub【例例5-14】用随机数模拟用随机数模拟10位研究生的入学分数,分值位研究生的入学分数,分值为为300-399之间的整数,要求在立即窗口输出他们的之间的整数,要求在立即窗口输出他们的成绩和平均分。成绩和平均分。思考:可否将循环修改
40、为:思考:可否将循环修改为:For I=10 To 1 step-1?60615.4.1 For.Next5.4.1 For.Next循环循环【例例5-15】通过键盘输入一个自然数通过键盘输入一个自然数X,判断它是否为质数,判断它是否为质数质数:除质数:除1以外,只能被以外,只能被1和自己所整除的自然数和自己所整除的自然数循环变量值超过终值后循环变量值超过终值后“自然自然”终止终止 615.4.2 Do While.Loop5.4.2 Do While.Loop循环循环 nDo While.Loop通常用于循环次数未知的过程通常用于循环次数未知的过程n语法格式:语法格式:Do While 循环
41、体循环体Loop n循环体中必须有循环体中必须有“破坏破坏”循环条件成立的语句,循环条件成立的语句,以免以免“死循环死循环”n强制终止循环的语句是强制终止循环的语句是Exit Do,跳出循环后执行跳出循环后执行Loop后的语句。后的语句。62执行流程条件表达式条件表达式条件表达式条件表达式循环体循环体循环体循环体真真假假循环体中要有使得条件表循环体中要有使得条件表达式最终为假的语句或通达式最终为假的语句或通过过Exit DoExit Do强制退出强制退出LoopLoop后面的语句后面的语句后面的语句后面的语句635.4.2 Do While.Loop5.4.2 Do While.Loop循环循
42、环例例:计算计算 S=1+2+100Sub sum2()Dim s As Integer,i As Integer i=1 Do While i=100 s=s+i i=i+1 Loop Debug.Print 1100的和为的和为&sEnd Sub100100以内的奇数和、偶数和?以内的奇数和、偶数和?64Sub Average2()Dim x As Integer,sum As Integer,I As Integer x=InputBox(输入第输入第&1&位研究生的入学分数:位研究生的入学分数:)Do While x -1 sum=sum+x 入学分相加入学分相加 I=I+1 人数增人
43、数增1 x=InputBox(输入第输入第&I+1&位研究生的入学分数:位研究生的入学分数:)Loop If I=0 Then MsgBox 无有效入学分数!无有效入学分数!Else MsgBox 入学平均分入学平均分=&Round(sum/I,1)End IfEnd Sub【例例5-16】通过键盘输入若干个研究生的入学分数,以通过键盘输入若干个研究生的入学分数,以-1为结束标志,求出这些学生的入学平均分。为结束标志,求出这些学生的入学平均分。-1为结束输入的标志为结束输入的标志 65例例5-16也可使用也可使用For.Next循环语句:将循环终值设为一个循环语句:将循环终值设为一个足够大的数
44、,一旦输入足够大的数,一旦输入-1,通过,通过Exit For强制退出循环。强制退出循环。Sub Average3()Dim x As Integer,sum As Integer,I As Integer For I=1 To 10000 x=InputBox(输入第输入第&I&位研究生的入学分数:位研究生的入学分数:)If x=-1 Then Exit For sum=sum+x 入学分相加入学分相加 Next I I=I-1 If I 0 Then MsgBox 入学平均分入学平均分=&Round(sum/I,1)Else MsgBox 无有效入学分数!无有效入学分数!End IfEnd
45、 Sub66思考与练习思考与练习下面的程序运行结果下面的程序运行结果s s与其他与其他3 3个不一样的是:个不一样的是:_A A)s=0 s=0 C)iC)i=1=1 for i=0 to 5 s=0 for i=0 to 5 s=0 s=s=s+is+i do while s=15 do while s=15 next inext i s=s=s+is+i i ii+1i+1B B)s=0 loops=0 loop for i=5 to 10 step 5 D for i=5 to 10 step 5 D)i=1i=1 s=s=s+is+i do do next i s=next i s=s
46、+is+i i=i+1 i=i+1 loop until s=15 loop until s=15答案:答案:C,其他结果均为其他结果均为1567691 1、下面这段程序结束以后,下面这段程序结束以后,i的值是()的值是()s=1s=1For i=1 to 20 step 2For i=1 to 20 step 2 s=s+1 s=s+1 i=i*4 i=i*4Next iNext i第第1 1次循环:次循环:i=1;s=s+1=2,i=i*4=4i=1;s=s+1=2,i=i*4=4i i加步长,步长为加步长,步长为2 2,i=4+2=620i=4+2=620i=24+2=2620退出循环退
47、出循环,此时此时i=26;s=3i=26;s=3复习复习 For.NextFor.Next循环循环69702 2、程序的功能是计算、程序的功能是计算100100以内所有奇数的平方以内所有奇数的平方和,即:和,即:1 12 2+3+32 2+.+99+.+992 2填空使程序完整。填空使程序完整。Sub Add2()Sub Add2()i=1 i=1 s=0 s=0 DO WHILE i100 DO WHILE i100 s=s=LOOP LOOP MsgBox(sMsgBox(s)End Sub End Subs=s+i2s=s+i2i=i+2i=i+2复习复习 DO while.LoopDO
48、 while.Loop循环循环705.4.3 5.4.3 双重循环和多重循环双重循环和多重循环 n双重循环:循环语句的循环体内包含了另外双重循环:循环语句的循环体内包含了另外一个循环一个循环n多重循环指三重循环或更多层次嵌套的循环多重循环指三重循环或更多层次嵌套的循环n对对于于一一个个外外层层循循环环有有m次次、内内层层循循环环有有n次次的的双重循环,其核心循环体将重复执行双重循环,其核心循环体将重复执行mn次。次。71循环的执行次数循环的执行次数 Sub xunhuan()Dim i As Integer,j As Integer For i=1 To 3 For j=1 To 4 Debu
49、g.Print i;j Next j Next iEnd Sub 72【例例1】n在立即窗口输出如下图所示的图形Sub star()Sub star()Dim i As Integer,j As Integer Dim i As Integer,j As Integer For i=1 To 5For i=1 To 5 For j=1 To 5For j=1 To 5 Debug.PrintDebug.Print*;*;Next j Next j Debug.PrintDebug.Print Next iNext iEnd SubEnd Subi=1i=1i=5i=5j=1j=1j=5j=57
50、35.4.3 5.4.3 双重循环和多重循环双重循环和多重循环【例例】在立即窗口中打印输出如下图形。在立即窗口中打印输出如下图形。Sub star()For i=1 To 5 For j=1 To i Debug.Print*;Next j Debug.Print Next iEnd Sub7475p=1p=1FOR FOR j=1 to i j=1 to i p=p*j p=p*jNEXT j NEXT j s=0s=0FORFOR i=1 i=1 TOTO 25 25 s=s=s+is+iNEXT iNEXT i求累加和求累加和求阶乘求阶乘【补充例题补充例题】编程计算编程计算s=1!+2!