1 / 47

第八章 Access 的编程工具 VBA

第八章 Access 的编程工具 VBA. 本章重点: ★ 面向对象程序设计的概念 ; ★ 结构化程序设计三种控制结构的使用 ; ★ 模块与过程的设计 ; 本章难点: ★ 选择及循环语句语法规则及应用; ★ 参数传递的用法;. 第八章 ACCESS 的编程工具 VBA 8 .1 VBA 程序设计概述 8.2 VBA 语法知识 8.3 VBA 的程序结构 8.4 过程与模块 8.5 调试 VBA 程序 8.6 本章习题. 退出. VBA 程序中的三种基本结构. 顺序结构 选择(分支)结构 循环结构.

signa
Télécharger la présentation

第八章 Access 的编程工具 VBA

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第八章 Access的编程工具VBA 本章重点: ★ 面向对象程序设计的概念; ★ 结构化程序设计三种控制结构的使用; ★ 模块与过程的设计; 本章难点: ★ 选择及循环语句语法规则及应用; ★ 参数传递的用法;

  2. 第八章 ACCESS的编程工具VBA 8.1 VBA程序设计概述 8.2 VBA语法知识 8.3 VBA的程序结构 8.4 过程与模块 8.5 调试VBA程序 8.6 本章习题 退出

  3. VBA程序中的三种基本结构 顺序结构 选择(分支)结构 循环结构

  4. 结 束 顺序结构 开 始 6:30起床 刷牙洗脸吃早饭 坐车到学校

  5. 是雨天或雪天 N 结束 选择结构 开始 准备上体育课 Y 在室内上课 在操场上课

  6. N 循环结构 开始 准备考试 要交卷吗? 继续答题 Y 交卷 结束

  7. 8.3.1顺序结构 顺序结构是按照程序的编写顺序依次执行的语句序列。

  8. 8.3.1顺序结构 【例8-35】从键盘输入正方形的边长,计算并输出正方形的面积。 Sub Square() Dim r As Single ‘定义存放边长的变量 Dim s As Single ‘定义存放面积的变量 r= InputBox("请输入正方形的边长:") s=r^2 MsgBox (s) End Sub

  9. 8.3.2选择结构 计算机要处理的问题是复杂多变的,仅仅采用顺序结构是不够的,必须利用选择结构等来解决实际应用中的各种问题! 程序在进行数据处理时,常常会遇到一些选择,这时要根据不同的条件来作出相应的选择,走不同的分支,采取不同的操作。这样的结构就称为选择结构。 VBA提供了两种选择结构语句:IF语句和Select-Case语句。

  10. 8.3.2选择结构 1. If语句 If语句提供了两种不同的格式,即单分支选择结构和双分支选择结构。 (1)单分支选择结构 • 格式: If <条件表达式> Then <语句序列> End If • 功能:若<条件表达式>为真,则顺序执行语句序列;否则跳过命令序列,直接执行End If的后继语句。单分支选择结构的流程图如图8-28所示。 • 说明:If和End If应成对出现。

  11. 8.3.2选择结构 【例8-36】从键盘输入一个整数,若该数为正数,则输出显示“这是一个正数!”。 Sub Pd1() Dim x As Integer ‘定义一个整型变量 x= InputBox ("请输入一个整数:") If x>0 Then MsgBox ("这是一个正数!") End If End Sub

  12. 8.3.2选择结构 (2)双分支选择结构 • 格式: If <条件表达式> Then <语句序列1> Else <语句序列2> End If • 功能:若<条件表达式>为真,则顺序执行<语句序列1>,然后转去执行End If的后继语句;否则若<条件表达式>为假,则跳过<语句序列1>,顺序执行<语句序列2>,再执行End If的后继语句。

  13. 8.3.2选择结构 【例8-37】从键盘输入一个整数,若该数为正数,则输出显示“这是一个正数!”;若该数为负数,则输出显示“这是一个负数!”。 Sub Pd2() Dim x As Integer ‘定义一个整型变量 x= InputBox ("请输入一个整数:") If x>0 Then MsgBox ("这是一个正数!") Else MsgBox ("这是一个负数!") End If End Sub

  14. 8.3.2选择结构 ElseIf不能写成Else If 2. If语句的嵌套 • 格式1:格式2: If <条件表达式1> Then If <条件表达式1> Then <语句序列1> <语句序列1> Else ElseIf <条件表达式2> Then If <条件表达式2> Then <语句序列2> <语句序列2> Else Else <语句序列3> <语句序列3> End If End If End If • 功能:若<条件表达式1>为真,则顺序执行<语句序列1>,然后转去执行End If的后继语句;否则若<条件表达式1>为假,则跳过<语句序列1>,执行Else后面嵌套的If语句,即若<条件表达式2>为真,则顺序执行<语句序列2>,若<条件表达式2>为假,则顺序执行<语句序列3>。

  15. If 语句的嵌套 If语句中又包含一个或多个If 语句,称为语句的嵌套。可以把许多各式各样的条件语句嵌套在一起。在嵌套时最好使用便于观察的缩进的格式。如: • If < Condition > Then • If < Condition > Then • Instructions • Else • If < Condition > Then • Instructions • Else • Instructions • End If • End If • Else • Instructions • End If

  16. 【例8-38】从键盘输入一个整数,若该数为正数,则输出显示“这是一个正数!”;若该数为负数,则输出显示“这是一个负数!”;若该数为零,则输出显示“输入的是零!”。【例8-38】从键盘输入一个整数,若该数为正数,则输出显示“这是一个正数!”;若该数为负数,则输出显示“这是一个负数!”;若该数为零,则输出显示“输入的是零!”。 Sub Pd3() Dim x As Integer '定义一个整型变量 x = InputBox("请输入一个整数:") If x > 0 Then MsgBox ("这是一个正数!") Else If x = 0 Then MsgBox ("输入的是零!") Else MsgBox ("这是一个负数!") End If End If End Sub

  17. 8.3.2选择结构 不能出现多个变量! 3. Select Case语句 • 格式: Select Case <表达式> Case <表达式1> <语句序列1> Case <表达式2> <语句序列2> …… Case <表达式n> <语句序列n> Case Else <语句序列n+1> End Select • 功能:当程序执行到Select Case语句时,首先计算<表达式>的值,然后依次和每个Case后面的<表达式>中的值比较,当遇到匹配值时,转入相应Case语句序列中执行,执行完后,整个Select语句结束,执行End Select的后继语句。 Case后不能出现变量及有关运算符

  18. 8.3.2选择结构 【例8-39】根据输入的院系来显示学生来自哪个院系或专业。 Sub choose() Dim str1 As String str1 = InputBox("请输入您所在的院系:") Select Case str1 Case "经济" MsgBox ("您来自经济学院!") Case "物流" MsgBox ("您来自物流学院!") Case "外语" MsgBox ("您来自外语学院!") Case "商" MsgBox ("您来自商学院!") Case "信息" MsgBox ("您来自信息学院!") Case Else MsgBox ("您输入的信息有误!") End Select End Sub

  19. 【例8-40】将某课程的百分制成绩mark转换为对应的等级表示的成绩grade,转换的规则如下: mark>=90为优,80<=mark<90为良,70<=mark<80为中,60<=mark<70为及格,mark<60为不及格。同时判断在不及格的情况下是需要补考还是重修,其中:30<=mark<60时应补考,mark<30时应重修。 Sub Translate() Dim mark As Integer Dim grade As String mark = InputBox("请输入成绩:") Select Case mark Case 90 To 100 grade = "优" Case 80 To 89 grade = "良" Case 70 To 79 grade = "中" Case 60 To 69 grade = "及格" Case 0 To 59 If mark >= 30 Then grade = "不及格,需要补考" Else grade = "不及格,需要重修" End If End Select MsgBox (grade) End Sub

  20. 8.3.2选择结构 4. 分支功能函数 (1)IIf函数 • 格式:IIf (<条件表达式>,<表达式1>,<表达式2>) • 功能:IIf函数根据<条件表达式>的值来决定函数返回值。若<条件表达式>的值为真,函数返回<表达式1>的值;如果<条件表达式>值为假,函数返回<表达式2>的值。 【例8-41】输入两个整数,输出较大者。 进入VBA编辑器,在“代码”窗口中输入如下代码: Sub bj() Dim a As Integer Dim b As Integer a = InputBox("请输入第一个数:") b = InputBox("请输入第二个数:") MsgBox (IIf(a > b, a, b)) End Sub

  21. 8.3.2选择结构 4. 分支功能函数 (2)Switch函数 • 格式:Switch (<条件表达式1>,<表达式1> [,<条件表达式2>,<表达式2>…<条件表达式n>,<表达式n>]]) • 功能:据各条件式的值来确定函数返回值。 【例8-42】用Switch函数实现【例8-40】。 Sub Translate1() Dim mark As Integer Dim grade As String mark = InputBox("请输入成绩:") grade = Switch(mark >= 90, "优", mark >= 80, "良", mark >= 70, "中", mark >= 60, "及格", mark >= 30, "补考", mark < 30, "重修") MsgBox (grade) End Sub

  22. 8.3.2选择结构 4. 分支功能函数 (3)Choose函数 • 格式:Choose (<索引式>,<选项1> [,<选项2>,…<选项n>]]) • 功能:根据<索引式>的值来返回选项列表中的某个值。【例8-43】 Sub Ch() Dim a As Integer Dim b As Integer a = 2 b = 5 MsgBox ( choose(2,a,a + b,b)) ‘结果为7 End Sub

  23. 8.3.3循环结构 和顺序结构、选择结构一样,循环结构是结构化程序中的三种基本程序结构之一。在程序中,凡是需要重复相同或相似的操作步骤,都可以用循环结构来实现。 循环结构由两部分组成: ★循环体,即要重复执行的语句序列; ★循环控制部分,即用于规定循环的重复条件或重复次数,同时确定循环范围的语句。 要使计算机能够正常执行某循环,由循环控制部分所规定的循环次数必须是有限的,即循环体可以重复0次到若干次。

  24. 常用的循环结构 .For…Next循环 .Do…Loop循环 ★ For…Next循环结构常用于设计已知循环次数的程序 ★ Do…Loop循环结构更适合于设计循环次数未知,而只知道循环结束条件的程序。

  25. 循环=反复 生活中,需要反复的事情很多。譬如你我的整个人生,就是一个反复,反复每一天的生活。 假设有一个爱哭的小娃娃,有一天她要求父母给买一条小红裙,可惜父母不同意,于是她就开始一个循环: Do while ( 父母不给买小红裙) 我哭Loop 首先,合适的判断循环是否继续的条件相当重要。要想继续哭的条件有两个:“父母不给买小红裙”And“我还没有哭累”。 Do while ( 父母不给买小红裙 And 我还没有哭累) 我哭 Loop 

  26. 其次,大多数情况下,条件需要被恰当地改变。她不能只顾哭,还得在哭的间隙观察大人是否同意买裙。至于是否哭累,我们假设小女孩有一个疲劳度,每哭一次疲劳度加1,当疲劳度到达200时,可怜的小女孩累了…… Do while(父母不给买小红裙 And 疲劳度 < 200) 我哭 我偷看爸妈是否同意买裙 If(同意) Then 停止哭泣 EndIf 疲劳度=疲劳度+1 Loop

  27. 循环流程中的“条件三要素” : 第一、条件一般需要进行一定的初始化操作。 第二、要有在循环中改变循环条件的因素 第三、循环需要有结束的机会。 程序中最忌“死循环”。所谓的“死循环”就是指该循环条件永远为真,并且,没有另外的跳出循环的机会。

  28. 老和尚讲故事 死循环!!

  29. F 循环条件 T 语句块 语句块 1、Do While…loop 循环 Do While <循环条件> 循环体 Loop 执行过程:(先判断,后执行) 先判断循环条件,若为真执行循环体, 再判断循环条件,若为假跳出循环体, 执行Loop之后语句

  30. Sub Add() Dim S As Integer ‘声明变量 Dim I As Integer ‘声明变量 S = 0 ‘变量赋值 I = 1 ‘变量赋值 Do While I <= 100 ‘循环开始语句 S = S + I ‘循环体 I = I + 1 Loop ‘循环结束语句 MsgBox (S) ‘输出计算结果 End Sub 【例8-44】求S = 1 + 2 + 3 + 4 + … … + 100

  31. DO—LOOP循环语句 【例8-45】由键盘输入一个数N,计算n的阶乘。若阶乘值大于10000则终止计算退出循环,并给出提示;若阶乘值不大于10000,输出计算结果。 Sub Jie() Dim S As Single Dim I As Single, N As Single N = InputBox("请输入一个数:") S = 1 I = 1 Do While I <= N S = S * I If S >= 10000 Then Exit Do ‘循环退出语句,不再判断条件提前结束循环 End If I = I + 1 Loop If I > N Then ‘判断是否提前结束循环 MsgBox (S) Else MsgBox ("阶乘超过了规定的上限10000,结束计算!") End If End Sub

  32. 8.3.3循环结构 Do—Loop循环语句总结 • 说明: (1)Do while为循环开始,Loop为循环结束,两者必须配对出现。 (2)Exit Do也叫循环退出语句,它能立即跳出循环,而无论条件是否成立。 (3)循环是否继续取决与条件的当前值,一般在循环体内应含有改变条件的语句(或含有Exit Do),否则将造成死循环。 (4)与选择结构相同,循环也可以嵌套。 (5)Do…Loop循环结构更适合于设计循环次数未知,而只知道循环结束条件的程序。

  33. 相当于计数器 8.3.3循环结构 2. For—Next循环语句 • 格式: • For循环变量 = 起始值 To终止值 [Step步长] • 语句块(循环体) • Next [循环变量] 功能:<循环变量>赋<初值>,当<循环变量>值小于或等于<终值>时,执行循环体中的语句序列,执行完后遇到语句“Next [循环变量]”时使循环变量加上步长,然后再回到For语句重复进行判断,直到当<循环变量>的值大于<终值>,则结束循环。

  34. 8.3.3循环结构 2. For—Next循环语句 说明: (1)<循环变量>相当于计数器,取值范围在<初值> 和 <终值>之间,通过判断变量值是否在指定范围内来确定循环体是否重复执行。 (2)步长是每次循环时<循环变量>增加的值,语句中没有“step 步长”,则表示默认步长为1。 (3)一般循环体内不包含改变循环变量值的语句,循环次数由初值、终值和步长确定。当循环次数已知或可确定时,使用For—Next循环语句。否则应使用Do…Loop循环。 (4)步长可以为正(此时初值<终值),也可以为负(此时初值>终值)

  35. 如果想运行5次,可用下面的循环: 这时,每循环一次,i 的值就加 1。 例:下面代码可循环?次 • For i = 1 To 5 Step 1 ‘Step 1 可省略 • 语句块 • Next • For i = 5 To 1 Step -1 • x = x + 1 • Next i • Print x

  36. Sub Add1() Dim S As Integer Dim I As Integer S = 0 I = 1 For I = 1 To 100 ‘缺省步长默认为1 S = S + I Next MsgBox (S) End Sub 【例8-46】For—Next循环计算 S = 1 + 2 + 3 + … + 100

  37. 2. For—Next循环语句 【例8-47】编程绘制九九乘法表 Sub jjcf() Dim i As Integer, j As Integer For i = 1 To 9 Debug.Print " " & i; ‘分号表示在同行输出 Next Debug.Print " " ‘分号表示在同行输出 For i = 1 To 9 ‘每次循环对应一行 Debug.Print i; For j = 1 To i ‘内层循环的每次对应每行的一个数 Debug.Print " " & i * j; Next j Debug.Print " " Next i End Sub

  38. 课后练习-程序结构流程图 开始 i=1 s=0 i<=10 i=i+1 S=s+1 Y N 输出S 练习1、以上流程图属于( )结构 结束

  39. 输入a的值 输入b的值 输出a,b的值 结束 开始 练习2、 此流程图属于什么结构?请描述该流程图的含义? temp← a 提示: 1、 “←”表示等于 2、temp、a、b表示变量(即未知数) a←b b← temp

  40. 输入电的度数dushu 如果 dushu<=50 Y Y N 如果 dushu<=200 Dianfei=dushu * 0.53 N Dianfei=50 * 0.53+(dushu-50)*0.56 Dianfei=50 * 0.53+150*0.56+(dushu-200)*0.63 输出dianfei的值 结束 开始 练习3、假如你是电费收费员,现在需要向某位住户收取电费,以下是一个有关电费收费问题的流程图,请解释一下收费规则?并说明此图属于什么结构?

  41. 练习4:以下程序,当输入a,b,c的值分别为10,20,30时,输出结果为多少?该流程图完成了什么功能?练习4:以下程序,当输入a,b,c的值分别为10,20,30时,输出结果为多少?该流程图完成了什么功能?

  42. 输入n的值 s=1 i=1 i<=n? N Y s=s*i i=i+1 输出s的值 结束 开始 练习5、当输入n的值为5时,输出s的值为多少?该流程图完成的什么功能? 练习6、将流程图中 改为: 流程图的功能一样吗?如果不一样,当n=5时,结果变成多少? s=s*i i=i+1 i=i+1 s=s*i

  43. 课后综合练习 1.有如下Visual Basic程序段: a = 18 b = 12 c = (a - b) * 2 该程序段运行后,变量c的值为____________。 2.有如下Visual Basic程序段: a = 5 b = 4 c = 7 s = a + b If s > c Then Label1.Caption = “初检合格“‘Label1.Caption表示在label1上显示的内容 Else Label1.Caption = "重新调试" End If 该程序段运行后,在标签Label1上显示的是____________。

  44. 3、有如下程序段: t = 1 s = 0 For i = 1 To 10 Step 2 t = t * 2 s = t + 1 Next i 问: (1)程序运行后,变量s 的值为____________。 (2)程序运行后,语句"t = t * 2"被执行的次数为____________。 4、下列Visual Basic程序段运行后,变量s的值为( )。a=2 b=1 s=0 For I=10 To 8 Step -1 s=s+a c=a+b a=b b=c Next I

  45. 附加题1、在Visual Basic中程序段是计算( )公式的。s=0 For I=1 To 10 t=1 for j=1 to i t =t*j next j s=s+t Next I A、s=1+2+3+4+5+6+7+8+9+10 B、s=1*2*3*4*5*6*7*8*9*10 C、s=1!+2!+3!+4!+5!+6!+7!+8!+9!+10! D、s=1+2*3+3*4+4*5+5*6+6*7+7*8+8*9+9*10 附加题2.有如下Visual Basic程序段: x = 10 s = 0 i = 0 Do While i <= x i = i + 2 s = s + i Loop 问: (1)该程序段运行后,变量s的值为____________。 (2)循环刚退出时,变量i的值为____________。

  46. 谢 谢!

More Related