《武汉大学---VBA程序设计.ppt》由会员分享,可在线阅读,更多相关《武汉大学---VBA程序设计.ppt(74页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第8章章 VBA程序设计程序设计1本章主要内容本章主要内容n VBA程序设计基础程序设计基础n VBA基本控制结构基本控制结构n 过程调用和参数传递过程调用和参数传递n 面向对象程序设计面向对象程序设计28.1 VBA程序设计基础程序设计基础n 编程环境编程环境n 数据类型数据类型n 常量与变量常量与变量n 运算符和表达式运算符和表达式n 常用内部函数常用内部函数n 域聚合函数域聚合函数38.1.1 VBA编程环境编程环境n 进入进入VBA编程环境编程环境n VBE工具栏工具栏(P235236)n VBE窗口窗口4代码窗口:代码窗口:用于用于编写、显示、编编写、显示、编辑辑VBA代码代码立即
2、立即窗口:窗口:输入或粘输入或粘贴一行代码,按下贴一行代码,按下Enter键执行键执行本地本地窗口:窗口:显示所显示所有当前过程中的变有当前过程中的变量声明及变量值量声明及变量值监视监视窗口:窗口:显示当显示当前工程中定义的监前工程中定义的监视表达式的值视表达式的值工程工程窗口:窗口:显示工程显示工程的分支结构列表和所的分支结构列表和所有包含的模块有包含的模块属性属性窗口:窗口:列列出选定对象的出选定对象的属性属性58.1.2 数据类型数据类型n 标准数据类型标准数据类型(P238)n 用户自定义数据类型用户自定义数据类型n 对象数据类型对象数据类型17种种(P239)用于在程序中操作数据库及
3、库中其他对象用于在程序中操作数据库及库中其他对象通过操作各对象的属性和方法来实现对对象通过操作各对象的属性和方法来实现对对象的操作的操作68.1.3 常量与变量常量与变量n常量常量n变量变量变量的命名原则变量的命名原则变量声明变量声明变量的应用范围变量的应用范围n数组数组数组的声明数组的声明数组的使用数组的使用n对象变量对象变量78.1.4 运算符和表达式运算符和表达式(P242)n表达式:用运算符将常量、变量、函数等连表达式:用运算符将常量、变量、函数等连接起来的式子,书写在一行上接起来的式子,书写在一行上 n表达式类型:表达式类型:算术表达式,如算术表达式,如 Count=x+1 关系表达
4、式,如关系表达式,如 C20 逻辑表达式,如逻辑表达式,如 Age=60 (-b+Sqr(b2-4*a*c)/(2*a)8运算符的优先级运算符的优先级算算术术运运算算关关系系运运算算逻逻辑辑运运算算与与、或或赋赋值值运运算算逻逻辑辑非非从高到低从高到低98.1.5 VBA常用内部函数常用内部函数n 数据的输入数据的输入/输出函数输出函数n 测试函数测试函数n 数学函数数学函数n 字符串函数字符串函数n 转换函数转换函数n 时间函数时间函数10输入输入/输出函数输出函数nInputBox()函数函数建立输入窗体,接收用户键盘输入的数据,返回建立输入窗体,接收用户键盘输入的数据,返回输入框中输入的
5、数字或字符串输入框中输入的数字或字符串n简单格式:简单格式:InputBox(提示信息提示信息,标题栏字符串标题栏字符串,默认值默认值)n说明:说明:提示信息提示信息:字符表达式,对话框中的信息显示:字符表达式,对话框中的信息显示标题栏字符串标题栏字符串:字符表达式,对话框标题显示:字符表达式,对话框标题显示默认值默认值:字符表达式,无输入时:字符表达式,无输入时,该默认值作为输该默认值作为输入内容入内容11输入输入/输出函数输出函数Sub test()Dim sname As String,strs1 As String strs1=请输入你的姓名请输入你的姓名,然后单击确定然后单击确定 s
6、name=InputBox(strs1,输入框输入框)End Sub12输入输入/输出函数输出函数nMsgBox()函数函数向用户发布提示信息,并等待用户响应向用户发布提示信息,并等待用户响应n格式:格式:MsgBox(提示信息提示信息,按钮数目按钮数目+图标类型图标类型+缺省按钮缺省按钮,标题标题栏字符串栏字符串)n说明:说明:提示信息提示信息:字符表达式,对话框中的信息显示:字符表达式,对话框中的信息显示按钮数目按钮数目+图标类型图标类型+缺省按钮缺省按钮:指定显示按钮的数目:指定显示按钮的数目及形式、使用的图标样式、缺省按钮及形式、使用的图标样式、缺省按钮标题栏字符串标题栏字符串:字符表
7、达式,对话框标题显示:字符表达式,对话框标题显示13输入输入/输出函数输出函数Sub age()Dim n As Integer n=InputBox(“请输入你年龄请输入你年龄”,“输入年龄输入年龄”)MsgBox“你的年龄是你的年龄是”&n&“岁岁”End Sub14输入输入/输出函数输出函数nMsgBox消息框的两种形式消息框的两种形式子过程调用形式:不需要返回值,不用括号表示子过程调用形式:不需要返回值,不用括号表示参数表,变成一条输出语句参数表,变成一条输出语句nMsgBox“你的年龄是你的年龄是”&n&“岁岁”函数过程调用形式:有返回值函数过程调用形式:有返回值(P244),要用括
8、号,要用括号将参数表括起来将参数表括起来nMsgBox(您真的要退出系统吗?您真的要退出系统吗?,4+32+256,确定确定)=6 15数学函数数学函数1.Exp(x)2.Abs(x)3.Log(x)4.Sqr(x)5.Sgn(x)6.Rnd(x)7.Round(x,number)8.Int(x)9.Fix(x)16字符串函数字符串函数1.Trim(string)2.Space(x)3.Asc(string)4.Chr(charcode)5.Len(string)6.Left(string,x)7.Right(string,x)8.Mid(string,start,x)9.Val(string
9、)10.Str(x)17时间函数时间函数1.Now2.Date3.Time4.Timer5.TimeSerial(hour,minute,second)6.Second(time)7.Minute(time)8.Hour(time)9.Day(date)10.Month(date)11.Year(date)12.Weekday(date,firstdayofweek)18转换函数转换函数1.CBool(expression)2.CByte(expression)3.CDate(expression)4.CDbl(expression)5.CInt(expression)6.CLng(expre
10、ssion)7.CSng(expression)8.CStr(expression)9.CVar(expression)19测试函数测试函数1.IsNumeric(x)函数函数2.IsDate(x)函数函数3.IsEmpty(x)函数函数4.IsArray(x)函数函数5.IsError(expression)函数函数6.Isnull(expression)函数函数7.IsObject(identifier)函数函数208.1.6 域聚合函数域聚合函数nDCount函数:函数:返回指定记录集中的记录数返回指定记录集中的记录数nDAvg函数:函数:返回指定记录集中某个字段列数据的返回指定记录集中
11、某个字段列数据的平均值平均值nDSum函数:函数:返回指定记录集中某个字段列数据的返回指定记录集中某个字段列数据的和和nDMax函数:函数:指定记录集中的最大值指定记录集中的最大值nDMin函数:函数:指定记录集中的最小值指定记录集中的最小值nDLookup函数:函数:从指定记录集获取特定字段的值从指定记录集获取特定字段的值可直接用于可直接用于VBA、宏、查询表达式或计算控件、宏、查询表达式或计算控件语法表达式语法表达式 函数名函数名(表达式表达式,记录集记录集,表达式表达式)218.2 VBA基本控制结构基本控制结构n 顺序结构顺序结构n 选择结构选择结构n 循环结构循环结构n 常用算法常用
12、算法228.3 过程调用和参数传递过程调用和参数传递n Sub过程的定义和调用过程的定义和调用n 函数过程的定义和调用函数过程的定义和调用n 参数传递参数传递n 变量、过程和作用域变量、过程和作用域n 递归递归238.4 面向对象程序设计面向对象程序设计n 面向对象程序设计的基本概念面向对象程序设计的基本概念n 对象模型对象模型n DoCmd 对象对象24面向对象程序设计的基本概念面向对象程序设计的基本概念n 抽象抽象n 继承继承n 封装封装n 多态性多态性n 集合和对象集合和对象n 属性和方法属性和方法n 事件和事件过程事件和事件过程258.5 综合示例综合示例2627标准数据类型标准数据类
13、型28用户自定义数据类型用户自定义数据类型n语句格式:语句格式:Type 数据类型名数据类型名 数据元素名数据元素名1(下标下标)As 类型名类型名 数据元素名数据元素名2(下标下标)As 类型名类型名 End Typen可以直接定义并使用其中某一数据元素可以直接定义并使用其中某一数据元素(P238239)29常量常量n在程序运行过程中值保持不变的量在程序运行过程中值保持不变的量n字符串常量放在一对字符串常量放在一对内,日期时间型常量放内,日期时间型常量放在一对在一对#内内例:例:中国中国、#9/1/2005#n符号常量:用标识符保存一个常量值符号常量:用标识符保存一个常量值例:用例:用Con
14、st语句定义符号常量语句定义符号常量Pai Const Pai=3.14159n系统常量:系统常量:true,false,yes,no,on,off,null30变量变量n变量的命名原则变量的命名原则第一个字符必须是字母,可以包含字母、数字和第一个字符必须是字母,可以包含字母、数字和下划线下划线包含的字符数不超过包含的字符数不超过255个个不能与不能与VBA的关键字同名的关键字同名不能与函数过程、语句和方法同名不能与函数过程、语句和方法同名同一作用域内不能有同名变量出现同一作用域内不能有同名变量出现不能使用标点符号和下列字符不能使用标点符号和下列字符:!&$#空格空格 31变量变量n变量的声明
15、变量的声明变量在使用前应尽可能声明变量在使用前应尽可能声明声明语句格式:声明语句格式:Dim As,As,.Dim StudentName As StringDim Grade As Integer,AvgGrade As SingleDim i,j,k As Integer默认情况下,变量可以不经声明便开始使用,此默认情况下,变量可以不经声明便开始使用,此时该变量被自动声明为时该变量被自动声明为Variant类型类型32变量的应用范围变量的应用范围n过程级变量过程级变量应用范围:应用范围:只在声明它们的过程中可用只在声明它们的过程中可用声明关键字:声明关键字:Dim、Staticn私有模块级
16、变量私有模块级变量应用范围:应用范围:对该模块所有过程可用对该模块所有过程可用声明关键字:声明关键字:Privaten公有模块级变量公有模块级变量应用范围:应用范围:项目中所有过程和其他模块均可用项目中所有过程和其他模块均可用声明关键字:声明关键字:Public33数组数组n由相同数据类型的变量构成有序序列,由变量由相同数据类型的变量构成有序序列,由变量名和数组下标组成,其中的每个数据称为元名和数组下标组成,其中的每个数据称为元素素Array(0)=17Array(1)=19 34数组的特性数组的特性n每个元素类型相同,占用同样大小的存储空间每个元素类型相同,占用同样大小的存储空间n数组中的元
17、素在内存中连续存放数组中的元素在内存中连续存放n通过下标可以访问数组中的每个元素通过下标可以访问数组中的每个元素n下标类型可以是整数、常量、变量或算术表达下标类型可以是整数、常量、变量或算术表达式式n数组可分为一维数组、二维数组和多维数组数组可分为一维数组、二维数组和多维数组 35一维数组的声明一维数组的声明n一维数组中的元素呈直线状排列,每个下标一维数组中的元素呈直线状排列,每个下标对应一个元素对应一个元素n语法格式语法格式:Dim(To 上界上界)As 数据类型数据类型n说明:说明:若省略下标下界,则数组的最小下标为若省略下标下界,则数组的最小下标为0 例例:Dim B(20)As Dou
18、ble Dim C(-3 to 3)As Integern B数组共有数组共有21个元素个元素(下标起止范围是下标起止范围是020)n C数组共有数组共有7个元素个元素(下标起止范围是下标起止范围是-33)36二维数组的声明二维数组的声明n二维数组中数据排列呈平面排列,可保存一个二维数组中数据排列呈平面排列,可保存一个二维表的信息二维表的信息n数组元素用行下标和列下标定位,定义格式:数组元素用行下标和列下标定位,定义格式:Dim(To 上界上界,To 上界上界)As 数据类型数据类型如果省略下标的下界值,则下界值默认为如果省略下标的下界值,则下界值默认为0例:例:Dim D(2,3)As In
19、teger Dim E(1 to 3,2 to 4)As Integer n声明声明D数组,有数组,有34=12个元素个元素n声明声明E数组,有数组,有33=9个元素个元素37数组的使用数组的使用n数组声明后,数组中的每个元素都可以当作单数组声明后,数组中的每个元素都可以当作单个变量来使用,其使用方法和相同类型的普个变量来使用,其使用方法和相同类型的普通变量相同通变量相同n引用格式:引用格式:数组名数组名(下标值下标值)n例:例:B(2)=1.20一维数组一维数组B的第的第3个元素个元素C(0)=3一维数组一维数组C的第的第1个元素个元素D(1,1)=4二维数组二维数组D的第的第2行第行第2个
20、元个元素素38对象变量对象变量nAccess建立的数据库对象及其属性,均可被看建立的数据库对象及其属性,均可被看成成VBA程序中的变量加以引用程序中的变量加以引用例:例:Access中窗体与报表对象的引用格式为中窗体与报表对象的引用格式为 Forms(或或Reports)!窗体窗体(或报表或报表)名称名称!控件名称控件名称.属性名称属性名称forms或或Reports分别表示窗体或报表对象集合分别表示窗体或报表对象集合感叹号感叹号“!”分隔开对象名称和控件名称分隔开对象名称和控件名称“属性名称属性名称”缺省时,使用控件的基本属性缺省时,使用控件的基本属性若对象名称中含有空格或标点符号,则需要用
21、方括若对象名称中含有空格或标点符号,则需要用方括号将对象名称括起来号将对象名称括起来398.2.1 顺序结构顺序结构n 按语句书写的顺序执行按语句书写的顺序执行n 涉及到四种语句:涉及到四种语句:注释语句注释语句 声明语句声明语句 赋值语句赋值语句 函数调用语句函数调用语句statement 1statement 240顺序结构控制顺序结构控制1.注释语句注释语句注释语句以注释语句以Rem开头,但一般用撇号开头,但一般用撇号引导注释引导注释内容,用撇号引导的注释可以直接出现在语句后内容,用撇号引导的注释可以直接出现在语句后面面2.声明语句声明语句声明语句用于命名和定义常量、变量、数组和过声明语
22、句用于命名和定义常量、变量、数组和过程。如程。如:Sub sample()Const PI=3.14159 Dim I as Integer End Sub41顺序结构控制顺序结构控制3.赋值语句赋值语句程序设计中最基本的语句程序设计中最基本的语句为变量指定一个值或表达式为变量指定一个值或表达式形式:形式:变量名变量名=表达式表达式Dim i as Integeri=i+14.函数调用语句函数调用语句428.2.2 选择结构选择结构n简单分支语句简单分支语句(单入单出单入单出)n语法形式:语法形式:if Then End IfFalse语句序列语句序列条条 件件True条件表达式条件表达式0(
23、zero):假:假非非0(nonzero):真:真43【例例】Sub example1()dim x as integer,y as integerx=Inputbox(Please input x:)if(x0)then y=x-7if(x=0)then y=2if(x0)then y=3*x*xMsgBox“y=”&yEnd Sub44选择结构示例选择结构示例(P250)n随机出一道两位数加法题并检测回答的正确性随机出一道两位数加法题并检测回答的正确性Sub test()Dim A As Integer,B As Integer,Sum As IntegerRandomize TimerA
24、=10+Rnd*89 :B=10+Rnd*89Sum=InputBox(A&+&B&=?,两位数加法两位数加法)If Sum=A+B Then MsgBox 答案正确!答案正确!If Sum A+B Then MsgBox 答错了!正确答案是答错了!正确答案是&A+B End IfEnd Sub45选择分支语句选择分支语句n单进双出单进双出n语法形式:语法形式:If Then Else End If语句序列语句序列1True语句序列语句序列2条条 件件False46例例Sub Passed()Dim Grade As Integer Grade=InputBox(请输入考试分数:请输入考试分数
25、:)If Grade=60 Then MsgBox 合格合格 Else MsgBox 不合格不合格“End IfEnd Sub 47iifiif函数函数nIf语句的特殊格式语句的特殊格式n语法:语法:VarX=iif(条件条件,表达式表达式1,表达式表达式2)n作用:作用:条件为真时,返回表达式条件为真时,返回表达式1的值,否则返回表达式的值,否则返回表达式2的值的值48例:求两个整数中的大数例:求两个整数中的大数Sub example2()Dim a,b,max As Integer a=InputBox(Please input a number:)b=InputBox(Please in
26、put another number:)max=iif(ab,a,b)MsgBox The bigger one is&max End Sub49多重选择分支多重选择分支n语法形式语法形式If Then ElseIf Then ElseIf Then Else End If50选择结构控制示例选择结构控制示例(P252)Sub Grade()Dim Grade As Integer,Evalu As String Grade=InputBox(请输入考试分数:请输入考试分数:)If Grade 60 Then Evalu=不合格不合格 ElseIf Grade 90 Then Evalu=合格
27、合格 Else Evalu=优秀优秀 End If MsgBox Grade&分的等级为分的等级为&EvaluEnd Sub 51多重分支语句多重分支语句 n语法形式语法形式Select Case Case Case Case Case Else End Select52流程图流程图语句序列语句序列2语句序列语句序列1语句序列语句序列n语句序列语句序列n+1值值1值值2值值nElse测试条件测试条件53选择结构控制示例选择结构控制示例(P253)Sub Grade1()Dim Grade As Integer,Evalu As String Grade=InputBox(请输入考试分数:请输入
28、考试分数:)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 b Then temp=a :a=b:b=temp If ac Then temp=a :a=c:c=temp If bc Then temp=b :b=c:c=temp result=Str(a)+Str(b)+Str(c)MsgBox The index is:&resultEnd Sub558
29、.2.3 循环结构循环结构nFOR.Next 循环循环n格式:格式:For=初值初值 To 终值终值 Step Exit ForNext n说明:说明:步长值为步长值为1时可省略时可省略Step子句子句 56流程图流程图 表达式表达式2 语句语句假假 表达式表达式3For循环的下一语句循环的下一语句 真真表达式表达式1n表达式表达式1(只计算只计算1次次):循环变量循环变量=初值初值n表达式表达式2:循环变量循环变量终值终值或或循环变量循环变量终值终值n表达式表达式3:循环变量循环变量=循环变量循环变量+步长步长57循环结构示例循环结构示例n编写编写Even()过程,输出过程,输出1020的所
30、有的所有偶数之和偶数之和Sub Even()Dim i As Integer,Sum As Integer For i=10 To 20 Step 2 Sum=Sum+i Next i MsgBox Sum,10至至20之间的偶数之和之间的偶数之和End Sub58循环结构示例循环结构示例n编写编写E2()过程,过程,输出输出100以内所有自然数之和以内所有自然数之和Sub E2()Dim I As Integer,S As Integer For I=1 To 100 Step 1 S=S+I Next I MsgBox S,100以内自然数之和以内自然数之和End Sub59例例Dim x
31、 As Integer,i As IntegerX=0For i=20 To 1 Step-2 x=x+i5Next i执行上段程序后,执行上段程序后,x的值为的值为 。1860例:中间退出循环例:中间退出循环n判断整数判断整数 m 是否素数是否素数 Sub example3()Dim m As Integer,k As Integer,i As Integer m=InputBox(请输入一个整数:请输入一个整数:,输入框输入框)k=m-1 For i=2 To k Step 1 If(m Mod i=0)Then Exit For Next i If(i k)Then MsgBox m&i
32、s a prime number!Else MsgBox m&is not a prime number!End IfEnd Sub如果如果Exit For被执行被执行了,则该数不是素数,了,则该数不是素数,那么那么i=k618.2.3 循环结构循环结构nDo.Loop循环循环n格式格式1:Do While|Until Exit Do Loop n格式格式2:Do Exit Do Loop While|Until 62流程图流程图真真 假假循环体循环体循环条件循环条件真真 假假循环体循环体循环条件循环条件格式格式1格式格式263例例n计算计算1+2+100Sub example4()Dim s
33、 As Integer,i As Integer s=0 i=1 Do s=s+i i=i+1 Loop while(i=100)MsgBox 1+2+.+100=&sEnd Sub64循环结构示例循环结构示例(P255)n寻找乘积为寻找乘积为399的两个相邻的奇数的两个相邻的奇数Sub example5()Dim s As Integer s=1 Do While s*(s+2)399 s=s+2 If s*(s+2)=399 Then MsgBox s&(s+2)&=&s*(s+2)End If LoopEnd Sub65循环结构示例循环结构示例n我国有我国有13亿人口,按人口年增长亿人口
34、,按人口年增长0.8%计算,计算,多少年后我国人口超过多少年后我国人口超过26亿亿Sub Popu()x=13 n=0 Do While x26 x=x*1.008 n=n+1 Loop MsgBox n End Sub66循环结构示例循环结构示例n有一张厚有一张厚0.5mm面积足够大的纸,将它不断对面积足够大的纸,将它不断对折。求对折多少次后其厚度超过珠穆朗玛峰的折。求对折多少次后其厚度超过珠穆朗玛峰的高度高度(8848000mm)Sub zmlm()h=0.5 n=0 Do While h 8848000 h=h*2 n=n+1 Loop MsgBox n,折叠的次数折叠的次数 End S
35、ub678.2.3 循环结构循环结构nWhile.Wend 循环循环n格式:格式:For Wendn说明:说明:碰到碰到Wend语句后对循环条件进行判断,若为真,语句后对循环条件进行判断,若为真,继续执行循环体;否则,执行继续执行循环体;否则,执行Wend后的语句后的语句与与Do.Loop循环循环类似类似,但不能使用,但不能使用Exit语句退出语句退出循环循环 688.2.3 循环结构循环结构n循环嵌套:循环嵌套:一个循环体内包含另一个完整的循环结构一个循环体内包含另一个完整的循环结构n执行过程:执行过程:外层循环的循环变量每取一个值,其内层循环都必外层循环的循环变量每取一个值,其内层循环都必
36、须从循环开始重复执行到循环终止须从循环开始重复执行到循环终止然后返回外层循环,外层循环取下一个值然后返回外层循环,外层循环取下一个值n注意:注意:各层循环结构的循环变量不能同名各层循环结构的循环变量不能同名69嵌套循环示例嵌套循环示例(P256)n在立即窗口输出在立即窗口输出“九九九九”口诀表口诀表Sub squaretable()For i=1 To 9 For j=1 To 9 m=i*j Debug.Print Tab(j*8);i&“&j&=&i*j;Next j Debug.Print Next iEnd Sub70综合读程序综合读程序71下面的过程运行之后,变量下面的过程运行之后,
37、变量J的值为的值为 。Sub Fun()Dim J as Integer J=5 Do J=J+2 Loop While J10End subA.5B.7C.9D.11D72下面的程序执行结果是下面的程序执行结果是 。Dim i As Integer,S As IntegerS=0For i=1 to 10 step 1 S=S+INext IA.S=0B.S=10C.死循环死循环D.S=55D73下列程序运行后,消息框输出下列程序运行后,消息框输出 。Sub ex1()Dim a(10,10)For m=2 to 4 For n=4 to 5 a(m,n)=m*n Next n Next m MsgBox a(2,4)+a(3,5)+a(4,5)End SubA.23 B.33 C.43 D.53C74