已阅读5页,还剩287页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
模块与VBA程序设计 本章主要掌握内容 模块的基本概念及其创建 VBA中的数据类型 常量 变量与数组 VBA中的运算符 表达式和函数 VBA流程控制语句 VBA的数据库编程 VBA VisualBasicforApplication 是VisualBasic语言在Office编程中的应用 VBA就是用来创建Access模块对象的编程语言 第一节模块的基本概念 模块是以VBA语言为基础编写的 将一个或多个过程 子过程或函数过程 作为一个单元进行保存的集合 模块中的每个过程实现各自的特定功能 利用模块可以将各种数据库对象连接起来 构成一个完整的系统 在Access中 模块分为两种类型 类模块 标准模块 一 类模块 类模块是依附于某一窗体或报表而存在的模块 窗体和报表中含有对象 每个对象都有自己固有的事件过程 以响应窗体或报表中的事件 为窗体或报表创建第一个事件过程时 系统会自动创建与之关联的窗体或报表模块 在窗体或报表的设计视图下 可以单击工具栏中的 代码 按钮进入代码窗口 已经具有事件过程的事件名称用黑色粗体表示 窗体或报表中模块的作用范围仅局限于其所属的窗体或报表的内部 具有局部特征 二 标准模块 标准模块是不与任何对象相关联的通用过程 这些过程可在数据库中的任何位置直接调用执行 标准模块一般用于存放公共过程 子过程和函数过程 与其它任何Access对象不相关联 在Access系统中 通过模块对象创建代码的过程就是标准模块 在标准模块中的全局变量或公共过程 其作用范围在整个应用程序里 具有全局特征 三 打开模块的编辑窗口模块是在VBE VisualBasicEditor 窗口中进行创建和编辑的 可以通过以下方法打开标准模块的VBE窗口 在 创建 选项卡的 宏与代码 组中单击 模块 按钮 创建新模块 在 导航 窗格中选择 模块 类别 使用组合键Alit F11 数据库窗口与VBE窗口之间切换 在 导航 窗格中右击某个模块对象 在快捷菜单中选择 设计视图 命令 打开该模块的代码窗口 双击 导航 窗格中的某个模块对象 打开该模块的代码窗口 在打开窗体或报表的设计视图后 可以通过以下方法打开类模块的VBE窗口 单击 窗体设计工具 中的 设计 选项卡中的 查看代码 按钮 右击需要编辑代码的控件 并在快捷菜单中选择 事件生成器 命令 第二节创建模块 模块是以过程 或函数 为单元组成的 一个模块包含两个部分 一个声明区域用于定义模块中使用的变量等内容 若干个子过程与函数过程 过程是由代码组成的单元 包含一系列计算语句和执行语句 用于完成特定的操作 过程名不能与所在模块的模块名相同 模块声明区域 子过程和函数定义区域 过程有两种类型 Sub过程 子过程 Function过程 函数过程 1 Sub过程子过程以关键词Sub开始 以EndSub结束 语法格式 Public Private Static Sub子过程名 形参列表 As数据类型 程序代码 ExitSub 程序代码 EndSub 说明 Public过程能被所有模块的所有其它过程调用 Private过程只能被同一模块的其它过程调用 Static用于设置静态变量 局部变量 如果没有使用Public或Private指定 过程则是Public 默认情况 如果没有使用Static 则在调用之后不会保留局部变量的值 形参列表 即调用时接受传递给Sub过程的参数的变量列表 如果有多个变量 则多个变量之间用逗号隔开 如果Sub过程没有参数 过程名后也必须包含一个空的圆括号 在形参表中可以用As来设置参数的数据类型 未加As时 则参数为变体型数据 在过程执行中一旦遇到ExitSub语句 则结束过程的执行 可以通过传递参数和使用参数来调用子过程 但子过程调用后不返回任何值 例 PublicSubxx mAsString nAsInteger EndSubPublicSubyy EndSub 子过程的调用形式有两种 语法格式一 Call子过程名 实参列表 语法格式二 子过程名 实参列表 说明 实参列表 在调用过程时用于传递给Sub过程的变量列表 存在多个变量时 多个变量之间用逗号隔开 实参列表和形参列表必须一一对应 用Call调用子过程是一个良好的程序设计习惯 因关键词Call表明其后是过程名而不是变量名 例1 PublicSubxx mAsString nAsInteger Debug Printm nEndSubPublicSubyy Callxx ABC 5 EndSub运行子过程yy 即在立即窗口中显示 ABC5 2 Function过程在VBA除系统提供的标准函数外 还可以由用户自行定义函数过程 用户自定义函数 函数过程和子过程在功能上略有不同 主程序调用过程后是执行了一个过程 主程序而调用函数后是得到了一个结果 函数过程是以Function开始 以EndFunction结束 语法格式 Public Private Static Function函数名 形参列表 AS数据类型 程序代码 ExitFunction 函数名 表达式 程序代码 EndFunction 说明 AS数据类型 定义函数返回值的数据类型 如果未定义 则系统将自动赋给函数过程一个最合适的数据类型 函数名 表达式 函数体中对函数名进行赋值的语句 使函数得到一个返回值 函数的定义中 必须至少含有一条给函数名的赋值语句 如果没有此语句 将根据As语句定义的数据类型而返回0或空字符串或空值 在函数过程执行中一旦遇到ExitFunction语句 则结束函数过程的执行 例2 把0到9中数字转换成大写汉字Functionvtoc xAsInteger AsStringDimcResultAsStringDimnAsStringcResult n 零壹贰叁肆伍陆柒捌玖 cResult mid n x 1 1 vtoc cResultEndFunction 函数过程的调用形式 语法格式 实参列表 说明 由于函数有返回值 因此调用时不能用Call命令 而是直接引用函数名并加括号 如果用Call命令调用函数 VBA将放弃函数的返回值 函数过程的返回值可以直接赋给某个变量 例 s vtoc 4 例3 编写一个能够以年 月 日来返回系统日期的函数过程Getdate FunctionGetdate AsStringGetdate Year Date 年 Month Date 月 Day Date 日 EndFunction调用上述函数 并将结果在立即窗口中显示 SubPdate Debug PrintGetdate EndSub 第三节VBA程序设计基础 一 面向对象程序设计的基本概念所谓面向对象可以这样定义 面向对象 类 对象 属性的继承 对象之间的通信一个面向对象的应用系统中 每一个组成部分都是对象 所需实现的操作则通过建立对象与对象之间的通信来完成 1 对象 客观世界里的任何实体都可以被看作是对象 对象可以是具体的物 也可以指某些概念 在面向对象的程序设计中 对象代表应用程序中的元素 包括表 窗体 按钮等 每个对象都具有自己的属性 事件和方法 用户就是通过属性 事件和方法来处理对象的 2 对象的属性及属性值 属性是对象的特征 用来表示对象的状态 不同类型的对象 其属性会有所不同 同类别对象的不同实例 属性的值也会有差异 既可以在创建对象时给对象设置属性值 也可以在执行程序时通过命令修改对象的属性值 3 事件和事件过程 事件是对象可以识别的一个动作 为使对象在某一事件发生时能够做出所需要的反应 必须针对这一事件编写相应的代码来完成相应的功能 如果已经编写了某个对象的事件代码 那么当此事件发生时 这段事件代码将被自动激活并开始执行 如果事件没有发生 则此段代码永远不会被执行 如果没有为对象编写事件代码 那么即使事件发生了 也不会产生任何动作 4 方法 方法是对象能够执行的一个动作 即当对象接受了某个消息后所采取的一系列操作的描述 相同类的对象具有相同的方法 不同类的对象所具有的方法也有所不同 每个对象都具有属性 以及与之相关的事件和方法 面向对象的程序设计就是通过对象的属性 事件和方法来处理对象 可以在程序代码中引用对象的属性或调用对象方法 语法格式 父对象名 对象名 属性名 父对象名 对象名 方法名 父对象与子对象之间用 连接 对象与属性 方法 之间用 连接 5 类 类是面向对象程序设计中的核心 是对一类相同对象的集合 这些对象具有相同的性质 相同种类的属性以及方法 类是对象的抽象 而对象是类的具体实例 有了类定义后 基于类就可以生成这类对象中任何一个对象 这些对象虽然采用相同的属性来表示状态 但它们在属性上的取值完全可以不同 这些对象一般有着不同的状态 且彼此间相对独立 6 DoCmd对象DoCmd是Access数据库的一个特殊对象 它是通过调用Access内置的方法 在程序中实现某些特定的操作 语法格式 DoCmd 方法名 参数 说明 DoCmd对象的大多数方法都有参数 有些是必需的 有些则是可选的 若缺省 将采用默认的参数 1 用DoCmd对象打开窗体语法格式 DoCmd OpenForm 窗体名 功能 用默认形式打开指定窗体 2 用DoCmd对象关闭窗体语法格式一 DoCmd CloseacForm 窗体名 功能 关闭指定窗体语法格式二 DoCmd Close功能 关闭当前窗体 3 用DoCmd对象打开报表语法格式 DoCmd OpenReport 报表名 acViewPreview功能 用预览形式打开指定报表 4 用DoCmd对象关闭报表语法格式一 DoCmd CloseacReport 窗体名 功能 关闭指定报表语法格式二 DoCmd Close功能 关闭当前报表 5 用DoCmd对象运行宏语法格式 DoCmd RunMacro 宏名 功能 运行指定宏 6 用DoCmd对象退出Access语法格式 DoCmd Quit功能 关闭所有Access对象和Access本身 7 用DoCmd对象执行宏语法格式 DoCmd RunMacro 宏名 运行次数 数值表达式 功能 运行指定宏说明 运行次数用于计算宏运行的次数 数值表达式在每一次运行宏时进行计算 结果为False时 停止运行宏 二 VBA编程环境 VBEVBE是编辑VBA代码时使用的界面 在VBE编辑器中可以编写VBA函数和过程 使用Alt F11可以实现数据库窗口和VBE之间的切换 1 VBE窗口的组成VBE使用多种窗口来显示不同对象或是完成不同任务 VBE的窗口主要包括 标准工具栏 工程窗口 属性窗口 代码窗口 对象组合框 事件组合框 监视窗口 立即窗口 本地窗口 1 标准工具栏 Access视图 插入模块 运行子过程 用户窗口 中断运行 终止运行 重新设计 设计模式 工程项目管理器 属性窗体 对象浏览器 各按钮的功能参见教材P260 2 工程窗口 工程资源管理器 在Access中所谓工程就是指一个数据库应用系统 系统中所有的类对象和模块对象都在工程窗口中显示 工程窗口以层次结构列表的形式显示当前数据库中的所有模块文件 鼠标双击其中之一 即打开其代码窗口 查看代码 按钮打开相应的代码窗口 查看对象 按钮打开相应的对象窗口 切换文件夹 按钮隐藏或显示对象分类文件夹 3 属性窗口属性窗口列出了选定对象的属性 以便查看 修改这些属性 若选取了多个控件 属性窗口中列出的是所有控件的共同属性 对象框用于选择对象 属性列表用于显示和修改对象的属性 属性列表可以按分类或按字母进行排序 直接在属性窗口中设置对象的属性 称 静态 设置 在代码窗口中 用VBA代码设置对象属性称 动态 设置 4 代码窗口代码窗口用于显示 编写及修改VBA代码 系统允许打开多个代码窗口 以查看不同窗体或模块中的代码 对象下拉列表框显示对象名称 用于查看或选择其中的对象 过程 事件下拉列表框显示与所选对象相关的事件 可以根据需要选择相应的事件 自动提示信息框根据已经输入的内容作出相应的提示 5 立即窗口立即窗口是用来进行快速的表达式计算 简单方法的操作及进行程序测试的工作窗口 在立即窗口中可以输入或者粘贴一行代码并执行该代码 按Enter键 执行结果将在立即窗口中显示 语法格式 在代码窗口中编写代码时 如果要在立即窗口中显示变量或表达式的值 则使用Debug语句 语法格式 Debug Print 立即窗口中的代码及运行结果是不会被保存的 6 监视窗口在调试VBA程序时 可以利用监视窗口显示正在运行过程定义的监视表达式的值 7 本地窗口使用本地窗口可以自动显示正在运行过程中的所有变量声明及变量值 以上窗口均可以用鼠标进行拖拉操作或关闭操作 也可以通过 视图 菜单使其显示 2 进入VBE编程环境代码窗口是设计人员的主要操作界面 双击工程窗口中的任何对象 都可以在代码窗口中打开该对象的对应模块代码 进入VBE编程环境的方法有多种 对于类模块 其方法有 方法一 打开窗体或报表的设计视图 并选择对象 单击 属性 对话框中的 事件 选项卡 选择某个事件并设置属性为 事件过程 单击属性右侧的 按钮 打开窗体或报表的设计视图后若无 属性 对话框 则可以由以下方法之一打开 单击 窗体设计工具 中的 设计 选项卡中的 属性表 按钮 组合键 Alt Enter 方法二 打开窗体或报表的设计视图 并选择对象 选择属性对话框中的 事件 选项卡 直接单击某个事件右侧的 按钮 在打开的对话框中选择 代码生成器 方法三 打开窗体或报表的设计视图 单击 窗体设计工具 中的 设计 选项卡中的 查看代码 按钮 对于标准模块 其方法有 方法一在 创建 选项卡的 宏与代码 组中 单击 模块 按钮 创建一个新的模块 方法二双击数据库导航窗格中选择需要打开的模块对象 修改已经存在的标准模块 方法三在 数据库工具 选项卡的 宏 组中 单击 VisualBasic 按钮 仅进入VBE环境 类似于使用组合键Alt F11 3 VBA程序书写原则 1 语句书写规定 通常一个语句写一行 语句较长分行写时 可用续行符 将语句连续写在下一行 续行符前需加一个空格 可以用冒号 将多条短语句写在同一行中 为显示程序的流程结构 可以采用缩进格式书写程序 代码设计时 可按F1键显示帮助信息 2 注释语句为增加程序的可读性 可在程序中设置注释语句 注释语句可以添加到程序模块的任何位置 且不会被执行 语法格式一 Rem 在其它语句之后出现时要用冒号分隔 语法格式二 可直接位于其它语句之后 注释语句默认以绿色文本显示 3 语法检查在代码窗口输入语句时 VBA会自动进行语法检查 即 当输入一行语句并按Enter键后 如果该语句存在语法错误 则此行代码以红色文本显示 并显示一条错误信息 必须找出语句中的错误并改正后才可以进行下一步的操作 注意语法检查执行的时机 三 数据类型 VBA在数据类型和定义方式上均继承了传统的Basic语言的特点 Access数据库在创建表时所使用的字段数据类型在VBA中都有对应的类型 OLE对象型 备注型和自动编号数据类型除外 在声明变量的数据类型时 既可以使用数据类型名 也可以使用符号来定义 详见教材P262 1 字符型 String 货币型数据 Currency 字符型常量必须要用一对英文半角的双引号括起来 货币型数据的整数部分最多可达15位 小数位数最多只能使用4位 2 布尔型数据 Boolean 布尔型数据也称逻辑型数据 其数据值只有两个 True和False 当布尔型数据转换为其它类型数据时 True转换为 1 False转换为0 当其它类型数据转换为布尔型数据时 0转换为False 非零值转换为True 3 日期 时间型数据 Date 日期 时间数据必须用一对 括起来 任何可以识别的文本日期数据都可以赋给日期变量 例 1949 10 01 10 01 1949 01 10 1949 Oct 01 1949 1949 10 01 10 01 1949 01 10 1949 1949 10 01 输入后显示的日期格式系统默认为 mm dd yyyy 以数字序列表示日期时 小数点左边表示日期 1为1899年12月31日 小数点右边表示时间 0为午夜0点0 5为中午12点 负数表示1899年12月31日之前的日期 例 Subaa DimdAsDated 1 1Debug PrintdEndSub 1899 12 3102 24 00 4 变体型数据 Variant 如果没有指定变量的具体数据类型 则系统默认该变量为变体型数据型 变体型是一种特殊的数据类型 除了定长字符数据及用户自定义类型外 可以包含任何种类的数据 具体类型由最近所赋的值确定 变体型数据可以包含Empty Error Nothing及Null等特殊值 可以用VarType和TypeName函数来检测Variant中的数据类型 5 对象型数据 Object 对象型数据用来表示图形 OLE对象或其它对象 对象型数据占4个字节的存储空间 对象型变量可引用应用程序中的对象 6 用户自定义数据类型 用户自定义数据类型是由用户自行建立 由一个或多个VBA标准数据类型或其它用户自定义数据类型组合而成的一种数据类型 用户自定义数据类型在关键字Type EndType之间定义 语法格式 TypeAsAs EndType 例 自定义一个新的类型MyType 该类型中包含3个元素 分别命名为 MyName 字符型 MyBirthday 日期型 MySex 逻辑型 TypeMyTypeMyNameAsStringMyBirthdayAsDateMySexAsBooleanEndType定义类型以后就可以象普通类型一样定义变量DimNewStuAsMyType 用户自定义数据类型变量赋值时 使用以下语法格式 语法格式 变量名 元素名 变量值 例 DimNewStuAsMyTypeNewStu MyName 史建平 NewStu MyBirthday 1988 10 01 NewStu MySex True 可以用关键字With EndWith简化赋值中的重复部分 例 DimNewStuAsMyTypeWithNewStu MyName 史建平 MyBirthday 1988 10 01 MySex TrueEndWith Access与VBA数据类型的对比 四 常量 变量与数组 常量是在程序运行过程中 其值不能被改变的量 变量是用于存储在程序运行时其值可以发生变化的量 每个变量都有其变量名 使用变量前可以指定其数据类型 也可以不指定其数据类型 数组是由一组具有相同数据类型的变量 即数组元素 构成的集合 1 常量Access中的常量有3种类型 符号常量用Const语句创建 并且在模块中使用的常量 内部常量是Access或引用库的一部分 系统常量True False Null Yes No On和Off等 1 符号常量如果在代码中要反复使用某个相同的值 或者代表一些具有特定意义的数字或字符串 可以使用符号常量 符号常量用Const语句来创建 创建时给出常量的值 语法格式 Public Private Const符号常量名 As数据类型 符号常量值 例 PublicConstPIAsSingle 3 1415927ConstNationalDayAsDate 1949 10 1 在程序运行过程中 符号常量只能作读取操作 不允许修改或为其重新赋值 不允许创建与内部常量和系统常量同名的符号常量 如果用As选项定义了符号常量的数据类型 且所赋值的数据类型与定义的数据类型不相同 那么 系统自动将值的数据类型转换为所定义的数据类型 如果不能转换将显示错误提示 符号常量有3个作用范围级别 局部级别 过程级别 私有级别和公共级别 符号常量一般以大写字母命名 以便与变量区分 变量一般用小写字母命名 2 内部常量 VBA提供了一些预定义的内部符号常量 它们主要作为DoCmd命令语句中的参数 内部常量以ac两个前辍字母指明了定义该常量的对象库 如 acForm acCmdsaveAs等 通过对象浏览器可以查看所有可用对象库中的内部常量 对象浏览器 的调用可以利用VBE界面 视图 菜单命令或工具栏中按钮实现 3 系统常量 系统定义的常量有七个 True False Null Yes No On和Off 系统常量可以在所有应用程序中直接使用 2 变量变量名 变量的数据类型和变量的值是变量的三要素 变量由变量名标识 1 变量的命名规则 变量名只能由字母 数字 汉字和下划线组成 不能含有空格和除下划线之外的其它字符 长度不能超过255个字符 变量名必须以字母 包括汉字 开头 且不区分字母的大小写 变量名不能使用VBA的关键字 不能与VBA的过程 函数和方法名同名 同一作用域内变量名必须唯一 注意区分变量的命名规则与字段名的命名规则 P63 2 变量的声明方法变量的声明方式有两种 隐式声明和显式声明 隐式声明 隐式声明是没有使用dim Public Private和Static等关键字来定义变量 而是直接使用变量 隐式声明的变量若其后无类型说明符来指明其数据类型时 默认为变体数据类型 隐式声明的变量只在当前过程中有效 即为局部变量 例 x ABC y 123 显式声明 Dim语句语法格式 Dim变量名1 As数据类型 变量名2 As数据类型 说明 如果不使用As选项来定义变量的数据类型 系统默认该变量为Variant数据类型 Dim语句一行中可以声明多个变量 各变量声明之间用逗号分隔 显式声明是指用Dim Private Public Static语句来定义变量的数据类型 例 Dima1AsInteger将a1定义为整型Dima2AsDouble将a2定义为双精度型Dima3AsString a4AsDate将a3定义为字符型 a4为日期型Dimmm为变体型变量Dimx y zAsSinglex y为变体型变量z为单精度型变量 类型说明符 隐式声明 使用类型说明符定义变量的数据类型时 必须将其放在变量名的最后 各种类型说明符详见教材P262 类型说明符定义变量属于隐式声明 例 Var1 1234Var2 123 45Var3 abc 短整数 双精度数 长整数 字符串 单精度 货币 VBA在判断一个变量的数据类型时 按以下顺序进行 Dim语句 数据类型说明符 没有使用Dim语句或类型说明符声明的变量 系统默认其为变体数据型 为了避免使用隐式声明变量 可以在程序开始处使用OptionExplicit语句来强制使用显式声明变量 在该方式下 如果变量没有经过显示声明或使用类型说明符 系统将提示错误 3 变量的使用范围因变量定义的位置与方式的不同 变量的作用域也有所不同 局部变量 过程级别变量 局部变量只能在定义它的过程内使用 在其它的过程中无法存取局部变量 私有变量 私有模块级别变量 私有变量只能在定义它的模块及其子过程内使用 而在其它模块中无法使用 公共变量 公共模块级别变量 在任何模块和过程中都可以访问公共变量 公共变量需要在模块的声明区域用Public声明 公共变量和私有变量必须在模块 或窗体 的声明区域中声明 语法格式 Public Private变量名As 数据类型 功能 定义全局变量或私有变量 说明 全局变量必须在模块的声明区域用Public定义 私有变量必须在模块的声明区域用Private或Dim定义 在过程中用Dim定义的一定是局部变量 Static是在过程级别中使用 用于声明变量并分配其存储空间 在整个代码运行期间都能保留使用Static语句声明的变量的值 且该变量与过程外的其它同名的变量无关 3种变量的定义方法及其作用域 3 数组 数组是用相同名称保存的一组有序的数据集合 一般情况下该集合中数据元素的数据类型是相同的 数组元素由数组名和数组下标构成 第一个数组元素的下标称为数组的下界 最后一个元素的下标称为数组的上界 1 数组的声明VBA中不允许隐式说明数组 即数组在使用前必须用Public Private或Dim语句进行声明 说明数组的大小 数据类型及作用范围 语法格式 Dim数组名 下标下界to 下标上界 As数据类型 Dim数组名 下标下界to 下标上界 As数据类型 说明 如果声明了数组的数据类型 则数组中的所有元素必须赋于相同的或可以转换的数据类型 As选项缺省时 数组中各元素为变体数据型 下标下界的默认值为0 如果设置下标下界为非0值 则要使用to选项 例 Dimaa 5 AsStringDimbb 1to10 1to20 Dimcc 2 2to5 5 AsInteger该数组是一个3维数组 第1维下标 0 2第2维下标 2 5第3维下标 0 5 可以在模块的通用声明部分用OptionBase来指定数组的默认下标下界 OptionBase1设置数组的下标下界为1 OptionBase0 语句的默认形式 设置数组的下标下界为默认值 2 数组的类型按照数组声明的方式 可以将数组分为两种类型 静态 固定 数组和动态数组 静态 固定 数组 静态数组中的元素个数在声明时被指定 静态数组在程序运行过程中不能改变数组元素的个数 例 Dima1 5 AsIntegerDima2 1to5 Dima3 3 5 AsLong 动态数组 动态数组中的元素个数在声明时不指定 动态数组在程序运行中可以改变数组的元素个数 动态数组定义步骤 用Dim语句声明一个空维数组 即 不指定数组的大小Dimb1 使用数组时用ReDim语句来指定数组的大小ReDimb1 2 3 说明 ReDim语句只能出现在过程中 可以改变数组的大小 上下界和数组的维数 使用ReDim重新声明数组后 原有数组元素中的值将全部清除并取其默认值 注意教材P268的叙述 若要保留数组中元素原有的值 则需在ReDim语句中加Preserve选项 例 Dima1 AsStringReDima1 5 ReDimPreservea1 UBound a1 5 UBound arrayname dimension 函数的功能是 返回数组指定维的最大可用下标 例 Dimb1 5 10 Debug PrintUBound b1 1 Debug PrintUBound b1 2 5 10 带Preserve选项的ReDim语句可以改变数组中最后一维的上界 但不能改变这一维的下界 改变下界将导致错误 若改变后的数组比原来小 则多余数据将丢失 例 例 3 数组的访问数组声明后 数组中的每个元素都可以单独使用 使用的方法与相同数据类型的普通变量相同 语法格式 数组名 下标值 说明 下标值是指定范围内 上下界之间 的一个整数 其值不能超出这个范围 如果是多维数组 则下标应是多个 不能多于数组维数 各整数间用逗号隔开 例 a1 0 0 ABC b1 3 123Debug Printb1 3 100 五 运算符和表达式1 运算符运算符是表示实现某种运算的符号 根据不同的运算 VBA中的运算符可分为4种类型 算术运算符 字符串运算符 关系运算符 逻辑运算符 P269 1 算术运算符算术运算符用来执行简单的算术运算 VBA提供了8种算术运算符 详见教材P269 算术运算符两边的操作数都应该是数值型 如果是数字字符或逻辑型 则系统自动将其转换成数值型后再进行运算 指数运算 求一个数的某次方 在运用乘方运算符时 只有当指数为整数值时 底数才可以为负数 例 3 42 1 2 811 4142 2 3 2 1 2 8出错True 3Flase 1 2 10 整数除法 对两个操作数做除法运算并返回一个整数 整数除法的操作数一般为整型 当操作数是小数时 首先被四舍五入为整型或长整型 然后再进行整除运算 如果运算结果是小数 系统自动将其截断为整型或长整数 不再进行四舍五入处理 例 11 33 666667 浮点除法 13 5 34 整数除法 操作数先被四舍五入 11 33 整数除法 运算结果不做四舍五入 7 3 2 字符串先转换为数值型 5 2 30 乘法的运算级别高于整除 3 56 7 3 52 浮点除法的级别高于整除 取模运算 Mod 对两个操作数做除法运算并返回余数 如果操作数有小数时 系统自动将其四舍五入为整数后再进行运算 结果的正负号与被除数相同 例 11Mod3212Mod30 11Mod3 211Mod 3211 4Mod3211 56Mod6 20 算术运算符两边的操作数都应该是数值型 如果是数字字符 逻辑型 则系统自动将其转换成数值型后再进行运算 如果是日期型可以加 减 一个整数 表示后推 前推 若干天 例 123 2True 2012519 2012 01 01 1 12 31 1899 1 2012 1 2 0 00 00 2012 10 1 2012 10 2 1 1900 1 1 1900 1 2 1900 1 4 2 字符串运算符字符串运算符就是将两个字符串连接起来生成一个新的字符串 字符串运算符有两个 运算符 运算符 运算符用于强制两个字符串的连接 由于符号 还是长整型定义符 在字符串变量使用运算符 时 变量与运算符之间必须加一个空格 例 x 123x 1949 10 1 作为长整型定义符 作为连接运算符 运算符 两边的操作数可以是字符型 数值型或日期型 进行连接操作前先将操作数的数据类型转换为字符型 然后再进行字符串的连接 例 123 ABC aa 123aa ABC aa ABC 123ABC 定义变量并赋值 123ABC 出错 运算符用于连接两个字符串 形成一个新的字符串 运算符两边的操作数必须都是字符串 由于符号 还是算术运算符 因此 如果两边的操作数都是数值型 则进行普通的加法运算 如果一个是数值型 另一个为数字字符串 则系统自动将数字字符串转化为数值 然后进行加法运算 如果一个是数值型 另一个为非数字字符串 则出错 例 ABC 123 ABC 123 ABC123ABC123 12 5 24 12 5 2412 52436 5 A12 5 24 A12 5 24A12 524出错 123 5 2001 09 11 123 52001 9 1112 5 2011 10 01 12 52011 10 1 2011 09 01 10 9999 12 31 12011 9 11溢出 运算符 与 的比较 日期所能表示的范围 100年1月1日至9999年12月31日注 年份如果是两位数0 29之间 系统解释为2000 2029年30 99之间 系统解释为1930 1999年 在VBA中 运算符 既可用作加法运算符 也可以用作字符串运算符 但运算符 专门作为字符串运算符 因此在有些情况下 用 比用 可能更为安全 3 关系运算符关系运算符用于对两个表达式比较大小 比较的结果将是一个逻辑值 即 若关系成立 则为真 True 反之则为假 False VBA提供了6种关系运算符 见教材P271 等于 abc abd False 大于 大于等于 小于等于 小于 不等于 abc abd 45 123 45 123 2012 1 1 2011 1 1 abcd ABCD False True True False False 在使用关系运算符时应注意以下原则 如果参与比较的两个操作数都是数值型 则按它们的大小进行比较 如果参与比较的两个操作数都是字符型 则从左到右一一对应比较 字母不区分大小写 且大于数字字符 汉字字符按汉语拼音比较大小 且大于西文字符 字符的大小顺序 汉字字符 字母 按字母顺序且大小写相同 数字 空格 注意教材P271的叙述 在VBA中 允许部分不同数据类型的量进行比较 如 数值型与逻辑型 数值型与日期型 日期型与逻辑型 日期型与数字字符 数值型与数字字符注 均转换为数值型后再进行比较 4 逻辑运算符逻辑运算符用于对两个逻辑量进行逻辑运算 其结果仍然是一个逻辑值 VBA的逻辑运算主要为 AND 与运算 OR 或运算 NOT 非运算 各个逻辑运算符的真值表 TrueTrue TrueFalse FalseTrue FalseFalse FalseTrueTrue FalseFalseTrue TrueFalseTrue TrueFalseFalse P271 2 表达式 1 表达式的组成 表达式由字面值 常量 变量 运算符 函数 标识符 逻辑量和括号等按一定的规则组成 表达式通过运算得出结果 运算结果的数据类型由操作数的数据类型和运算符共同决定 在算术运算表达式中 参与运算的操作数可能具有不同的数据精度 VBA规定 运算结果的数据类型采用精度高的数据类型 2 表达式的书写规则 要改变运算符的运算顺序 只能使用圆括号且必须成对出现 乘号不能省略 表达式从左至右书写 字母无大小写区分 注意 计算机表达式与数学不一样 3 运算优先级在一个运算表达式中 如果含有多种不同类型的运算符 则运算进行的先后顺序由运算符的优先级决定 圆括号的优先级别最高 因此可以用圆括号改变表达式的运算顺序 P272 例 100 5 2412 5 24 812 5 21 12Mod5 2 23 4 2 12 34 False 例 15FalseAnd A 12 FalseAnd A 12 FalseAnd A12 B FalseOrTrueAndTrueFalseOrTrueTrue 六 函数VBA提供了近百个内置的标准函数 以方便完成许多操作 函数的标准形式 函数名 参数列表 说明 函数名不可缺省 这是函数的标识 函数的参数可以是常量 变量或表达式 且置于函数名后的圆括号中 参数可以是一个或多个 多个参数之间用逗号隔开 函数无参数时 其后的圆括号可以省略 函数被调用时 都会返回一个特定类型的值 学习函数的要点 函数名 函数的功能和语法格式 参数的个数 数据类型以及每个参数的含义 包括缺省时的含义及默认值 函数的返回值及其数据类型 1 数学函数 1 绝对值函数语法格式 Abs Number 功能 返回参数的绝对值返回值数据类型 数值型说明 Number是任何有效的数值表达式 例 Abs 25 25Abs 100 24 5 25 21 2 向下取整函数语法格式 Int Number 功能 返回参数的向下取整的值返回值数据类型 数值型说明 参数为负值时返回小于等于参数值的最大负数 例 Int 2 5 2Int 2 5 3 3 取整函数语法格式 Fix Number 功能 返回参数的整数部分返回值数据类型 数值型说明 参数为负值时返回大于等于参数值的最小负数 注意与Int函数的不同之处 例 Int 2 5 Fix 2 5 22Int 2 4 Fix 2 4 3 2 4 开平方函数语法格式 Sqr Number 功能 计算参数的平方根返回值数据类型 双精度型说明 Number的值必须大于等于0 例 Sqr 9 Sqr Abs 16 34 5 三角函数语法格式 Sin Number Cos Number Tan Number 功能 计算参数的正弦 余弦和正切值返回值数据类型 双精度型说明 参数是以弧度为单位的角度值 例 ConstPIASSingle 3 1415927Sin PI 6 Tan PI 4 0 5000001 000000 6 随机函数语法格式 Rnd Number 功能 产生一个大于等于0 且小于1的随机数返回值数据类型 单精度型 例 Int 10 Rnd 产生1个 0 9 的随机整数Int 10 Rnd 1 产生1个 1 10 的随机整数 说明 Rnd函数产生的随机数序列与参数Number有关 如果想获得真正的随机数 那么应该在程序中将Randomize作为第一条命令 7 自然指数 对数 函数语法格式 Exp Expression 或者log Expression 功能 计算e的N次方或者计算以e为底的数值表达式的对数返回值数据类型 双精度型 8 四舍五入函数语法格式 Round Expression1 Expression2 功能 对Expression1的值按指定小数位数进行四舍五入返回值数据类型 双精度型 说明 Expression1的值是要进行四舍五入运算的值 Expression2的值表示在进行四舍五入运算时 小数点右边应该保留的位数 如果缺省则函数返回整数值 Expression2的值如果是小数 则先对其进行四舍五入到整数 再对Expression1进行四舍五入运算 函数能够接受的小数位数最多为14位 如果Expression2的值为负值 系统将作出错误提示 例 Round 234 2678 2 Round 234 2678 Round 234 2678 8 3 Round 234 2 678 2 Round 234 2678 1 如何产生1个 10 50 的随机整数 Int Rnd 41 10Round Rnd 40 10 234 27 234 234 268 234 27 出错 2 字符串函数 1 字符串检索函数语法格式 InStr Start String1 String2 Compare 功能 返回String2在String1中最早出现的位置返回值数据类型 长整型说明 String1为接受搜索的字符表达式 String2为被搜索的字符表达式 Start为数值表达式 设置搜索的起始位置 如果缺省 则从第一个字符的位置开始搜索 Compare指定字符串比较的方法 其值可以是 0做二进制比较1不区分大小写的文本比较2基于数据库中包含信息的比较 如果指定了Compare参数 则一定要有Start参数 例 InStr abcdABCD bc 2InStr 1 abcdABCD bc 2InStr bc 0InStr abcdABCD 1InStr 3 abcdABCD 10InStr 9 abcdABCD bc 0 例 InStr abcdABCD BC 2InStr 1 abcdABCD BC 0 6InStr 1 abcdABCD BC 1 2InStr 3 abcdABCD bc 1 6InStr 3 abcdABCD bc 0 0InStr abcdABCD Null InStr Null bc NullNull 2 字符串长度检测函数语法格式 Len String Varname 功能 返回字符串所含字符数返回值数据类型 长整型说明 a String为任何有效的字符常量表达式 函数返回的即为该字符串中所含的字符数 b Varname为任何有效的变量名 如果变量是字符型 不是定长的 则函数返回的即为该变量所含的字符数 未赋值时返回0 如果变量是除变体数据类型以外的其它数据类型 则函数返回的即为该数据类型所占空间 如果变量是变体数据类型 则返回将其值作为字符串后所含的字符数 例 Len AB ECD Len 南京 52 Len 1234 5678 Len 123 9出错x 123 45y 123 45 Len x Len y 48DimxAsString 10 x ABC Debug PrintLen x 10 例 x 123 4z True Len x Len z 54DimyAsDatey 10 15 2011 Debug PrintLen y 8 Len Null Null y 10 15 2011 Debug PrintLen y 10 3 字符串截取函数 Left 函数语法格式 Left String Length 功能 从字符表达式String左侧的第一个字符开始 截取由Length的值所指定的若干个字符 Right 函数语法格式 Right String Length 功能 从字符表达式String右侧的第一个字符开始 截取由Length的值所指定的若干个字符 Mid 函数语法格式 Mid String Start Length 功能 从字符表达式String返回一个子字符串此3个函数的返回值数据类型均为字符型 例 Left ABCD中国 8 5 ABCLeft ABCD中国 0 空字符串 Left ABCD中国 8 ABCD中国Right ABCD中国 4 CD中国Right ABCD中国 7 ABCD中国 例 Mid ABCD中国 3 8 CD中国Mid ABCD中国 12 2 空字符串 Mid ABCD中国 0 4 出错Mid ABCD中国 3 1 出错 4 生成空格字符函数语法格式 Space Number 功能 返回数值表达式所指定的空格数返回值数据类型 字符型说明 Number的值必须是个大于等于0的数 如果是负数 则出错 例 Space 1 2 Space 2 出错Space 0 空字符串 5 大小写转换函数 Ucase 函数语法格式 Ucase String 功能 将字符串中的小写字母转换成大写字母 Lcase 函数语法格式 Lcase String 功能 将字符串中的大写字母转换成小写字母此2个函数的返回值数据类型均为字符型 例 Ucase AbCd123 Lcase AbCd123 ABCD123abcd123 6 删除空格函数 LTrim 函数语法格式 LTrim String 功能 删除字符串的开始空格返回值数据类型 字符型 RTrim 函数语法格式 RTrim String 功能 删除字符串的尾部空格返回值数据类型 字符型 Trim 函数语法格式 Trim String 功能 删除字符串的开始和尾部空格返回值数据类型 字符型 String为任何有效的字符表达式 此三个函数均不能删除字符串的中间空格 例 LTrim AB CD AB CD RTrim AB CD AB CDTrim AB CD AB CD X Y RTrim AB CD L X Y AB CDL 3 日期 时间函数 1 系统日期和时间函数 Date 函数语法格式 Date 功能 返回当前系统的日期 Time 函数语法格式 Time 功能 返回当前系统的时间 Now 函数语法格式 Now 功能 返回当前系统的日期和时间 例 Date Time Now 返回的日期格式由操作系统设置的日期格式决定 True 2 截取日期分量函数 Year 函数语法格式 Year Date 功能 返回日期表达式的年份返回值数据类型 整型 Month 函数语法格式 Month Date 功能 返回日期表达式的月份返回值数据类型 整型 Day 函数语法格式 Day Date 功能 返回日期表达式的日期返回值数据类型 整型 例 Year 2011 10 01 2011Year Null NullYear 2010 10 20 2010Year 3 2 1899Year Oct 15 系统日期的年份 例 Month 2011 10 01 10Month Null NullMonth 2010 09 20 9Month 1 12Month Aug 15 8Month 0 12 例 Day 2011 10 01 1Day Null NullDay 1 29 Weekday 函数语法格式 Weekday Date Firstdayofweek 功能 返回指定日期是一周的第几天返回值数据类型 整型 例 2012年10月1日为星期一 则 Weekday 2012 10 01 2Weekday 2012 10 01 1 2Weekday 2012 10
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江西省九江市2026届九年级下学期中考一模数学试卷(含解析)
- 2025年丽江师范学院招聘笔试真题
- 电解质紊乱识别与临床护理
- 数字化色选机项目可行性研究报告
- 家长课堂游戏活动方案策划(3篇)
- 体育玩具大赛活动方案策划(3篇)
- 数据采集与处理 习题及答案汇 项目一数据采集与处理认知-商务数据分析与应用
- 药品自查报告(3篇)
- 2026年山西中考数学真题带答案
- 贵州省贵阳市重点学校高一入学语文分班考试试题及答案
- 庐山文旅笔试题目及答案
- 江苏省无锡市2025-2026学年四年级下学期6月数学期末调研试题(试卷+答案)
- 胃全切术后血糖管理
- (2026)继续教育公需课必修课考试题与参考答案(完整版)
- 2026年医师定期考核中医试题(附答案)
- 110kV变电站土建监理实施细则培训
- (2026版)植物检疫条例解读课件
- 《精装修施工工艺标准图册》
- 食品生产企业配料作业SOP指导书
- 中小学内控培训
- 卫生监督协管上墙制度
评论
0/150
提交评论