《第9章 模块与VBA编程基础课件.ppt》由会员分享,可在线阅读,更多相关《第9章 模块与VBA编程基础课件.ppt(52页珍藏版)》请在三一办公上搜索。
1、2023/1/17,数据库技术与应用基础Access,第9章 模块与VBA编程基础,2023/1/17,熟悉VBA的编程环境掌握VBA的基本语法和程序结构熟悉Access对象模型掌握VBA基于面向对象的编程,主要任务,第9章 模块与VBA编程基础,2023/1/17,9.1 模块的基本概念9.1.1 类模块9.1.2 标准模块9.2 创建模块9.2.1 在模块中加入过程9.2.2 在模块中执行宏9.3 VBA程序设计基础9.3.1 面向对象程序设计的基本概念9.3.2 Visual Basic 编辑环境9.3.3 Visual Basic 数据类型和数据库对象9.3.4 变量与常量9.3.5
2、程序语句书写原则9.3.6 运算符与表达式9.3.7 常用标准函数9.4 VBA流程控制语句9.4.1 顺序结构9.4.2 选择结构9.4.3 循环结构9.4.4 常用事件程序的设计9.5 宏与VBA9.5.1将宏转换为Visual Basic代码9.5.2将窗体或报表中的宏转换为Visual Basic代码9.5.3将宏转换为模块9.5.4在VBA过程中实现宏操作,主要内容,第9章 模块与VBA编程基础,2023/1/17,9.1 模块的基本概念,模块是VBA代码组织形式,在Access中模块可分为两类:类模块 标准模块。窗体和报表模块都是类模块,而且它们各自与对应的窗体或报表相关联。窗体或
3、报表模块通常都含有事件过程,当它们创建第一个事件过程时,Access将自动创建与窗体或报表对象相关联的类模块。与类模块不同,标准模块不与任何对象相关联。标准模块中的程序是通用的,可以在数据库的位置被调用执行。,2023/1/17,9.1.1 类模块,类模块分为:独立类模块、窗体模块和报表模块。独立类模块不依附于窗体和报表而独立存在,用该类模块能创建自定义对象,可以为这些对象定义属性、方法和事件。窗体模块和报表模块都属于类模块,它们从属于各自的窗体或报表。,2023/1/17,9.1.2 标准模块,标准模块是指存放整个数据库可用的函数和过程的模块。标准模块属于数据库对象,用户可以像创建其他数据库
4、对象一样创建包含VBA代码的标准模块。模块内包含了Sub过程和Function函数过程。,2023/1/17,9.2 创建模块,过程是模块的单元组成,由VBA 代码编写而成。过程分两种类型:Sub 子过程和Function 函数过程。,2023/1/17,9.1.2 在模块中加入过程,模块是装着VBA 代码的容器。在窗体或报表的设计视图里,单击工具栏“代码”按钮或者创建窗体或报表的事件过程可以进入类模块的设计和编辑窗口;单击数据库窗体中的“模块”对象标签,然后单击“新建”按钮即可进入标准模块的设计和编辑窗口。一个模块包含一个声明区域,且可以包含一个或多个子过程(以Sub 开头)或函数过程(以F
5、unction 开头)。模块的声明区域是用来声明模块使用的变量等项目。,2023/1/17,例91 创建一个名为Welcome的模块,其功能是用来显示欢迎消息框。操作步骤:(1)选择数据库窗口中的“模块”对象,单击“新建”按钮,打开VBA编辑界面。(2)执行“插入”“过程”菜单命令。在弹出的“添加过程”对话框中填写过程的名称、选择过程类型和范围,单击“确定”按钮后,出现Welcome过程的编写窗口。,2023/1/17,(3)编写过程代码。(4)单击工具栏上的“运行子过程/用户窗体”按钮。(5)以Welcome为模块名保存该模块。,2023/1/17,9.2.2 在模块中执行宏,在模块的过程定
6、义中,使用Docmd 对象的RunMacro 方法,可以执行设计好的宏。其调用格式为:Docmd.RunMacro MacroName,RepeatCount,RepeatExpression 其中,MaoroName 表示当前数据库中宏的有效名称;RepeatCount 川可选项,用于计算宏运行次数的整数值;RepeatExpression可选项,数值表达式,在每一次运行宏时进行计算,结果为false 时,停止运行宏。,2023/1/17,Visual Basic是微软公司推出的可视化应用程序开发语言,简称VB。由于VB功能强大且编程简单易学,因此微软公司将它的一部分代码结合到office中
7、,形成了VBA。VBA语法与Visual Basic 编程语言互相兼容。在Access 程序设计中,当某些操作不能用其他Access 对象实现,或者实现起来很困难时,就可以利用VBA语言编写代码,完成这些复杂任务。,9.3 VBA程序设计基础,2023/1/17,9.3.1 面向对象程序设计的基本概念,对象和集合属性和方法事件和事件过程,2023/1/17,Visual Basic 编辑器(VBE,Visual Basic Editor)是编辑VBA 代码时使用的界面。VBE 编辑器提供了完整的开发和调试工具。启动方式有如几种:执行“工具”|“宏”|“Visual Basic编辑器”命令。新建
8、模块对象后,自动打开Visual Basic编辑器。执行“插入”|“模块”命令或执行“插入”|“类模块”命令。在模块对象的数据库窗口中,双击已有模块。打开窗体或报表的设计视图,执行“视图”|“代码窗口”命令。,9.3.2 Visual Basic 编辑环境,2023/1/17,打开窗体或报表的设计视图,在需要编写代码的控件上右击,从弹出的快捷菜单中选择“事件生成器”命令。在窗体或报表上的控件上右击,从弹出的快捷菜单中执行“属性”|“事件”菜单命令,单击任何事件单元格右侧的下拉箭头,从下拉列表框中选择“事件过程”。窗口主要由标准工具栏、工程窗口、属性窗口和代码窗口等组成。,2023/1/17,例
9、92 新建窗体并在其上放置一个命令按钮,然后创建该命令按钮的“单击”事件响应过程。操作步骤:(1)进入Access 的窗体“设计”视图,在新建窗体上添加一个命令按钮并命名为“cmdTest”。(2)选择“Test”命令按钮,单击右键打开属性窗体,单击“事件”卡片并设置“单击”属性为“(事件过程)”选项。,2023/1/17,(3)单击属性栏右旁的“”按钮,即进入新建窗体的类模块代码编辑区。在打开的代码编辑区里,可以看见系统已经为该命令按钮的“单击”事件自动创建了事件过程的模板。此时,只需在模板中添加VBA 程序代码,这个事件过程即作为命令按钮的“单击”事件响应代码,这里,仅给出了一条语句:Ms
10、gBox“测试完毕!”,vbInformation,“title”。(4)按Alt+F11 组合键回到窗体“设计”视图,运行窗体,单击“test”命令按钮即激活命令按钮“单击”事件,系统会调用设计好的事件过程来响应“单击”事件的发生,弹出“测试完毕!”消息框。,2023/1/17,标准数据类型用户定义的数据类型数据库对象,9.3.3 Visual Basic 数据类型和数据库对象,2023/1/17,常量 常量是指在程序运行过程中值不变的量。常量的使用能够增加代码的可读性,并且使代码易于维护。在VBA 中有3 种常量:直接常量、符号常量和系统常量。变量 变量是指程序运行时值会发生变化的数据。变
11、量名的命名,同字段命名一样,变量命名不能包含有空格或除了下划线字符(_)外的任何其他的标点符号,其长度不得超过255 个字符。,9.3.4 变量与常量,2023/1/17,语句书写规定 注释语句 采用缩进格式书写格式,9.3.5程序语句书写原则,2023/1/17,算术运算符与表达式关系运算符与表达式 逻辑运算符与表达式 字符串运算符与表达式,9.3.6 运算符与表达式,2023/1/17,在VBA 中,除模块创建中可以定义子过程与函数过程完成特定功能外,还提供了近百个内置的标准函数,可以方便地完成许多操作。标准函数一般用于表达式中,有的能和语句一样使用。其使用形式如下:函数名(参数1,参数2
12、,参数3,参数4,参数5)其中,函数名必不可少,函数的参数放在函数名后的圆括号中,参数可以是常量、变量或表达式,可以有一个或多个,少数函数为无参函数。每个函数被调用时,都会返回一个返回值。需要指出的是:函数的参数和返回值都有特定的数据类型对应。,9.3.7 常用标准函数,2023/1/17,数学函数字符函数日期时间函数合计函数,2023/1/17,VBA程序设计有三种基本控制结构:顺序结构、选择结构和循环结构。所有程序都由这三种基本控制结构组成。顺序结构是程序流程中最简单的控制结构,如果编写较为复杂的程序需要使用选择结构和循环结构语句来对程序进行流程控制。顺序结构 顺序结构就是按照程序代码编写
13、的顺序依次执行。顺序结构主要介绍赋值语句和输入输出语句。,9.4 VBA流程控制语句,2023/1/17,1、赋值语句 赋值语句可以将常量或常量表达式的值赋给变量或对象的属性,一般格式为:=或.=(1)应符合变量的命名规则,缺少时为当前窗体或报表。(2)首先计算“=”(赋值运算符)右边表达式的值,将此值赋给“=”左边的变量或对象属性。,2023/1/17,2Print方法 在VBA中可以使用Print方法在窗体、立即窗口及打印机上输出文本数据或表达式的值。一般格式为:对象名.Print 表达式3InputBox函数 InputBox函数可以产生一个输入对话框,等待用户输入数据并返回所输入的内容
14、。一般格式为:InputBox(提示字符串,对话框标题字符串,默认输入数据),2023/1/17,4MsgBox函数和MsgBox语句 MsgBox函数或语句可以产生一个消息框,消息框中给出提示信息,用户可以根据提示信息选择后面的操作。函数格式为:MsgBox(消息字符串,按钮与图标样式,对话框标题字符串)语句格式为:MsgBox 消息字符串,按钮与图标样式,对话框标题字符串两种格式的区别是,MsgBox函数会产生一个返回值,用户需要将返回值赋给一个变量。MsgBox语句无返回值,仅是单纯的信息显示。,2023/1/17,例94创建Area过程,其功能是,计算圆的面积,半径值从键盘随机输入。操
15、作步骤:进入Access 数据库中的模块,新建模块进入VBA的编辑器。选择“插入”|“过程”,输入过程名。确定后,输入过程代码。选择“运行”|“运行子过程/用户窗体”命令,弹出输入对话框输入任意半径值后,单击“确定”按钮,弹出消息框显示面积值。,2023/1/17,例95创建一个圆的面积的窗体,通过在文本框中输入的半径值,点击计算按钮得到计算结果。操作步骤:进入Access 数据库中的窗体,添加标签、文本框和命令按钮,新建命令按钮的单击事件代码,进入VBA的编辑器,输入代码。选择“运行窗体”命令,输入任意半径值后,单击“计算”按钮,弹出消息框显示面积值。,2023/1/17,选择结构又称为分支
16、结构,根据条件表达式的值执行相应的操作。选择结构可分为单分支选择结构、双分支选择结构和多分支选择结构。1单分支If语句 格式:If Then End If说明:计算条件表达式的值,若值为“真”(Ture)则执行Then后面的语句,若值为“假”(False)则退出If语句继续执行下面的程序。,9.4.2 选择结构,2023/1/17,例96创建一个求绝对值的过程,其功能是,通过输入一个整数,输入这个数的绝对值。操作步骤:进入Access 数据库中的模块,新建模块进入VBA的编辑器。选择“插入”|“过程”,输入过程名,这里输入绝对值。确定后,输入过程代码。选择“运行”|“运行子过程/用户窗体”命令
17、,弹出输入对话框,输入任意值后,单击“确定”按钮,弹出消息框显示其绝对值。,2023/1/17,2双分支If语句 格式:If Then Else End If说明:计算条件表达式的值,若值为“真”(True)则执行语句1,否则执行语句2。,2023/1/17,例97创建一个判断奇偶数的窗体,其功能是,通过输入一个非零的整数,判断是奇数还是偶数。操作步骤:进入Access 数据库中的窗体,添加标签、文本框和命令按钮,新建命令按钮的单击事件代码,进入VBA的编辑器,输入代码。选择“运行窗体”命令,弹出窗体,输入任意非零的值后,单击“判断奇偶”按钮,弹出消息框显示。,2023/1/17,3多分支If
18、语句 格式:If Then Else If Then Else If Then Else End If说明:计算条件表达式1的值,若值为“真”(True)则执行语句1,否则计算条件表达式2的值,若值为“真”(True)则执行语句2,重复上述操作。当全部条件表达式的值都不为“真”(True)则执行语句n+1。,2023/1/17,例98 创建一个名为Grade的过程,其功能是,判断输入的分数等级(优秀、良好、中等、及格、不及格共5个等级)。操作步骤:创建过程的方法如上面的例子所示。选择“运行过程”命令。,2023/1/17,4多分支Select Case语句 格式:Select Case Cas
19、e Case Case Case Else End Select说明:Select Case语句在执行时,先计算测试变量或表达式的值,然后寻找该值与哪一个Case子句的表达式值匹配,找到后则执行该Case语句,之后退出Select结构;如果测试变量或表达式的值与全部Case子句的表达式值不匹配,则执行Case Else语句,之后退出Select结构。,2023/1/17,例99创建一个判断将英文星期转换成中文星期的窗体,通过在文本框中输入一个英文的星期,单击转换按钮,显示中文星期。操作步骤:进入Access 数据库中的窗体,添加标签、文本框和命令按钮。在“转换为中文”的命令按钮中写单击事件代码
20、。选择“运行窗体”命令,弹出窗体输入任意星期的英文后或随便输入一个单词,单击“转换为中文”按钮。,2023/1/17,在实际使用中,有些循环的次数可以事先确定,而有些循环不能确定。VBA中有三种形式的循环语句;For循环、While循环和Do循环。其中For循环多用于已知循环次数的情况下,While循环和Do循环多用于不确定循环资料的情况下。下面重点介绍For循环语句和Do循环语句。,9.4.3 循环结构,2023/1/17,1For循环语句 格式:For To step 步长 Next 循环变量说明:For循环的执行过程:首先把初值赋给循环变量,接着判断循环变量的值是否超过终值,如果超过就不
21、执行循环体,直接跳出For循环,执行Next后面的语句;否则执行循环体,之后将循环体变量增加步长值后再赋给循环变量,继续判断循环变量的值是否超过终值,重复上述步骤直到For循环正常结束。,2023/1/17,说明:循环变量必须为数值型。循环的初值、终值和步长都是数值表达式。其中,增量参数可正可负。如果没有设置step,则增量默认为1。Next是循环终端语句,在Next后面的循环变量与For中的循环变量必须相同。当只有单层循环(没有嵌套)时,Next后面的循环变量可以省略。当初值等于终值时,不管步长是正数还是负数,都执行一次循环体。循环次数由初值、终值和步长决定,计算公式为:循环次数=Int((
22、终值-初值)/步长+1)除了For语句以计数值来判断循环是否结束之外,还可以用Exit For语句强制结束循环。通过Exit For语句和If语句配合使用,代表在某种特定情况下,循环中的程序不再继续执行。,2023/1/17,例910 创建一个名为sum的过程,其功能是:计算100以内的奇数和。操作步骤:创建过程的方法如上面的例子所示。选择“运行过程”命令。,2023/1/17,例911创建一个求奇数和,偶数和的窗体,其功能是:通过输入一个起始数和一个终止数,分别求出这二个数之间的奇数之和,偶数之和。操作步骤:进入Access 数据库中的窗体,添加标签、文本框和命令按钮。新建奇数、偶数和命令按
23、钮的单击事件代码,进入VBA的编辑器,输入代码。选择“运行窗体”命令。,2023/1/17,例912 创建一个名为水仙花数的过程,其功能是:统计水仙花数的个数。(水仙花数是:一个三位数,并且这个数中各位数字的立方和等于这个数本身)操作步骤:创建过程的方法如上面的例子所示。,2023/1/17,例913 创建一个名为求最大值最小值的过程,其功能是:从键盘输入10个随机值,用数组变量存放,找出其中最大值和最小值。操作步骤:创建过程的方法如上面的例子所示。选择“运行过程”命令,弹出窗口要求输入数据,输入十次后会显示最大值和最小值。,2023/1/17,2Do循环语句 DoLoop循环用于事先不知道循
24、环次数的循环结构。此循环语句共有4种语法格式:Do WhileLoop语句、DoLoop While语句、Do UntilLoop语句和DoLoop Until语句。前两种格式当循环条件为真时执行循环体语句,后两种当循环条件为假时执行循环体语句。(1)Do While|UntilLoop语句 格式:Do While|Until Exit Do Loop说明:条件表达式的值应是逻辑型。Do While和Loop应成对出现。循环体中要有控制循环次数的语句,以避免出现死循环。由于该循环的特点是先判断条件,然后再决定是否要执行循环体中的语句。所以,这种循环,可以一次也不执行循环体。Exit Do表示当
25、遇到该语句时,强制退出循环,执行Loop后的下一条语句。,2023/1/17,(2)DoWhile|Until Loop语句 格式:Do Exit Do Loop While|Until说明:至少要执行循环体一次。与Do While循环的区别:Do While循环先测试条件是否成立,只有成立才执行循环体;而该循环先执行循环体,后测试条件是否成立,所以一定会执行一次循环体。,2023/1/17,例914 创建一个名为factorial的过程,其功能是:求输入任意一个数的阶乘。操作步骤:创建过程的方法如上面的例子所示。选择“运行过程”命令,弹出窗口输入任一正整数,得到结果。,2023/1/17,A
26、ccess事件是指操作Access的某个对象时发生的特定情况,事件程序是指当发生某一事件时所执行的程序。充分发挥Access的事件处理能力,可以设计出更为完美的管理系统。,9.4.4 常用事件程序的设计,2023/1/17,例914 创建如图所示的对话框。该窗体检测用户输入的用户名和口令。“确认”按钮在初始时是不可用的,当用户名和口令文本框中都输入至少一个字符时,“确认”按钮可用。如果输入的用户名和口令都正确,单击“确认”,显示“欢迎进入系统”;否则,如果输入的密码或用户名有误时,要求重新输入。窗体右上角有一个计时器,每秒钟显示一次,当满一分钟时,显示“超时”并退出。,2023/1/17,在Access系统中,根据需要可以将设计好的宏对象转换为模块代码形式。将宏转换为Visual Basic代码 将窗体或报表中的宏转换为Visual Basic代码 将宏转换为模块 在VBA过程中实现宏操作,9.4.5 宏与VBA,2023/1/17,本章小结,VBA编程部分是Access数据库的高级应用,也是重点和难点。在本章中,着重介绍了VBA的基础知识、变量、表达式的意义及定义、VBA的流程控制语句等。并通过一系列具体实例介绍了VBA代码在Access数据库其他对象中的应用以及与宏的互相转换。,2023/1/17,谢谢!,