1 / 77

Access2010 数据库基础与应用

Access2010 数据库基础与应用. 第 7 章 模块与 VBA 本章要点 : 模块的概念与基本操作 VBA 的基础知识 VBA 程序设计中的流程控制方法. 7.1 模块. 第 7 章 模块与 VBA. 7.1.1 模块的概念 模块 是 Access 数据库中一个重要的对象,用 VBA 语言编写,以函数过程( Function )和子过程为单元的集合方式存储。 模块 可分为两种基本类型:标准模块和类模块。 标准模块 放置的 是可供数据库其他对象使用的公共过程,它通常由变量的通用声明部分和若干个过程组成。每一个模块有唯一的名称。

myra-snyder
Download Presentation

Access2010 数据库基础与应用

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. Access2010数据库基础与应用 第7章 模块与VBA 本章要点: 模块的概念与基本操作 VBA的基础知识 VBA程序设计中的流程控制方法

  2. 7.1 模块 第7章 模块与VBA 7.1.1 模块的概念 模块是Access数据库中一个重要的对象,用VBA语言编写,以函数过程(Function)和子过程为单元的集合方式存储。 模块可分为两种基本类型:标准模块和类模块。 标准模块 放置的是可供数据库其他对象使用的公共过程,它通常由变量的通用声明部分和若干个过程组成。每一个模块有唯一的名称。 类模块:有窗体模块、报表模块,它们从属于各大自的窗体或报表。还有自定义的类模块。

  3. 第7章 模块与VBA 窗体与报表模块数据库的每一个窗体和报表都有内置的窗体模块和报表模块,这些模块中包括事件过程模板,可以向其中添加程序代码,使得当窗体、报表或其上的控件发生相应的事件时,运行这些程序代码。 自定义类模块不与窗体和报表相关联,允许用户自定义所需的对象、属性和方法。

  4. 第7章 模块与VBA 7.1.2 模块的创建 1.标准模块的创建 标准模块的创建步骤如下: (1) 创建标准模块,进入标准模块的编辑窗口 在“数据库”窗口中,选择“创建”选项卡,然后单击“宏与代码”组中的“模块”按钮,即可进入标准模块的编辑窗口并创建新的标准模块。 (2) 在标准模块中加入过程 两种方法: ①直接输入Sub 过程名或Function 过程 ②单击“插入”|“过程”菜单命令 (3)保存模块

  5. 第7章 模块与VBA Sub 过程 定义格式如下: Sub 过程名 [程序代码] End Sub 函数过程 定义格式如下: Function 函数名 [程序代码] End Function

  6. 第7章 模块与VBA 7.1.2 模块的创建 2.窗体、报表模块的创建 进入窗体或报表模块的代码编辑窗口 使用属性表事件生成器窗口进入 使用快捷键进入 创建事件过程 保存窗体或报表 3. 自定义类模块的创建 在“数据库”窗口中,选择“创建”选项卡,然后单击“宏与代码”组中的“类模块”按钮,即可进入类的编辑窗口,输入自定义类的代码并保存。

  7. 第7章 模块与VBA 7.1.3 将宏转换为模块 1. 将窗体或报表中使用的宏转换为事件过程 用设计视图打开窗体,单击“窗体设计工具”的“设计”选项卡的“工具”组中“将窗体的宏转换为Visual Basic代码”按钮 单击“转换”按钮,开始转换,当屏幕显示“转换完毕”对话框时,单击“确定”按钮完成转换。 报表中使用的宏转换同窗体中使用的宏转换类似

  8. 第7章 模块与VBA 7.1.3 将宏转换为模块 将窗体或报表中使用的宏转换为事件过程 (1) 在数据库窗口的导航窗格的“宏”类别中选中所需转换的宏。 (2) 单击“文件”选项卡中“对象另存为”命令 (3) 在“另存为”对话框中,“保存类型”选模块,单击“确定”按钮。 (4) 单击转换按钮 (5) 当弹出“转换完毕”对话框时,单击“确定”按钮完成转换。

  9. 7.2VBA程序设计基础 7.2.1 Visual Basic编辑环境 Visual Basic编辑器简称为VBE( Visual Basic Editor的缩写),是Access提供的VBA的开发环境,模块的编辑工作需要在VBE窗口中完成。VBE提供了完整的开发和调试工具。 VBE窗口主要由菜单栏、标准工具栏、工程窗口、属性窗口、代码窗口、立即窗口等组成,如图7-5所示。

  10. 7.2VBA程序设计基础 (1)工具栏 (2)工程窗口 工程窗口列出了在应用程序中用到的模块。使用该窗口,可以在数据库内各个对象之间快速地浏览。 (3)属性窗口 属性窗口列出了所选对象的各种属性。 (4)代码窗口 在代码窗口中可以输入和编辑VBA代码。 在代码窗口的顶部是两个组合框,左边是对象组合框,列出了所有可用的对象名称,右边是事件组合框,列出该对象所有的事件。 (5)立即窗口 常用于程序在调试期间输出中间结果、在中断模式下测试表达式的值等,也可以直接输入VBA命令并按Enter键后,VBA会实时解释并执行该命令。例如,在立即窗口利用“?”或Print或Debug.Print输出表达式的值。

  11. 7.2.2VBA的数据类型 1.标准数据类型 。

  12. 7.2.2VBA的数据类型 2.用户自定义数据类型 用户定义的数据类型需要使用Type……End Type语句来定义,定义格式如下: Type [数据类型名] <域名> As <数据类型> <域名> As <数据类型> …… End Type 例7-1 定义一个学生信息数据类型StudentType。 Type StudentType strName As String ' 姓名,变长字符串存储 strSex As String*1 ' 性别,1位定长字符串存储 IntAge As Integer ' 年龄,整型变量存储 End Type 例7-2 定义和使用StudentType数据类型的变量。 Dim NewStud As StudentType NewStud. strName= "王微" NewStud. strSex= "女" NewStud. IntAge=20

  13. 7.2.3 VBA中的常量、变量、运算符和表达式 1.常量 (1)直接常量 直接常量就是直接表示的具体数、日期、字符串、布尔常量等等,不同类型的常量有不同的表示方法。 ①数值型常量:十进制整数由数字0~9和正、负号组成,实数可采用小数表示形式或科学记数表示形式。科学计数法用E表示10的乘幂。 ② 字符串常量:用双引号括起来的字符序列。在字符串中,字母的大小写是有区别的。 ③ 布尔常量:有True和False两个值。 ④ 日期常量:以字面上可被认作日期和时间的字符并用一对“#”括起来表示。如#2013-03-01#,#05/23/2013#

  14. 常量 (2)符号常量 用有意义符号代替常量,这就是符号常量。符号常量需要先声明后使用。声明符号常量的语法格式如下: Const 常量名 [As 类型|类型符]=表达式 例如: Const MyVar=488 Const MyString$="VBA" Const MyStr$="Help",MyPi As Double =3.14159 用户一旦定义了符号常量,在以后的程序中不能用赋值语句来改变它们的值,否则,在运行程序时将出现错误。 (3) 系统常量 系统常量是VBA预先定义好的常量,用户可以直接使用。例如,VBA用vbKeyReturn来表示Enter键。可以在“对象浏览器”窗口中查看各种系统常量。

  15. 变量 2.变量 (1)变量的命名规则 为变量命名时,应遵循以下规则: 变量名必须以字母或汉字开头; 变量名中不能包含空格和除了下划线字符“_”以外的任何其他标点符号; 变量名长度不超过255个字符; 变量名不区别大小写,如StuID、stuid、stuID表示同一个变量; 变量名不能使用系统保留字作为变量名,如Sub、Rem、Function等。

  16. 变量 (2)变量的声明 ①显示声明 声明变量要使用Dim语句,Dim语句的格式为: Dim 变量名 [As 数据类型|类型符] [,变量名As 数据类型|类型符] …] 例如:Dim Var_1 As Integer Dim Var_2% ,Sum! 对于字符型变量,分为定长和变长字符串两种。 例:Dim x As String ,y As String*10 ②隐含声明 在程序中并没有明确声明变量,而是直接将一个值指给变量名,或Dim声明中省略了As数据类型,同时也没有附加类型符来指明变量的数据类型,这时变量的数据类型为变体类型(Variant)。 例如:Dim m ,n NewVar=528

  17. 变量 ③强制声明 方法一: 在VBE代码窗口的顶部“通用—声明”区域中,加入Option Explicit语句,要求本模块的所有变量必须先声明后使用。 方法二: 单击VBE窗口中“工具”|“选项”菜单命令,在弹击的“选项”对话框中,选中“要求变量声明”选项,可以为所有新模块都启用强制变量声明功能。

  18. 变量 (3) 变量的作用域 ①局部变量 局部变量是指在过程内部定义的变量,在子过程和函数过程中使用Dim语句声明或直接使用的变量都是局部变量,作用范围是其所在过程,在其他过程中无效。 ②模块变量 模块变量定义在模块的所有过程的上面,运行时在模块所包含的所有子过程和函数过程都可以使用该变量。模块变量可用Dim语句或Private语句声明。 ③全局变量 全局变量定义在标准模块所有过程的上面,运行时在所有类模块和标准模块的所有子过程与函数过程中均可使用。全局变量需用Public语句来定义,不能用Dim或Private语句来定义。

  19. 变量 (4) 变量的生命期 变量存在的时间称变量的持续时间或生命周期,变量定义方法不同,变量的生命周期也不同。 局部变量的生命周期从变量的定义语句所在的过程第一次运行,到程序代码执行完毕并将控制权交回到调用的它的过程为止的时间。 模块级变量的持续时间是整个模块的执行的时间。 全局变量的持续时间是整个应用程序的执行期间。 按照变量的生命期,可以将局部变量分为动态局部变量和静态局部变量。 ①动态局部变量:以Dim语句定义的局部变量,每次子过程或函数过程被调用时,该变量会被设定为默认值。 ②静态的局部变量:用Static定义的局部变量。整个模块的执行的期间,静态局部变量可以保留它的值。

  20. 变量 (5)数据库对象变量 Access数据库中各种对象及其属性,都可以作为VBA程序代码中的变量及其指定的值来加以引用。 Access中窗体对象的引用格式为: Forms!窗体名称!控件名称[.属性名称] Access中报表对象的引用格式为: Reports!窗体名称!控件名称[.属性名称] 例7-3 学生管理窗体中“学号”文本框的引用。 Forms!学生管理!学号= "1123120304" 或 Forms!学生管理![学号]= "1123120304"

  21. 变量 (6)数组变量 数组变量声明一般格式为: Dim 数组名([下标1下界 To] 下标1上界[, [下标2下界 To] 下标2上界]…) As 数据类型 下标下界的默认值为0,在使用数组时,可以在模块的通用声明部分使“Option Base 1”语句来指定数组下标下界从1开始。 数组可以分固定大小数组和动态数组两种类型。固定大小的数组即数组的元素个数是固定的。动态数组中的数组元素个数是可以被改变的。 ①声明固定大小的数组 Dim IntAgeArray(10, 10) As Integer ②声明动态数组 Dim IntArray() As Integer ’ 定义一个动态数组 Redim IntArray(2) ’ 使用Redim语句 IntArray(1)=10 ’ 为动态数组的元素赋值

  22. (1) 算术运算符 7.2.3 VBA中的常量、变量、运算符和表达式 算术运算符的优先级从高到低的顺序:先算乘幂,其次算乘除,再次算整除、求模、最后算加减。如果运算符的优先级相同,则按从左到右的顺序依次计算 例7-5 计算算术表达式4+5\6*7/8 Mod (3+6)的结果。

  23. (2) 关系运算符 7.2.3 VBA中的常量、变量、运算符和表达式 6个关系运算符的优先级是相同的,如果它们出现在同一个表达式中,按照从左到右的顺序依次运算,但关系运算符比算术运算符的优先级低。

  24. (3) 逻辑运算符 7.2.3 VBA中的常量、变量、运算符和表达式 常用的3个逻辑运算符之间的优先级,由高到低依次为:非(Not)、与(And)、或(Or)。逻辑运算符的优先级比关系运算符的优先级低。在VBA中,逻辑量可以参与算术运算,True值被当成-1、False被当成0处理。

  25. (4) 连接运算符 7.2.3 VBA中的常量、变量、运算符和表达式 连接运算符作用是将两个字符串连接起来合成一个更大的字符串。 “+ ”要求其前后的表达式必须是字符串表达式 “&”的连接的表达式可以是字符串表达式,或是数值表达式等,若是数值表达式,先进行计算,然后将其转化为字符串,再进行字符串的连接。 例如:"ACCESS "+ "数据库" 结果为"ACCESS数据库" 例如:"2+3= " & 2+3 结果为"2+3=5 “ 四种运算符优先级从低到高依次为:逻辑运算符→关系运算符→连接运算符→算术运算符。

  26. 1. 算术函数 7.2.4常用函数

  27. 2.字符串函数

  28. 3.日期/时间函数

  29. 4.类型转换函数

  30. 5.测试函数

  31. 第7章 模块与VBA 7.3 VBA程序控制结构 7.3.1 顺序控制 顺序控制结构的程序运行时按照语句排列的先后顺序逐条依次执行,它是程序中最基本的控制结构。常用的顺序控制结构的语句有注释语句、赋值语句、输入输出语句等。 1. 注释语句 Rem 注释文本 或 ' 注释文本 例7-6 使用Rem语句和“'”为程序添加注释。 Rem 注释示例 Dim myStr1, myStr2 ' 定义变量语句 myStr1 ="Hello" ' 变量赋值语句 myStr2 ="Goodbye" ' 变量赋值语句

  32. VBA程序控制结构 7.3.1 顺序控制 2. 赋值语句 赋值语句为变量指定一个表达式的值。 语句格式: [Let] 变量名=值或表达式 其中,Let 为可选项。 例7-7 为变量赋值, 并在立即窗口输出变量的值。 Dim IntAge As Integer IntAge=20 Debug.Print IntAge

  33. VBA程序控制结构 3.输入与输出 (1)输入框函数——InputBox InpubBox函数的作用是显示一个有提示信息输入框。 语句格式为: InputBox(Prompt,[Title],[Default],[XPos],[YPos]) ①Prompt 用于指定出现在输入框中的提示文字,其最大长度约为1024个字符,如果提示信息需要显示在多行中,可在各行字符串表达式之间用回车符“Chr(13)”、换行符“Chr(10)”或回车换行符的组合“Chr(13 & Chr(10)”来分隔行。 ②Title 用来指定显示在输入框的标题栏中的文字。若省略该参数,则应用程序名称显示在输入框的标题栏中。 ③Default 在没有输入其它值时作为缺省值。若省略该参数,则文本框为空。 ④Xpos 指定输入框的左边与屏幕左边的水平距离。 ⑤Ypos 指定输入框的上边与屏幕上边的垂直距离。

  34. VBA程序控制结构 (2)消息框函数——MsgBox函数 MsgBox函数的作用是在对话框中显示信息,等待用户单击按钮,并返回一个整数告诉用户单击哪一个按钮。MsgBox函数的调用格式如下: 变量名=MsgBox(Prompt[, Buttons] [, Title] [, Helpfile, Context]) MsgBox在VBA程序中也可作为语句使用,其格式为: MsgBox Prompt,[Buttons],[Title] Buttons 其值的总和用来指定显示按钮的类型与数目、使用的图标样式、缺省按钮以及消息框的强制回应模式等。如果省略,则Buttons 的缺省值为0。Buttons设置值如表

  35. VBA程序控制结构

  36. VBA程序控制结构

  37. 例7-8 使用InputBox接收用户的输入,用MsgBox语句显示结果。 Sub ExpFunc() Dim strName As String ' 定义变量 strNmae = InputBox("请输入您的姓名", "登录") MsgBox “欢迎您:” & strName & “同学”, _ vbInformation, "欢迎" End Sub VBA程序控制结构

  38. VBA程序控制结构 例10-3 以下代码使用InputBox函数和MsgBox函数接收用户的输入并显示。 Sub InputFunc() Dim str As String Str=InputBox("请输入您的姓名:","登录") MsgBox "欢迎您:" & str & "同学", vbInformation, "欢迎" End Sub 程序在调用子过程InputFunc时,弹出输入对话框,要求用户输入数据,单击“确定”按钮后,弹出输出对话框。

  39. T F F 条件 条件 T A B A VBA程序控制结构 7.3.2 选择控制 1.If 语句 (1) 单分支的If语句 If <条件> Then 语句块1 End If 单分支单行If语句格式:If 条件Then 语句 (2) 双分支的If语句 If 条件Then 语句块1 Else 语句块2 End If 双分支单行If语句格式:If 条件 Then 语句1 Else 语句2

  40. VBA程序控制结构 例7-11输入一个年份,判断该年是否为闰年。判断某年是否为闰年的规则是:如果此年号能被400整除,则是闰年;如果此年号能被4整除,但不能被100整除,则是闰年。 Sub Leap() Dim x As Integer x = Val(InputBox("请输入年份:")) If x Mod 400 = 0 Or (x Mod 4 = 0 And x Mod 100 <> 0) Then MsgBox Str$(x) & "年是闰年" Else MsgBox Str$(x) & "年不是闰年" End If End Sub

  41. T 条件1 语句块1 F T 条件2 语句块2 F … T 条件n 语句块n F T Else 语句块n+1 F VBA程序控制结构 (3)多分支If语句 If 条件1 Then 语句块1 ElseIf 条件2 Then 语句块2 …… [ElseIf 条件n Then 语句块n] [Else 语句块n+1] End If End If

  42. VBA程序控制结构 例:输入成绩0-100之间,判定成绩等级。判断成绩等级的规则是:如果成绩大于等于85且小于等于100输出“优秀”,成绩大于等于70且小于85输出“通过”,成绩大于等60且成绩小于70输出“及格”,小于60,输出“不及格” Sub Grade() Dim sngScore As Single Dim strResult As String sngScore = InputBox("请输入成绩0~100") If sngScore >= 85 Then strResult = "优秀" ElseIf sngScore >= 70 Then strResult = "通过" ElseIf sngScore >= 60 Then StrResult = "及格" Else strResult = "不及格" End If MsgBox strResult End Sub

  43. VBA程序控制结构 (4) If语句的嵌套 多分支结构也可用If语句嵌套来实现 基本格式: If 条件1 Then 语句块1 Else If 条件2 Then 语句块2 [Else 语句块3] End If End If

  44. VBA程序控制结构 (4) If语句的嵌套 例7-13 根据x的值,计算表达式y的值。 部分代码如下: If x > 0 Then y = Sqr(x) Else If x = 0 Then y = 0 Else y = Abs(x) End If End If

  45. VBA程序控制结构 首先计算表达式的值,然后将表达式的值依次与各Case后列表中的值一一进行比较,若与其中某个值相同,则执行该列表后的相应语句块部分,然后执行End Select其后的语句;若出现与表列中的所有值均不相等的情况,则执行Case Else的语句块部分,然后退出Select Case结构,执行其后的语句,否则不执行任何结构内的语句,整个Select Case结构结束,再执行其后的语句。 2.Select 语句 在有些情况下,对某个条件判断后可能会出现多种取值的情况,使用Select Case语句。Select 语句的基本格式: Select Case 表达式 Case 值列表1 语句块1 [Case 值列表2 语句块2] … … [Case 值列表n 语句块n] [Case Else 语句块n+1 ] End Select

  46. VBA程序控制结构 说明: ① 表达式可以是数值表达式或字符串表达式。 ② 值列表可以有如下4种格式: 值1[, 值2]……:此种格式在表达式列表中有一个或多个值与表达式的值进行比较,多个取值之间用逗号分隔。如果表达式的值与这些值中的一个相等,即可执行此表达式列表后相应的语句块。 值1 To 值2:此种格式在表达式列表中提供了一个取值范围,可以将此范围内的所有取值与表达式的值进行比较。如果表达式的值与此范围内的某个值相等,则可执行此表达式列表后的相应语句块。 Is 关系运算符 值1[, 值2]……:此种格式将表达式的值与关系运算符后的值进行关系比较,检验是否满足该关系运算符。若满足,则执行此表达式列表后的相应语句块。这几种格式允许混合使用。

  47. VBA程序控制结构 Dim x As String Dim result As String x = InputBox("请输入一个字符") Select Case Asc(x) Case 97 To 122 result= "小写字母" Case 65 To 90 result= "大写字母" Case 48 To 57 result= "数字" Case Else result= "其他特殊字符" End Select Msgbox result 例7-14 根据输入的字符,判断是大写字母、小写字母、数字还是其他特殊字符。 部分代码如下:

  48. VBA程序控制结构 3.具有选择功能的函数 VBA提供了3个具有选择功能的函数,分别为IIf函数、Switch函数和Choose函数。 (1)IIf函数 调用格式: IIf(条件式,表达式1,表达式2) 如果条件式的值为真,则函数返回表达式1的值;如果条件式的值为假,则返回表达式2的值。例如: min=IIf(a>b,b,a) min=IIf(min>c,c,min) 功能是将a,b,c中最小的数赋值给变量min。

  49. VBA程序控制结构 (2)Switch函数 Switch函数根据不同的条件值来决定函数的返回值,其调用格式如下: Switch(条件式1,表达式1,条件式2,表达式2,…,条件式n,表达式n) 该函数从左向右依次判断条件式是否为真,而表达式则会在第一个相关的条件式为真时作为函数返回值返回。例如: city=Switch(prov="湖南","长沙", prov="湖北","武汉", prov="江西","南昌") 该语句的功能是根据变量prov的值,返回与省份所对应的省会名称。

  50. VBA程序控制结构 (3)Choose函数 Choose函数是根据索引式的值返回选项列表中的值,函数调用格式如下: Choose(索引式,选项1,选项2,…,选项n) 当索引式的值为1时,函数返回选项1的值;当索引式的值为2时,函数返回选项2的值;依次类推。若没有与索引式相匹配的选项,则会出现编译错误。例如: Weekname=Choose(wkDay,"星期一","星期二","星期三","星期四","星期五","星期六","星期天") 该语句的功能是根据变量wkDay的值返回所对应的星期中文名称。

More Related