




已阅读5页,还剩70页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8 第8章模块 本章要求了解类模块和标准模块的概念会在模块中执行宏熟悉VBE界面掌握变量 常量 运算符和表达式的相关知识掌握流程控制语句的书写和应用掌握过程调用和参数传递的方法会调试程序 8 1模块的基本概念模块是Access中的一个重要对象 它是以VBA声明 语句和过程作为一个独立单元的结合 每个模块独立保存并对应于其中的VBA代码 模块分为两大类 类模块和标准模块 一 类模块类模块是指包含新对象定义的模块 当用户新建一个类的实例的同时 也就创建了新的对象 在模块定义的任何过程都会变成这个对象的属性和方法 类模块分为 窗体模块 报表模块和独立的类模块 二 标准模块标准模块是指存放整个数据库可用的函数和过程的模块 标准模块和类模块的主要区别在于其范围和生命周期方面 三 将宏转换为模块Access中 用户可以根据需要 将设计好的宏对象转换成模块代码形式 步骤 在 宏 对象中选择要转换的宏 执行菜单 工具 宏 将宏转换为VisualBasic代码 命令 打开 转换宏 对话框 单击 转换 按钮 即可完成宏到模块的转换 8 2创建模块一 在模块中加入过程过程 是模块的单元组成 由VBA代码编写而成 分为Sub子过程和Function函数过程 进入窗体或报表的设计视图 单击工具栏中的 代码 按钮 即可进入类模块的设计和编辑窗口 单击数据库窗体中的 模块 对象标签 再单击 新建 按钮 即可进入标准模块的设计和编辑窗口 模块的声明区域用于声明模块使用的变量等项目 每个模块都包含一个声明区域 其中包含一个或几个Sub子过程或Function函数过程 Sub子过程只执行一系列的操作 不返回任何值 格式 Sub过程名 程序代码 EndSubFunction函数过程执行一系列操作 有返回值 格式 Function过程名As 返回值 类型 程序代码 EndFunctionSub子过程可以用Call关键字调用 Function函数过程则不能用Call调用执行 需要直接引用函数过程名 模块的创建创建一个名为 模块入门 的新模块 保存为 模块入门 过程的创建在 模块入门 模块中创建一个Hello过程 用户输入 二 在模块中执行宏在模块中执行宏 可以使用DoCmd对象的RunMacro方法 格式 DoCmd RunMacroMacroName RepeatCount RepeatExpression 说明 MacroName表示宏的有效名称 RepeatCount用于计算宏运行次数 RepeatExpression为数值表达式 在结果不等于False 0 时一直进行计算 在结果等于False时停止运行宏 8 3VBA程序设计基础一 面向对象的基本概念对象和集合对象指由描述该对象属性的数据以及可以对这些数据施加的所有操作封装在一起构成的统一体 可以看成是一个独立的单元 集合表示的是某类对象所包含的实例的构成 属性和方法属性是类中用于描述对象特征的数据 是对客观世界实质性质的抽象 属性的应用方式为 对象 属性 方法是对象所能执行的操作 VBA中的方法由过程或函数组成 方法的引用方式为 对象 方法Access还提供了一个DoCmd对象 其主要功能是通过调用内部方法来实现VBA对Access中的操作 调用格式 DoCmd OpenReportreportname view filtername wherecondition 事件是指Access中的对象可以识别的动作 如单击鼠标 窗体等 Access中 有两种方式来处理窗体 报表或控件的事件响应 一种是使用宏对象来设置事件属性 另一种是事件过程 即为某个事件编写VBA代码过程 事件过程是指为某个事件编写VBA代码过程 完成指定动作 关于窗体 报表 命令按钮控件 标签控件 文本框控件 组合框控件 选项组控件 单选按钮及复选框控件的主要事件过程详见教材P215 216 例 在新建窗体中添加一个命令按钮 并创建 单击 事件响应过程 二 VisualBasic编辑环境VBE VisualBasicEditor 是Access提供的编程界面 VBE窗口主要由工具栏 工程窗口 属性窗口和代码窗口组成 标准工具栏如下图所示 进入VBE编程环境Access模块分为类模块和标准模块 它们进入VBE编程环境的方式也是不同的 类模块进入VBE环境的方法 单击窗体 属性 窗口的 事件 选项卡 单击任一 事件过程 右侧的 按钮 进入 选择生成器 窗体 选择 代码生成器 项 单击 确定 按钮 进入VBE编程环境 标准模块进入VBE环境的方法有3种 选择 模块 对象 双击要查看的模块对象 单击 新建 按钮 创建新模块 执行 工具 宏 VisualBasic编辑器 命令 VBE界面 工程窗口 属性窗口 代码窗口 立即窗口 对象选定器 过程选定器 VBE环境中编写VBA代码VBA代码是由语句组成的 一条语句就是一行代码 例如 intCount 3 将3赋值给变量intCountDebug PrintintCount 在立即窗口打印变量intCount的值3操作时 在代码窗口左边组合框选定一个对象后 右边过程组合框中会列出该对象的所有事件过程 再从该对象事件过程列表选项中选择某个事件名称 系统会自动生成相应的事件过程模版 用户添加代码即可 程序语句书写规则 1 语句书写规定 通常一个语句写一行 语句较长 一行写不下时 可使用续行符 一个空格加下划线 将语句连续写在下一行 可以使用冒号 将几个语句分隔写在一行中 当输入一行语句并按下回车键后 若该行代码以红色显示 则表明改行语句有错误 应更正 2 注释语句 可以通过以下两种方式实现 使用Rem语句 格式为 Rem注释语句 在语句之后Rem前面要加冒号 用单引号 格式为 注释语句 3 采用缩进格式书写程序采用正确的缩进格式 以显示出流程中的结构 也可以利用 编辑 菜单下的 缩进 或 凸出 命令进行设置 4 F1帮助信息用户可以将键盘光标停留在某个语句命令上 按下F1键 系统会提供相关的帮助 三 数据类型和数据库对象1 标准数据类型 VBA数据类型列表 2 用户定义的数据类型不同类型的变量可以组合起来创建用户定义的数据类型 创建自定义的数据类型的语句是Type 用户自定义类型可包含一个或多个基本数据类型的数据元素 数组或一个先前定义的用户自定义类型 Type语句的基本格式 Private Public Type数据类型名元素1As数据类型 元素2As数据类型 EndType 例如 定义一个名称为MyType的数据类型 TypeMyTypeMyNameAsString 10 定义字符串变量存储一个名字MyBirthDateAsDate 定义日期变量存储一个生日MySexAsInteger 定义整型变量存储性别 0为女 1为男 EndType声明变量 DimNewValasMyType引用数据 使用 变量名 元素名 的格式 NewVal MyName 刘星 NewVal MyBirthDate 10 10 1991 NewVal MySex 1 3 数据库对象数据库 表 查询 窗体和报表等 也有对应的VBA对象数据类型 这些对象数据类型由引用的对象库定义 常用VBA对象数据类型和对象库中所包括的对象详见教材P222表8 13 四 变量与常量变量是指程序运行时值会发生变化的数据 每个变量都有变量名 变量命名不能含有空格或除了下划线 外的任何其他的标点符号 长度不能超过255个字符 使用前可以指定数据类型 即采用显式声明 也可以不指定 即采用隐式声明 常量是在程序中可以直接引用的实际值 其值在程序运行中不变 VBA中有3种常量 直接常量 符号常量和系统常量 1 变量的声明 1 显式声明格式 Dim变量名As数据类型例如 DimnumberAsInteger等价于 Dimnumber 可以使用Dim语句在一行中声明多个变量 如 DimintxAsInteger StrzAsString 定义了1个整型变量intx和1个字符型变量Strz 2 隐式声明格式 变量名 值例如 Data 123所有隐式声明的变量都是Variant数据类型 VBA根据程序中赋予变量的值来自动调整变量的类型 DimI j kAsinteger 只有k是integer型 I与j都是variant型 2 强制声明良好的编程习惯都应该是 先声明变量 后使用变量 这样做可以提高程序的效率 同时也使程序易于调试 VBA中可以强制显式声明 在窗体模块 标准模块和类模块的通用声明段中加入 OptionExplicit 3 变量的作用域在VBA中 定义变量的位置和方式不同 其存在的时间和作用范围也不同 也就是它的生命周期和作用域不同 根据变量的作用域 可把变量分为3种类型 局部变量 模块变量和全局变量3种变量的使用规则与作用域见下表 变量的作用域和生命周期举例 x全局变量y过程变量z过程静态变量 4 数据库对象变量可以引用Access中的窗体对象和报表对象 格式 Forms 窗体名称 控件名 属性名 Reports 报表名称 控件名 属性名 若属性名称缺省 则默认为控件基本属性 例如 Forms 学生 姓名 张域 若在本窗体的模块中引用 可以用Me代替Forms 学生 语句变为 Me 姓名 张域 如果要多次引用某一值 则可用一个变量名代替窗体控件对象 例如 DimNameAsControl 定义控件类型变量SetName Forms 学生 姓名 指定引用窗体控件对象Name 张域 操作对象变量 5 数组数组变量由变量名和数组下标组成 格式 Dim数组名 下标下限to 下标上限 缺省状态下 下标下限为0 例如 DimArray 5 AsString定义了由6个字符串构成的数组 数组元素为Array 0 Array 5 DimArray 1to5 AsString定义了由5个字符串构成的数组 数组元素为Array 1 Array 5 DimArray 5 5 5 AsString定义了一个多维数组 包含6 6 6个数组元素 DimArray AsInteger定义了一个动态数组 在使用动态数组时 先不指名数组元素数目 需要时再用ReDim关键字定义 当不需要使用时 可以用ReDim将其设置为0 释放内存空间 如 ReDimArray 5 5 5 AsInteger将上面的动态数组设置为6 6 6个数组元素 6 变量命名规则一般用小写字母作为变量名的第一个字符 长度小于255个字符 变量名是字母 数字与下划线 的组合 并且必须以字母开头 不区分大小写 不能包含其他字符 不能使用VBA关键字 在同一作用域内 变量名必须是唯一的 7 符号常量对一些使用较为频繁的常量 可以用符号常量表示 格式 Const符号常量名称 常量值例如定义圆周率 ConstPI 3 1415926注意 符号常量一般要求大写命名 8 系统常量系统定义的常量有7个 True False Null Yes No On和Off等 系统常量可以在计算机上的所有应用程序中使用 五 常用标准函数标准函数一般用于表达式中 格式 函数名 参数3 参数4 参数5 说明 其中函数名是不可或缺的 参数可以常量 变量 表达式 参数个数也可以根据需要自行设定 每个函数被调用时 都会返回一个返回值 需要指出的是 函数的参数和返回值都有特定的数据类型对应 常用函数分为算术函数 字符串函数 日期 事件函数 类型转换函数 具体详见教材P225 227 六 运算符和表达式1 运算符1 算术运算符 注意 整数除法 运算 如果操作数有小数 系统会舍去再运算 如果结果中有小数也将舍去 求模运算 如果操作数有小数 系统会四舍五入再运算 如果被除数是负数 余数也是负数 2 关系运算符运算的结果为逻辑值 True或False Is关系运算符用于两个对象变量引用比较 常用语法为 result object1Isobject2如果object1和object2两者引用相同的对象 result为True 否则为False 3 逻辑运算符逻辑运算也称布尔运算 包括与 And 或 Or 和非 Not 共3个运算符 0 False1 True逻辑运算符的优先级由高到低依次为Not And Or 4 连接运算符有 和 连接两个字符串 区别 连接运算 两个操作数均应为字符串类型 连接运算 两个操作数既可为字符型也可为数值型 当是数值型时 系统自动先将其转换为数字字符 然后进行连接操作 例 100 123 结果为100123 Abc 123 出错 100 123 结果为100123100 123 结果为100123 Abc 123 结果为Abc123 2 表达式和优先级表达式 用运算符将常量和变量连接在一起构成的式子 运算符的优先级规则如下 算术运算符 连接运算符 关系运算符 逻辑运算符 优先级相同 按从左向右顺序进行 括号优先级最高 VBA表达式3 3 3 3的输出结果为 2006 4 9 设a 2 b 3 c 4 d 5 则表达式NOTaa c的值为 5 6 7 False 8 4VBA流程控制语句计算机程序的执行控制流程有3种基本结构 顺序结构 条件判断结构和循环结构 顺序结构 顺序执行程序语句条件判断结构 按照给定的条件进行判断 再按判断结果分别执行程序中不同部分的代码 循环结构 按照条件反复执行一系列语句 根据循环的条件 可以把循环结构分为两类 当型循环结构 当条件成立时 反复执行语句 直到型循环结构 反复执行语句直到条件成立为止 三种基本结构 三种基本结构 一 赋值语句赋值语句主要用于为变量指定一个值或者表达式 通常以 连接 格式 Let 变量名 值或者表达式 Let为可选项例如 定义一个单精度数值 并赋值为1 23456 Dimiassinglei 1 23456二 条件语句1 单分支结构 If Then语句 If测试指定的条件 如果条件为真 True 则执行Then后面的语句 格式1 If条件表达式Then语句 格式2 If条件表达式Then语句块EndIf注意 If Then的单行格式不用EndIf 但如果条件表达式为真 True 时 要执行多行代码 则必须使用多行If Then EndIf语法 例 已知两个数x和y 比较它们的大小 使得x大于y Ifx yThent x x y y tEndIf或Ifx yThent x x y y t 以下是一个竞赛评分程序 8个评委 去掉一个最高分 去掉一个最低分 计算平均分 满分10分 PrivateSubForm Click DimMaxAsInteger MinAsIntegerDimiAsInteger xAsInteger sAsIntegerDimpAsSingleMax 0 Min 0Fori 1To8x Val InputBox 请输入分数 If ThenMax xIf ThenMin xs s xNextis p s 6MsgBox 最后得分 pEndSub 2005 4 x Max x Min S Max Min 2 双分支结构 If Then Else 格式 If条件表达式Then语句块1Else语句块2EndIf当条件为True时 执行语句块1 为False时 执行语句块2 例 用If Then语句结构编程计算表达式y的值当x 0时 y x 1当x 0时 y x 1当x 0时 y 0 程序代码 Ifx 0Theny x 1elseIfx 0Theny x 1elseIfx 0Theny 0EndIfEndIfEndIf IF语句的嵌套 多重选择嵌套IF语句应注意书写格式 为提高程序的可读性 多采用锯齿型 注意If与EndIf的配对 多个If嵌套 EndIf与它最近的If配对 3 多分支结构 If Then Elseif语句 格式 If条件表达式1Then语句组1elseif条件表达式2Then语句组2elseif条件表达式3Then语句组3 elseif条件表达式nThen语句组nelse语句组n 1endif 例 输入一学生成绩 评定其等级 方法是 90 100分为 优秀 80 89分为 良好 70 79分为 中等 60 69分为 及格 60分以下为 不合格 程序代码 Ifx 90thenDebug Print 优秀 ElseIfx 80ThenDebug Print 良好 ElseIfx 70ThenDebug Print 中等 ElseIfx 60ThenDebug Print 及格 ElseDebug Print 不及格 EndIf 4 Select语句SelectCase选择结构 根据表达式求值结果 选择执行几个分支中的一个 格式 SelectCase条件表达式Case表达式1语句1 Case表达式2To表达式3 语句2 CaseIs关系运算符表达式4 语句3 CaseElse 语句n Endselect 注意 按照在Select Case结构中出现的顺序 将表达式的值和Case语句中的值进行比较 如果发现一个匹配项或一条CaseElse语句 则执行相应的语句块 在任何情况下 随后都会将控制转移到EndSelect语句后面的语句 说明 表示可以不包含括号中的内容 表达式列表的形式有以下3种 Case表达式 如Case10 15 判断测试表达式的值是否为10或15 Case表达式1To表达式2 如Case10To15 判断测试表达式的值是否在10 15之间 CaseIs关系运算符表达式 如CaseIs 15 判断测试表达式的值是否小于15 在Case子句中可以使用多重表达式 如Case10To15 20To25 30 31 SelectCase语句多分支结构 PrivateSubCommand1 Click text1 SetFocusn Val text1 Text SelectCasenCase1To20 x 10Case2 4 6x 20CaseIs 10 x 30Case10 x 40EndSelecttext2 SetFocustext2 Text xEndSub 程序运行后 如果在Text1中输入10 然后单击命令按钮 则在Text2中显示 10 5 条件函数除上述条件语句结构外 VBA还提供了3个函数来完成相应操作 1 IIf语句格式 IIf 条件式 表达式1 表达式2 说明 IIf语句根据 条件式 的值确定函数返回值 当条件式的值为真时 返回表达式1的值 反之 返回表达式2的值 如 IIf a b a b 返回a b中较大的值 2 Switch语句格式 Switch 条件式1 表达式1 条件式2 表达式2 条件式n 表达式n 说明 Switch语句是根据 条件式 的值决定函数返回的值 如 y switch x 0 1 x 0 0 x 0 1 根据x的值来为y赋值 3 Choose语句格式 Choose 索引式 选项1 选项2 选项n 说明 Choose语句是根据 索引式 的值来返回选项列表的某个值 索引式 值为1 则返回 选项1 的值 索引式 值为n 则返回 选项n 的值 如 Y Choose x 7 5 9 根据x的值 为变量Y赋值教材P234例8 13涉及If语句的嵌套使用 练习并理解 三 循环语句1 For Next语句For Next循环结构 将一段程序重复执行指定的次数 其中使用一个计数变量 统计执行的次数 格式 For循环变量 初值To终值 Step步长 语句组1 ExitFor 语句组2 Next 循环变量 功能 循环变量先被赋初值 判断循环变量是否在终值内 如果是 执行循环体 然后循环变量加步长值继续 如果否 结束循环 执行Next后的语句 说明 1 循环控制变量的类型必须是数值型 2 步长可以是正数 终值应大于初值 也可以是负数 终值小于初值 如果步长为1 Step参数可以省略 步长不能为0 否则造成 死循环 3 根据初值 终值和步长 可以计算出循环的次数 因此For语句一般用于循环次数已知的情况 4 使用ExitFor语句可以提前退出循环 如 Dimiasinteger SumasintegerSum 0Fori 1to10Sum Sum iNexti 计算整数1 10的和 例 假定有以下程序段 2005 9 n 0fori 1to3forj 4to 1n n 1nextjnexti运行完毕后 n的值是A 0B 3C 4D 12 Right 2 DoWhile Loop语句和Do LoopWhile语句格式1 先判断条件是否成立 再开始循环 Do While Until 条件表达式 语句 ExitDo 语句 LoopDoWhile Loop循环结构 先判断后执行 有可能一次也不执行 While关键字用于指明条件为真时执行循环体内语句 Until当条件为假时 执行循环体内语句 表示括号内任意一个 格式2 先循环 再判断条件是否成立 Do语句 ExitDo 语句 Loop While Until 条件表达式Do LoopWhile循环结构 先执行后判断 循环语句至少执行一次 While关键字用于指明条件为真时执行循环体内语句 Until当条件为假时 执行循环体内语句 注意 在循环体中必须有修改循环变量的语句 如n n 1 否则循环条件始终不发生改变 循环将永远不会结束 即死循环 例 单击窗体 消息框的结果为 2006 4 PrivateSubForm Click DimxasInteger yasIntegerx 2 y 4Dox x yy y 1Loopwhiley 4MsgBoxxEndSub 此种结构 先执行循环体 再判断条件 当while后的条件表达式为真时 执行循环体 为假时 跳出循环体 X 2y 4X 8Y 5 PrivateSubCommand1 Click DimnumAsSinglenum 1DoUntilnum 6num num 2 4LoopMsgBoxnumEndSub num 1num 3 4num 5 8num 8 2 此种结构 先判断条件 再执行循环体 当until后的条件表达式为假时 执行循环体 为真时 跳出循环体 3 While Wend语句格式 While条件表达式语句WendWhile Wend语句与DoWhile Loop结构类似 当条件满足时 执行循环体 只是在循环体内不能使用ExitDo语句 四 GoTo语句GoTo语句用于实现无条件跳转 格式 GoTo标号 标号 注意 标号名字从代码行的最左列开始写 一般不建议用GoTo语句 8 5过程调用和参数传递在VBA中 过程是由一系列可以完成某项指定的操作 计算语句和方法组成 根据过程是否返回值 分为Sub过程和Function过程 一 过程调用1 过程的定义和调用 用Sub语句声明一个新的过程 格式 Public Private Static Sub过程名 参数As数据类型 过程语句 ExitSub 过程语句 EndSub使用Public关键字可以使该过程适用于所有模块中的所有其他过程 用Private关键字则使该程序只适用于同一模块中的其他过程 过程调用形式有以下两种 Call过程名 实参 过程名 实参 例 先编写一个子过程 MsgBox 然后写成调用该子过程的语句 程序代码 SubMsgBox FormNameasString MsgBox 请输入用户名 vbOKOnly vbInformation 提示 EndSub调用名为 登陆 的窗体 可以用下列语句CallSubMsgBox 登陆 2 函数的定义和调用用Function语句可以声明一个新函数 它接受参数 返回变量类型及运行该函数过程的代码 格式 Public Private Static Function函数名 参数 As 数据类型 函数语句 函数名 表达式 ExitFunction 函数语句 函数名 表达式 EndFunction说明 对函数使用Public关键字 则所有模块的过程都可以调用它 用Private关键字使这个函数只适用于同一模块中的其他过程 当把一个函数说明为模块中的私有函数时 就不能从查询 宏或另一个模块中的函数这个函数 包含Static关键字时 只要含有这个过程的模块是打开的 则所有在这个过程中的显式和隐含说明的变量值都将被保留 函数的调用 变量名 函数过程名 参数列表 PrivateSubCmdOK CallS Swapa bEndSub PrivateSubS Dimtemp Temp XX YY TempEndSub 示例过程调用的执行过程 二 参数传递过程或函数定义可以设置一个或多个参数 这个参数称为形参 多个参数之间用逗号分隔 格式 Optional ByVal ByRef ParamArray Varname Astype Defaultvalue 各参数的含义 Varname 必须的 形参名称 遵循标准的变量命名约定Type 可选项 传递给该过程的参数的数据类型Optional 可选项 表示参数不是必须的 如果使用了Param
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理常识高考试题及答案
- 呼吸球囊考试题及答案
- 2025教资生物考试真题及答案
- 电大专科学前教育学试题及答案
- 听觉记忆存储特性-洞察与解读
- 服务质量指标体系-洞察与解读
- 2025年事业单位招聘考试综合类专业能力测试试卷(统计类)真题模拟
- 2025年综合类事业单位招聘考试公共基础知识真题模拟试卷(权威解析)
- 2025年事业单位招聘考试市场营销专业能力测试真题模拟试卷
- 2025年齐鲁医药学院公开招聘40名高层次人才(长期招聘岗位)考前自测高频考点模拟试题附答案详解(考试直接用)
- 《苹果案例分析》课件
- 常用急救药品知识-课件
- 《绿色设计产品评价技术规范硫酸钾》
- 外研版(三起)(2024)小学三年级上册英语Unit 4《Fun with numbers》教案
- 2024年大学生电子版三方协议书模板
- 信息科技大单元教学设计之七年级第一单元探寻互联网新世界
- 普通高中体育与健康课程标准
- MOOC 理性思维实训-华南师范大学 中国大学慕课答案
- 《陆上风电场工程设计概算编制规定及费用标准》(NB-T 31011-2019)
- 腾讯组织管理手册
- 《燕麦片营养调查》课件
评论
0/150
提交评论