《第7章模块与VBA编程》由会员分享,可在线阅读,更多相关《第7章模块与VBA编程(50页珍藏版)》请在金锄头文库上搜索。
1、AccessAccess数据库数据库应用技术应用技术授课教师:授课教师:联系电话:联系电话:第第7章章 模块与模块与VBA编程编程 7.1 模块的基本概念模块的基本概念 7.2 创建模块创建模块 7.3 VBA编程基础编程基础 7.4 VBA的流程控制的流程控制 7.5 过程调用和参数传递过程调用和参数传递 7.6 VBA代码调试与运行代码调试与运行 7.7 VBA编程综合实例编程综合实例 第第7章章 模块与模块与VBA编程编程 1. 模块的基本概念模块的基本概念【1】类模块;】类模块;【2】标准模块】标准模块【3】将宏转换为模块】将宏转换为模块2. 创建模块创建模块【1】创建创建VBA模块:
2、在模模块:在模块中加入过程,在模块中执块中加入过程,在模块中执行宏。行宏。【2】编写事件过程:键盘编写事件过程:键盘事件,鼠标事件,窗口事件,事件,鼠标事件,窗口事件,操作事件和其他事件。操作事件和其他事件。3.调用和参数传递调用和参数传递4.VBA程序设计基础:程序设计基础:【1】面向对象程序设计的基】面向对象程序设计的基本概念本概念【2】VBA编程环境:进入编程环境:进入VBE,VBE界面界面【3】VBA编程基础:常量,编程基础:常量,变量,表达式变量,表达式【4】VBA程序流程控制:程序流程控制:顺序控制,选择控制,循顺序控制,选择控制,循环控制环控制【5】VBA程序的调试:设程序的调试
3、:设置断点,单步跟踪,设置置断点,单步跟踪,设置监视点监视点教学重点7.1 模块的基本概念模块是Access系统中的一个重要对象,它以VBA(Visual Basic for Applications)为基础编写,以函数过程(Function)或子过程(Sub)为单元的集合方式存储。Access中,模块分为类模块和标准模块两种类型。 7.1.1 类模块 窗体模块和报表模块都属于类模块,它们从属于各自的窗体或报表。窗体模块和报表模块通常都含有事件过程,而过程的运行用于响应窗体或报表上的事件。 窗体模块和报表模块具有局部特征,其作用范围局限在所属窗体或报表内部 ,而生命周期则是伴随着窗体或报表的打
4、开而开始,关闭而结束。 7.1.2 标准模块 标准模块一般用于存放供其他Access数据库对象使用的公共过程 ,通常安排一些公共变量或过程供类模块里的过程调用.标准模块中的公共变量和公共过程具有全局特性,其作用范围在整个应用程序里,生命周期是伴随着应用程序的运行而开始,关闭而结束。在Access系统中,根据需要可以将设计好的宏对象转换为模块代码形式。2. 一般用于存放其他Access数据库对象使用的公共过程称为( )。A.类模块 B. 标准模块 C. 宏模块 D. 窗体模块7.2 创建模块 过程的概念:过程是模块的单元组成,由VBA代码编写而成。过程分两种类型:Sub子过程和Function函
5、数过程。 7.2.1 在模块中加入过程 模块是装着VBA代码的容器,一个模块包含一个声明区域,且可以包含一个或多个子过程(以Sub开头)或函数过程(以Function开头)。 子过程的定义 :子过程是一系列由 Sub 和 End Sub 语句所包含起来的VBA语句,只执行一个或多个操作,而不返回数值。 定义格式如下:Sub 子过程名程序代码End Sub其命名与变量命名规则相同子过程开始子过程结束完成某个功能的子过程体 内部不能再定义其他过程 ,但可用Call命令调用其他过程“SubSub子过程名子过程名”和和“End SubEnd Sub” 必不可少必不可少函数过程的定义 :函数过程通常情况
6、下称为函数,是一系列由 Function 和 End Function 语句所包含起来的 VBA语句。Function 过程和 Sub 过程很类似,但函数过程可以通过函数名返回一个值。定义格式如下:Function 函数过程名 As 返回值类型程序代码End Function 函数开始函数结束函数体内不允许定义其他的函数过程和子过程,可直接引用函数过程名,并由接在函数过程名后的括号所辨别 20. 在VBA中有返回值的处理过程是( )A.声明过程 B. Sub过程 C. Function 过程 D. 控制过程创建过程:子过程或函数过程既可以在标准模块中建立,也可以在窗体模块中建立。方法:在VBE
7、中执行“插入过程”菜单命令7.2.2 在模块中执行宏 在模块的过程定义中,使用Docmd对象的RunMacro方法,可以执行设计好的宏。其调用格式为:Docmd.RunMacro MacroName ,RepeatCount ,RepeatExpression其中,MacroName表示当前数据库中宏的有效名称;RepeatCount可选项,用于计算宏运行次数的整数值;RepeatExpression可选项,数值表达式,在每一次运行宏时进行计算,结果为False时,停止运行宏。 7.3 VBA编程基础 VBA(Visual Basic for Application)是Microsoft Of
8、fice内置的编程语言,是根据VB简化的宏语言。计算机的程序设计语言有很多,如Fortran, Cobol, Basic, Pascal, C, C+, Java, Delphi等,它们各有特点和不及适用领域。其中,Basic最初是专门针对初学者而设计的程序开发语言,因其问世后广泛被使用,再加上Windows的流行,微软公司开发了VisualBaisc作为Windows环境下的应用程序开发工具。VBA是根据Visual Basic的简化宏语言,其基本语法、词法与Visual Basic基本相同,简单易学,采用的是一种面向对象的程序设计方法。与Visual Basic不同的是,VBA不是一个独立
9、的开发工具,一般被嵌入到像Word, Excel, Access这样的宿主软件中,与其配套使用,从而实现程序开发功能。7.3.1 面向对象程序设计基本概念 对象和类 对象是现实世界中个体或事物的抽象表示,是由描述事物状态的有关数据和对这些数据可以进行的相关操作共同组成的。每一个对象有自己的属性、方法和事件,用户就是通过属性、方法和事件来处理对象的。 类是对象的抽象,而对象是类的具体实例,每个对象由类来定义。 DoCmd对象 :DoCmd对象的主要功能是通过调用Access内置的方法,在VBA中实现某些特定的操作 。事件过程对象在识别了所发和的事件后执行的代码叫事件过程。因此想要让系统响应某个事
10、件,就要将响应事件所要执行的程序代码添加入相应的事件过程。7. 能被“对象所识别的动作”和“对象可执行”的活动分别称为对象的( )。A.方法和事件 B. 事件和方法 C. 事件和属性 D. 过程和方法19. 在Access中编写事件过程使用的编程语言是()A. QBASIC B. VBA C. SQL D. C+7.3.2 VBA的编程环境 VBE17. VBA代码调试过程中,能够显示出所有在当前过程中变量声明及变量值信息的是( )。A. 本地窗口 B. 立即窗口 C. 监视窗口 D. 快速监视窗口启动VBE的常用三种方法直接进入创建模块进入通过对象进入VBE环境中编写VBA代码例7.1 新建
11、一个窗体并在其上放置一个命令按钮,然后创建该命令按钮的“单击”事件响应过程。单击后弹出“测试完毕”消息。7.3.3 基本数据类型 字符型(String,) 、字节型(Byte ) 、整型 (Integer,%)、长整型 (Long,&)、单精度型(Single,!) 、双精度(Double,#)小数型 (Decimal ) 、货币(Currency,)逻辑(Boolean ) 、日期型 (Date ) 、对象型 (Object ) 、变体型(Variant) 4. 布尔型数据转换为其他类型数据时,False转换为( )。A.0 B. 1 C. -1 D. 25. 连接式“3+4”&“=”&(3
12、+4)的运算结果为( )。A.3+4 B. &3+4 C.(3+4) & D. 3+4=77.3.4 常量、变量、数组什么是定义:常量、变量?常量或变量的命名规则 :(1)常量或变量的名字须以字母或汉字开头,后跟字母、汉字、数字或下划线组成的序列,长度不能超过255个字符;(2)不能使用VBA中的关键字命名常量或变量;(3)VBA不区分常量或变量名中的大小写字母,如XYZ,xyz,Xyz等均视为相同名字。 下列变量命名正确的是:AX33sbow-y ifbook_1 s*T常量:在程序运行的过程中其值不会发生变化 VBA支持4 种类型的常量:直接常量、符号常量、固有常量和系统定义常量。 变量:
13、在程序运行的过程中其值是可以发生变化变量定义:Dim AS显示声明变量隐式声明变量变量的应用范围局部范围模块范围全局范围 变量的生存周期: 变量第一次(声明时)出现到消失时所持续的时间 . 数组: 是一个由相同数据类型的变量构成的集合,数组在使用之前应该加以声明,说明数据元素的类型、数组大小、数组的作用范围。固定大小数组的声明:Dim 数组名(下标下界 To 下标上界)As 数据类型,如Dim Array(7) As Integer , Static Array(19, 19) As Integer 动态数组的声明 :A)先声明空数组及数据类型,如Dim Array( ) As Integer
14、 B)在使用数组前再声明数组大小,如ReDim Array(10) 10. 定义了二维数组 A(3 to 5,6),则该数组的元素个数为( )。A.17 B. 27 C. 21 D. 307.3.5 运算符与表达式 VBA编程语言提供了多种类型的运算符完成对数据的各种运算和处理,主要包括4种类型的运算符: 1. 算术运算符及算术表达式2. 连接运算符与字符串表达式3. 关系运算符与关系运动表达式4. 逻辑运算符与逻辑表达式9. 下列逻辑表达式中,能正确表示条件“X和Y至少有一个是偶数”的是( )。A.X Mod 2=0 Or Y Mod 2=0 B. X Mod 2=1 Or Y Mod 2=
15、1C. X Mod 2=0 And Y Mod 2=0 D. X Mod 2=1 And Y Mod 2=114. 以下可以得到2+6=7的结果的VBA表达式是( )。A.2+6 & = & 2+6 B. 2+6+= +2+6C. 2+6 & = & 2+6 D. 2+6+= +2+6表达式的运算顺序 表达式的运算顺序由高到低为:函数运算、算术运算、关系运算、逻辑运算。 优先级高的运算先进行,优先级相同的运算依照从左向右的顺序进行 优先级高 低高低算数运算符连接运算符比较运算符逻辑运算符指数运算()字符串连接(&)相等(=)Not负数(-)字符串连接(+) 不等()And乘法和除法(*、/)小
16、于()求模运算(Mod)小于等于(=)1. 在VBA 语言中,以下关于运算优先级比较,叙述正确的是( )。A. 算术运算符 关系运算符 连接运算符 逻辑运算符B. 算术运算符 连接运算符 关系运算符 逻辑运算符C. 关系运算符 算术运算符 连接运算符 逻辑运算符D. 关系运算符 连接运算符 算术运算符 逻辑运算符7.3.6 常用标准函数 VBA提供了大量几个内部标准函数,可方便地完成许多操作。使用形式:函数名(参数1,参数2,参数3,)其中函数名必不可少,函数的参数放在函数后面的圆括号中,参数可以是常量、变量或表达式。VBA的内部函数大体可分为:转换函数、数学函数、字符串函数、时间/日期函数和
17、随机函数。15. 用于获得字符串str从第2个字符开始的3个字符的函数是( )。A. Mid(str,2,3) B. Middle(str,2,2)C. Right(str,2,3) D. Left(str,2,3)例7.2 利用随机函数,设计一个“猜数字”游戏,如图7.13所示,用户从键盘输入16之间的任意数字,看是否和电脑随机出现的数字相同。7.3.7 输入输出函数和过程 VBA与用户之间的直接交互是通过InputBox()函数、MsgBox()函数和MsgBox过程进行的。1. InputBox(prompt,title,default,xpos,ypos) 函数InputBox()产生
18、一个作为输入数据界面的对话框,等待用户输入数据或按下按钮,并返回所输入的内容,返回值是String类型的。注意:每执行一次InputBox()只能输入一个数据2.MsgBox(msg,type,title) 函数MsgBox()函数可以向用户传送信息,并可通过用户在对话框上的选择,接收用户所作的响应,返回一个整型值,以决定其后的操作。 MsgBox Msg,type,title过程MsgBox语句没有返回值,因此常被用于简单的信息显示 . 11. 以下程序段运行后,消息框的输出结果是( )。a=Sqr(5)b=Sqr(4)c=abMsgBox c+2A. -1 B. 1 C. 2 D. 出错7
19、.4 VBA的流程控制 VBA程序是由大量语句构成,一个语句是能够完成某项操作的一条命令。VBA程序语句按其功能不同分为2类:一是声明语句,用于变量、常量、过程定义二是执行语句,用于执行赋值操作、调用过程、实现各种流程控制l执行语句又分为3种:顺序结构、分支结构、循环结构6. 根据条件选择执行路径,又可称选择结构的执行语句是( )。A.顺序结构 B. 条件结构 C. 循环结构 D. 层次结构7.4.1 顺序控制 1. VBA语句书写规则 VBA源代码不区分字母的大小写 语句书写自由同一行上可以写多个语句,语句间用冒号“:”分隔;一个语句可分为若干行书写,但须在行后加续行标志(空格加下划线“_”
20、)。 2. VBA的基本语句 v赋值语句格式:目标操作符目标操作符= =源操作符源操作符v注释语句注释语句 以关键字以关键字RemRem开头引导的注释内容,可添加到程序开头引导的注释内容,可添加到程序任意位置。任意位置。 以以 引导的注释内容,可直接出现在语句后面。引导的注释内容,可直接出现在语句后面。v结束语句格式:End当在程序中执行当在程序中执行End语句时,将终止当前程序,重语句时,将终止当前程序,重置所有变量,并关闭所有数据文件置所有变量,并关闭所有数据文件Private Sub Area() Rem 定义长、宽两个变量 Dim length As Single 长方形的长 Dim
21、height As Single 长方形的宽 Rem 通过输入框输入长与宽,并将值变成数值型 length = Val(InputBox(请输入长方形的长) height = Val(InputBox(请输入长方形的宽) a = length * height 计算面积 MsgBox Str(a), vbDefaultButton1, 面积End Sub7.4.2 条件语句 1. 单行结构条件v格式:If Thenelse &解释:如果成立,则执行,否则执行若没有否则,则else 可省略。2. 块结构条件格式:If Then ElseIf Then ElseIf Then Else End I
22、f比如:判断考试成绩比如:判断考试成绩(score)如果如果0score60,则显示则显示“不及格不及格”如果如果60=score70,则则显示显示“及格及格”如果如果70=score70,则则显示显示“中等中等”如果如果70=score90,则则显示显示“良好良好”如果如果90=score=100,则则显示显示“优秀优秀”3. 多分支结构格式:Select Case Case Case Case Else End Select通常是变量或常量,可以是数值或字符串表达式可称为“测试表达式”的值域4. IIf函数和Choose函数vIIf( 条件,True部分 ,False部分)&当条件为真时,
23、返回True部分的值;当条 件为假时,返回False部分的值。 条件是逻辑表达式或关系表达式。如: y=IIf( x=0,0,1/x)Choose( 变量,值为1的返回值,值为2的返回值,值为n的返回值)7. 用于实现多路分支的是( )。A.Select语句 B. If语句 C. Switch 语句 D. If Else 语句程序设计:例7.3 给出a,b,c的值,问它们能否构成三角形的3边。如能构成三角形,计算出此三角形的面积。7.4.3 循环结构1. for next格式: For =to step Exit ForNext &循环变量必须为数值类型&循环次数= Int(终值-初值)/步长
24、)+1例:求自然数n的阶乘.16. 假定有以下程序段n=0For a=1 to 5For b=2 to 10 Step 2n=n+1Next bNext a运行完毕后,n的值是( )。A. 0 B. 1 C. 10 D. 2517. 假定有以下程序段n=0For i=1 to 3For j=-4 to -1n=n+1Next jNext i运行完毕后,n的值是( )。A. 0 B. 3 C. 4 D. 122. While Wend 格式While 条件 循环体Wend说明:如果条件为真,则执行循环体.若条件一直为真则构成死循环.例:求100以内自然数的和.3.Do Loop格式vDo Whi
25、le | Until Exit Do LoopvDo Exit Do Loop While | Until 例例7.6 用Do Loop先判断条件,求100以内自然数的和。12. 假定有以下循环结构:Do Until 条件循环体Loop则正确的叙述是( )A. 如果“条件”值为0,则一次循环体也不执行B. 如果“条件”值为0,则至少执行一次循环体C. 如果“条件”值不为0,则至少执行一次循环体D. 不论“条件”是否为“真”,至少要执行一次循环体7.5.1 过程调用1.过程调用格式:函数过程名( 实参列表 )Call 子过程名 ( ) or子过程名7.5.2 参数传递 u按地址传递(ByRef)
26、形参与实参指向同一个内存单元.即如果在被调用过程中改变了该变量值,其变化就会反映到调用过程中的那个变量.u按值传递(ByVal)被调用过程获得该变量的独立副本.即如果改变被调用过程中该变量的值不会影响调用过程中该变量原来的值.13. 已定义好有参数f(n),其中形参n是整型量,下面调用该函数,传递实参为5,将返回的函数值赋给变量s。以下正确的是( )。A.s=f(5) B. s=f(n) C. s=Call f(5) D. s=Call f(n)例例7.7 创建有参过程Test(),通过主调过程C1_Click()被调用,观察实参值的变化。7.6.1 程序的运行错误处理 导致应用程序中出错的两
27、个原因: 在运行应用程序时某个条件可能会使原本正确的代码产生错误。例如,如果代码尝试打开一个不存在的数据表,就会出错。 代码可能包含不正确的逻辑,导致不能运行所需的操作。例如,如果在代码中试图将数值被0除,就会出现错误。7.6.2 程序的调试 调试的重要内容是检查代码的正确性及代码的不同运行环境。VBA可使用的各种调试工具:调试的主要方法:u设置断点u单步跟踪7.7 VBA编程综合实例 例例7.9 用VBA编程的方式,设计一个用户登录窗体如图7.25所示,输入用户名和密码,如用户名或密码为空,则给出提示,重新输入;如用户名或密码不正确,则给出错误提示,结束程序运行;如正确,则显示“欢迎使用!”信息。 例例7.10 设计信封打印系统,该系统能够通过界面选择需要打印信封的教师,并通过“教师通讯地址”标签报表输出,在信封上打印出来,并可设置页码范围进行批量打印(假设选取的信封长为13cm,宽为5cm)。 运行结果显示 “信封打印系统”窗体