《VBA程序设计基础.pdf》由会员分享,可在线阅读,更多相关《VBA程序设计基础.pdf(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-第九章程序设计根底第九章程序设计根底教学目标:教学目标:理解什么是程序掌握程序设计的根本方法编写并调试简单的 VBA 应用程序编写简单的事件驱动程序会在 VBA 应用程序中访问数据库教学过程:一、程序设计概述做一件事, 计算机可以把它分解为一系列的根本操作步骤, 通过程序设计语言的根本语句来完成,这就是程序。程序设计方法主要有两种: 面向过程的构造化程序设计方法和面向对象的程序设计方法。 前面所学的窗体对象设计就是一种面向对象的设计方法。在 Access 中编写程序使用的语言是Visual Basic for Application,简单 VBA。首先看一下VBA 编写的几个简单程序。例 9
2、-1 在窗体上放置一个命令按钮和一个文本框,单击命令按钮后在文本框中显示“VBA程序设计步骤如下:1、翻开数据库,切换到“窗体对象下,双击“在设计视图中创立窗体,2、添加文本框,在对应的属性窗口“全部选项卡的第一行设置名称为“文本 1,添加命令按钮,名称为“命令03、翻开“按钮的属性窗口,在“事件选项卡下的“单击栏选“事件过程,单击后面的按钮,进入编辑窗口:单击此按钮,输入程序。4、在编辑窗口-word.zl.-中输入如下程序: 其实窗口中已有,所以我们只要在中间添加一句Private Sub 命令 0_Click()文本 1.Value=“VBA 程序设计End Sub说明:1、 程序的开头
3、“Private Sub和完毕“End Sub是一个固定搭配,表示这是一个过程,程序中的“命令 0_Click( )表示这个程序在“命令0按钮被单击时执行。2、 在编辑窗口已有程序的开头和结尾,所以我们只要输入中间的一句:文本1.value=“VBA 程序设计3、 注意程序中引用的“命令0, “文本 1一定要和窗体中的按钮、文本框名称一致。5、关闭程序编辑窗口,切换到窗体视图,那么单击命令按钮后, “VBA 程序设计即显示在文本框中。思考 在上面的窗体中再添加一个按钮, 单击那么去除文本框中显示的文本, 应该怎样操作?例 9-2 在窗体中有一个命令按钮和两个文本框, 用户在第一个文本框中输入一
4、个正整数, 当单击该按钮时计算出这个正整数的阶乘,并在第二个文本框中显示计算结果。步骤:1、 新建一个窗体,拖入两个文本框和一个命令按钮,名称为文本1、文本2、命令0这三个 控 件 名 称 后 面 程 序 中 要 引 用 , 所 以 一 定 要 命 名 !2、 选中按钮,翻开其属性窗口,在“事件选项下的“单击一栏,选“事件过程,单击后面的按钮,输入如下程序:-word.zl.-说明:1、 程序中变量在使用前要先定义,这里计算阶乘,用到的只能是整数,所以定义a、b、c 为整型变量。 见中间程序局部的第一句:Dim a As Integer2、 单引号后面的是程序的注释语句,只起说明的作用,程序并
5、不执行它。不输入这些语句,程序照样正常运行。 见绿色局部3、 输入程序时可以用小写字母输入单词,但每一个关键词的第一个字母计算时机自动变成大写。 见程序中蓝色局部4、 程序一般一句一行,也可多个句子写在一行,中间用冒号隔开;如果一句太长,需要分成多行,可在上一行的最后加下划线“_,系统就会把上下两行连在一起做为一个语句。3、关闭程序编辑窗口,切换到窗体视图,我们输入 5,单击“计算按钮,那么会显示 120,实际上,5!=12345,计算结果是 120-word.zl.-二、程序的输入输入出语句1InputBoxInputBox 函数函数格式格式:InputBox 字符串 1,字符串 2,字符串
6、 3功能功能:显示一个输入对话框, 等待用户输入信息或按下按钮。 在按钮事件发生后返回键盘输入到文本框中的容,返回值的类型为文本类型,说明:说明:对话框中的提示信息是字符串 1,对话框的标题栏是字符串 2,字符串 3 是输入对话框中的默认值。后两个字符串是可选项,可不选。例 9-3 在窗体的命令按钮中分别参加以下代码,单击按钮后即可看出输入对话框的不同。Private Sub mand0_Click()InputBox 请输入学号, 学号输入框, 2009End Sub改成下面程序后的输入对话框:Private Sub mand0_Click()InputBox 请输入学号, 学号输入框End
7、 Sub改成下面程序后的输入对话框:Private Sub mand0_Click()InputBox 请输入学号End Sub-word.zl.-2MsgBoxMsgBox 函数函数格式:MsgBox 字符串 1,按钮参数,字符串 2功能:出现一个消息框,字符串 1 为消息框中的提示信息, 按钮参数那么决定了消息框中按钮的类型见下面按钮参数表 ,字符串 2 为消息框的标题栏上信息。按钮参数表:常数vbOKOnlyvbOKCancelvbYesNoCancelvbQuestionvbExclamationvbInformationvbDefaultButton1vbDefaultButton2
8、vbDefaultButton3值0133248640256512按钮类型只显示 OK 按钮显示 OK 及 Cancel 按钮显示 Yes、No、Cancel 按钮显示 Warning Query 图标显示 Waring Message 图标显示 Information Message图标第一个按钮是缺省值第二个按钮是缺省值第三个按钮是缺省值例 9-4 在窗体上添加一个命令按钮, 当单击该按钮后, 显示一个对话框:1 提示消息为 “您确定要退出吗?。 2包含“确定和“取消两个命令按钮以及一个询问图标,默认选择“确定按钮, 3对话框的标题栏为“确认退出分析:生成对话框需要用 MsgBox 函数,
9、包含“确定和“取消按钮,对应参数为1见上表 ;包含一个询问图标,对应参数为32;默认选择是“确定按钮这里的第一个就是“确定按钮 ,对应参数是 0,根据题目要求对应的语句应为:MsgBox“您确定要退出吗?,1+32+0, “确认退出步骤:1、 新建一个窗体,添加一个命令按钮,2、 在命令按钮的属性窗口中切换到“事件选项下,在“单击一栏中选“事件过程,单击这一栏后面的按钮,出现VBA 编程窗口,3、 在程序开头和结尾之间添加一句: MsgBox “您确定要退出吗?, 1+32+0,“确认退出,见下列图:-word.zl.-4、 切换到窗体视图,单击命令按钮,弹出一个消息框,如图:说明:1、 使用
10、参数进展组合时不能互相矛盾,例如不能同时显示“确定 “取消两个按钮和“是、 “否、 “取消三个按钮。2、 上面的组合参数可以求和后表示,也可用按钮参数表中对应的常数表示,下面几种形式均可:MsgBox“您确定要退出吗?,1+32+0, “确认退出MsgBox“您确定要退出吗?, 33, “确认退出 MsgBox“您确定要退出吗?,vbOKCancel+vbQuestion+vbDefaultButton1, “确认退出3、 当用户点击了不同的按钮,我们可以根据按钮的返回值来判定用户选择了哪个按钮,按钮返回值如下表:MsgBoxMsgBox 返回值返回值常数vbOKvbCancelvbYesvb
11、No-word.zl.值1267选择按钮选择了 OK选择了 Cancel选择了 Yes选择了 NO-例 9-5 在窗体上添加一个命令按钮, 当单击该按钮后承受用户输入的三角形三边长, 并求出周长后输出步骤:1、 新建一个窗体,添加一个命令按钮mand02、 在命令按钮的属性窗口中为其添加代码:如图Private Sub mand0_Click()定义 a,b,c,s 为单精度变量,a,b,c 为三边长,s 为周长Dim a As Single, b As Single, c As Single, s As Single利用输入对话框承受键盘输入的值,并用Val()函数转把字符串转换成数值a =
12、 Val(InputBox(请输入三角形的第一个边长:)b = Val(InputBox(请输入三角形的第二个边长:)c = Val(InputBox(请输入三角形的第三个边长:)s = a + b + cMsgBox 三角形的周长是: & sEnd Sub3、 切换到窗体视图,单击命令按钮,在弹出的对话框中依次输入三个值,例如3、4、5那么弹出一个消息框,显示三边长的结果:三、三、 赋值语句赋值语句格式:变量名=表达式功能:把右边表达式的值给左边的变量。例如x=2+1,x=x+1说明:1、 变量要先定义才能使用2、 赋值号两边的数值必须兼容,即数据类型尽量一致。否那么容易出错例如:Dim x
13、 as Integer,y as Single,z as String定义 x 为整数,y 为单精度数,z 为文本字符X=3.5Y=4Z=ACCESS第二句 x 定义为整数,却给了个小数3.5,此时 x 会取 4,第三句 y 是单精度数,给了整数4,但系统可以转换成 4.000 再给变量 y,所以是合法的。第四句 z 是字符变量,所以等式右边只能赋值一个字符串。3、 等号左边只能有一个变量,右边可以是含这个变量的表达式,例如 x=x+1 正确,但 x+1=x 就不正确了。4、 赋值号右边的计算结果必须在左边变量的表示围之,否那么系统会提示出错,-word.zl.-例如:Dim x as Int
14、eger 定义 x 为整型变量x=40000整型变量 x 最大只能取值 32767,所以 40000 就超出了整型数据表示的最大值 ,程序运行到这一句时,系统会提示出错。5、 变量被两次赋值 ,那么新值冲掉旧值,例如x=2x=3x=x+2x=?例 9-6 在窗体上添加一个命令按钮, 当单击该按钮后承受用户输入的长方形的长和宽, 计算其面积并输出计算结果。步骤:1、新建窗体,并在上面添加一个命令按钮,按钮名称为“命令 0,在按钮上添加代码如下:Private Sub 命令 0_Click()定义变量 a,b,s 为单精度变量,a,b 表示长方形的长和宽,S 表示面积Dim a As Single
15、, b As Single, s As Single通过 InputBox 函数输入边长,同时将文本型数据转换成数值型a = Val(InputBox(请输入长方形的第一个边长:)b = Val(InputBox(请输入长方形的第二个边长:)s = a * bMsgBox 长方形面积为: & sEnd Sub2、切换到窗体视图,单击命令按钮,会出现一个输入框,要求你输入长方形的两个边长,输入边长后,单击“确定按钮,即弹出一个消息框,显示长方形的面积。注意:输入程序代码时,要在英文半角下输入,各关键词之间要有空格 “英文半角输入“英文半角输入状态下的空格!状态下的空格! 四、顺序构造四、顺序构造
16、在高级程序设计语言中, 其语句执行都有一定的先后顺序, 总体可以分为顺序构造语句按语句的先后顺序执行 、条件分支语句根据条件的成立来确定执行哪一个分支 、循环语句某个条件成立时反复执行某一段程序 。顺序构造是最简单的一种构造,这种构造让语句按先后顺序执行,以完成简单的功能。例 9-7 在窗体上放一个命令按钮和两个文本框, 在两A=2个文本框中分别输入两个不同的值, 单击命令按钮后B=3交换这两个文本框中的数据。T=A把 A 的值放到 T 中,那么 T=2A=B把 B 的值放到 A 中,那么 A=3把B-B=TT 的值给,那么 B=2word.zl.-分析:假设 a=2,b=3, 利用赋值语句总
17、是把等号右边值给左边的特性,借助中间变量,可以让 a,b 的值互换。步骤:1、 新建一个窗体, 窗体中放两个文本框和一个命令按钮, 名称分别是 “文本 1、“文本 2、“命令 0, 在属性窗体设置这些控件的名称,在代码程序中引用2、 选中命令按钮,在属性窗口中添加这个按钮的代码如下:Private Sub 命令 0_Click()Dim a As String, b As String, t As String 定义 a,b,t 为文本变量a = 文本 1.Valueb = 文本 2.Valuet = aa = bb = t文本 1.Value = a文本 2.Value = bEnd Sub
18、3、 切换到窗体视图,在文本框中输入两个值,例如2、3,单击命令按钮,可看到文本框中两个数实现了交换。例 9-8 在窗体上放一个命令按钮和两个文本框,第一个文本框中输入用分钟表示的时间,单击命令按钮那么把这个时间转换成以小时和分钟表示的时间。步骤:1、 新建一个窗体,放一个命令按钮和两个文本框,定义按钮和文本框的名称为命令 0、文本 1、文本 22、 选中命令按钮,在属性窗口中切换到“事件选项下,在“单击栏选“事件过程,单击这一栏后面的按钮,输入以下代码:-word.zl.-3、切换到窗体视图下,输入一个分钟数例如:100,单击命令按钮就可转换成 1 小时 40 分钟。Private Sub
19、命令 0_Click()Const a As Integer = 60 声明 a 为常量 60Dim x As Integer, y As Integer, z As Integer定义 x,y,z为整型变量x = 文本 1.Value输入的分钟数y = x a xa 表示“x 整除 a的运算,和 x/a 不同。z = x Mod a x mod a 表示求“x 除 a 的余数文本 2.Value = y & 小时 & z & 分钟注意等式右边用用空格分开各个量。End Sub说明:1、 常量的声明:常量是一种特殊的量,它的值设置后就不能更改或赋于新值,可以在代码中的任何地方使用常量代替实际的
20、值,对于程序中经常出现的常数值且难以记忆无明确意义的数值,使用常量声明可增加代码的可读性和可维护性。格式:Const 常量名as 类型名=表达式2、本程序中用到几种运算,常见的运算见下表:符号Mod-word.zl.描述加减乘除整除求余求幂例如4*3=127/2=3.572=3(只取商的整数局部)9Mod6=3103=1000-五、分支构造五、分支构造分支构造语句有两种:if 语句和 Select Case 语句(1)if 语句单分支:格式:if 条件表达式 then执行语句 1Else 执行语句 2End if功能:条件表达式成立就执行语句1,不成立就执行语句 2说明:条件语句以 if 开头
21、,以 End if 完毕,if 和 End if 要成对出现。例 9-9 在窗体上放一个命令按钮和3 个文本框, 在前两个文本框中输入两个整数, 单击命令按钮比拟这两个文本框中输入的整数的大小,并将较大的数放到第三个文本框。分析:输入的两个数存放到x,y 中,用 z 存放较大的数:如果 xy,那么 z=x,否那么就让 z=y步骤:1、 新建窗体,放置三个文本框,及一个命令按钮,分别选中这些控件,在属性窗口中设置文本框及按钮名称为文本1、文本 2、文本 3、命令 02、 选中按钮, 在其属性窗口的中切换到 “事件选项, 再在 “单击一栏中选 “事件过程,单击这一栏后面的按钮,输入以下代码:Pri
22、vate Sub 命令 0_Click()Dim x As Integer, y As Integer, z As Integerx = 文本 1.Valuey = 文本 2.ValueIf x y Thenz = xElsez = yEnd If-word.zl.文本 3.Value = zEnd Sub-3、 切换到窗体视图,在文本框1、2 中输入两个数例如2,6 ,单击“确定那么在第三个文本框中显示较大的数。如果从有三种或三种以上的条件选择1 种,那么要用下面的条件语句:格式:If 条件表达式 1 then执行语句 1Elseif 条件表达式 2 then执行语句 2Else执行语句 n
23、End if注意书上错误,此处的Elseif 没有空格在 Else 和 if 之间例 9-10 在窗体上放一个命令按钮和两个文本框,单击命令按钮根据窗体中“成绩文本框输入的成绩,判断成绩等级,并显示在窗体的“等级文本框中。判定方法:85 分以上优秀,75 分至 85 分良好,60 至 75 分及格,60 分以下不及格。分析:由于一个成绩有四个等级选择,所以要用到多种条件选择语句步骤:1、 新建一个窗体,放一个命令按钮及两个文本框,在相应的属性窗口设置它们的名称分别是“命令 0、 “成绩、 “等级2、 在按钮 0 上添加程序代码如下:-word.zl.-3、 关闭程序窗口,切换到窗体视图下,输入
24、不同的分数,单击“确定按钮后可显示不同的等级:多种条件选择语句除了用以上的语句格式外,还有一种更加简洁的分支语句构造Select Case语句(2 2)Select CaseSelect Case 语句语句格式:Select Case 变量表达式Case 表达式列表 1执行语句 1Case 表达式列表 2执行语句 2Case Else执行语句 nEnd Select功能:第一句中变量表达式中的值满足哪个表达式列表,就执行哪个语句。-word.zl.-例 9-11 将例 9-10 中的 if 语句改成 Select Case 表示。步骤:1、修改命令按钮上程序代码如下:四、关闭程序窗口,切换到窗
25、体视图下输入不同的成绩值进展调试。六、循环构造六、循环构造如果在程序中需要重复执行某段代码,可用循环构造 VBA 中提供了三种循环构造( (一)一)DoDoLoopLoop 循环循环格式:Do While/Until 条件表达式中间需要反复执行的语句称为循环语句体Loop功能:根据 Do While 后面的条件表达式来重复执行循环语句体假设干次,直到表达式的值不再成立时,执行 Loop 后面的语句。例 9-12 在窗体上放一个命令按钮,当单击该按钮时,计算1+2+3+100 的结果,并利用消息框显示出来步骤如下:1、 新建一个窗体,添加一个按钮,在属性窗口中设置名称为“命令02、 在按钮上添加
26、代码如下:Private Sub 命令 0_Click()Dim s As Integer, xAs Integers = 0: x = 1Do While x = 100s = s + xx = x + 1Loop-MsgBox 1+2+.+100 的值为: & sword.zl.End Sub-3、 关闭程序编辑窗口,切换到窗体视图,单击命令按钮,那么弹出计算结果。想一想:如果改成求 12310 的值,该怎样进展?如果改成在文本框中输入一个值x,求 1+2+x 的值,该怎样进展?例 9-13 在窗体上放一个命令按钮,当单击该命令按钮时,求满足不等式 1+2+3+n=100的最大整数 n,并
27、将所求的 n 输出在消息框中。(最终满足条件的 n 为 13)步骤:翻开例 9-12,修改程序如下:Private Sub 命令 0_Click()Dim s As Integer, n As Integers = 0: n = 0Do While s = 100n = n + 1s = s + nLoop 注意退出循环时 n(比满足 S100 的那个 n)增加了 1MsgBox 满足 1+2+n 100 注意退出循环时 n(比满足 S100 的那个 n)增加了 1MsgBox 满足 1+2+n=100 的最大整数 n 为 & n-1-word.zl.-二For Next 循环格式:For 循
28、环变量=初值 to 终值 step 增量循环语句体Next 循环变量功能:其执行过程分以下两步:1循环变量取初值后,执行循环体2到 Next 循环变量时,循环变量加上增量,看是否超过终值,如超过那么退出循环,否那么继续执行循环体。说明:step 1 可省略不写即循环变量增量为1 时可省略 step 项不写例 9-15 编写一个过程,求 0 到 100 之间的所有奇数的和分析:过程就是在程序中反复用到的一小段程序, 定义成过程后,后面再用到这段程序只要输入过程名即可调用这段程序步骤:1 、 新 建 一 个 窗 体 , 添 加 一 个 按 钮 , 进 入 按 钮 的 代 码 编 辑 窗 口 :修
29、改 此 处 为 过 程 名L152、在编辑窗口上修改并添加代码如下: 见上图Private Sub L15()定义过程 L15Dim s As Integer, i As Integers = 0For i = 1 To 100 Step 2s = s + iNext iMsgBox 1+3+5+.+99= & sEnd Sub4、 切换到窗体设计视图, 选中按钮, 在属性窗口中仍然选 “事件选项卡下的 “单击事件栏中选“事件过程,在编辑窗口中添加程序如下:-word.zl.-5、切换到窗体视图,单击按钮那么调用过程L15,执行过程 L15 的程序,效果如下:注:任何一种循环语句都可以用另一种
30、循环语句代替,上面的 FORNext 循环程序用 D0WhileLoop 循环也可行,程序改动如下:Dim s As Integer, i As Integers = 0i=1do while i100s = s + ii=i+2loopMsgBox 1+3+5+.+99= & s例 9-16 编写一个过程,输入一个整数 n,然后求 1!+2!+n! ,然后在命令按钮中调用-word.zl.-这个过程仿例 9-15 即可。过程程序如下:Private Sub Pro916()Dim i As Integer, j As Integer, n As IntegerDim t As Long, s
31、 As Long t用来存放阶乘数,s 用来存放阶乘的和,由于值太大,所以定义为长整型变量。t = 1: s = 0n = inputbx(请输入一个整数 n:)For i = 1 To nt = 1 保证每次阶乘从 1 开场计算For j = 1 To it = t * jNext js = s + tNext iMsgBox 1!+2!+.+ & n & != & sEnd Sub例 9-17 编写一个过程,从键盘输入10 个数,输出其中的最大数和最小数分析:此题可使用 inputbox 函数承受用户输入的数字,由于输入的数据有10 个,所以定义一个包含 10 个元素的数组 A1 、A2
32、、A10来存放这些数字,变量Max 的初始值放 A1 ,然后和 A2到 A9逐个比拟,只要有比A1大的数 Max 就存放这个数,这样 Max 就存放出最大的数;Min 的初始值也存放 A1 ,然后和 A2到 A9逐个比拟,只要有比 A1小的数 Min 就存放这个数,这样 Min 就存放出最小的数。步骤:1、窗体上添加一个命令按钮,添加代码如下:(见下列图)-word.zl.-2、 选中按钮, 添加单击按钮调用过程的代码 见上图代码窗口的下半局部代码3、 切换到窗体,单击命令按钮后,会提示输入数字,先后输入10 个不同的数字后,最后会显示最大数及最小数, 这里可输入 1、2、3、7、8、9、10、4、5、6-word.zl.