VBA编程入门.ppt_第1页
VBA编程入门.ppt_第2页
VBA编程入门.ppt_第3页
VBA编程入门.ppt_第4页
VBA编程入门.ppt_第5页
已阅读5页,还剩85页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第8章 VBA编程入门 内容提要 8 1VBA概念8 2VBA编程基础8 3VBA常用语句8 4VBA程序流程控制8 5数组8 6VBA与宏8 7小结及练习 VBA VisualBasicforApplication 是MicrosoftOffice系列软件的内置编程语言 其语法结构与VisualBasic编程语言互相兼容 采用的是面向对象的编程机制和可视化的编程环境 8 1VBA概述 8 1 1VBA简介 集合和对象VBA中的应用程序是由许多对象组成的 如表 窗体 查询等 对象是帮助构造应用程序的元素 以特定的方式组织这些对象 就形成了应用程序 数据库窗口把可供选择的对象排列在一起 形成不同的类 8 1 2面向对象程序设计的基本概念 对象的属性 事件和方法 属性属性描述了对象的自身性质 其格式为 对象名 属性 属性值事件事件是指可以发生在一个对象上且能够被该对象所识别的动作 如 单击某个命令按钮就产生该按钮的 单击 事件当某个对象发生某一事件后 就会驱动系统去执行预先编好的 与这一事件相对应的一段程序 方法方法是系统事先设计好的 可以完成一定操作的特殊过程 是附属于对象的行为和动作 在需要使用的时候可以直接调用 其调用格式为 对象名 方法名 Access中除数据库的7个对象外 还提供一个重要的对象 DoCmd对象除窗体 控件的SetFocus 获得控制焦点 方法外 用得最多得是DoCmd对象的一些方法 使用这些方法 可以在VBA中运行Access的操作 打开当前数据库中的 雇员 窗体DoCmd OpenForm Employees 在数据库窗口中选择 雇员 窗体DoCmd SelectObjectacForm Employees True在数据库窗口中关闭 雇员 窗体DoCmd CloseacForm Employees acSaveYes删除数据库中的 雇员 表DoCmd DeleteObject Employees DoCmd对象的常用方法 参照教材P190页 例8 1新建一个窗体并添加两个命令按钮 运行窗体后 单击第一个按钮 新式一个消息框 单击第二个按钮 退出当前窗体 参照教材P191页 通过此例 体会可视化编程 面向对象 事件过程 应用方法等基本概念 进入VBE编程环境VBE窗口的组成VBE窗口由工具栏 工程资源管理器窗口 属性窗口 代码窗口和立即窗口组成 在VBE环境中编写VBA代码 8 1 3VBA编程环境 标准工具条 视图MicrosoftAccess按钮 切换Access2000窗口 插入按钮 插入模块或过程 运行子过程 用户窗体按钮 运行模块中的程序 中断按钮 中断正在运行的程序 重新设置按钮 结束正在运行的程序 设置模式按钮 在设计模式和非设计模式之间切换 工程资源管理器按钮 用于打开工程资源管理器 属性窗口按钮 用于打开属性窗口 对象浏览器按钮 用于打开对象浏览器 VBE编程环境 8 2 1常量 变量 8 2VBA编程基础 常量 在程序运行中其存储的值不会改变 变量 在程序运行中其值可以改变 VBA使用常量 变量来存储值 用来保存在程序运行期间数据 常量在程序运行过程中 其值不会被改变的量称为常量 在VBA中有三类常量 直接常量如 10 20 123 0 AB VBA程序设计 等符号常量系统常量指VBA系统预先定义好的 用户可以直接引用的量 如 acForm acQuery vbOk vbRed 符号常量在程序中 某个常量多次被使用 则可以使用一个符号来代替该常量 这样不仅在书写上方便 而且有效地改进了程序的可读性和可维护性 VBA中使用关键字Const声明符号常量 其格式如下 Const常量名 类型符号 常数表达式如 ConstPI 3 1415926 变量是内存中的临时单元 存放在程序执行过程中产生的中间结果和最后输出结果 在程序中使用变量 就要给变量定义名称及类型 即对变量进行声明 变量 变量命名规则变量名必须以字母或汉字开头 后可跟字母 汉字 数字或下划线组成 不能含有小数点和空格 长度不超过255个字符的字符串 不能使用VBA中的关键字 VBA中不区分变量名的大小写 变量名的最后一个字符可以是 等表示数据类型的声明符 说明 常量名的命名规则与变量名的命名规则相同 8 2 2数据类型与变量的声明 在VBA中 数据类型用来决定变量可以保存何种数据 VBA支持多种数据类型 为用户编程提供了方便 参照教材P196页表8 1VBA的数据类型 VBA的数据类型 变量声明用Dim Static语句显式声明局部变量格式 Dim变量名 AS类型 或Dim变量名类型符语句中的 As类型 子句是可选的 如果使用该子句 就可以定义变量的数据类型 未使用 默认变量的类型为变体型 Variant 例如 DimiAsinteger s表示声明了一个名为i的整型变量和一个名为s的变体型变量 关键字Dim或Static的区别 Dim声明 随过程的调用而分配存贮单元 每次调用都对变量初始化 过程体结束 变量的内容自动消失 存储单元释放 Static声明 Static声明的变量 也称为静态变量 静态变量在程序运行过程中一直保留其值 即每次调用过程 变量保持原来的值 隐式声明变量未进行上述的声明而直接使用变量 称变量的隐式声明 采用隐式声明的变量都是变体型 Variant 注意 VBA中允许不事先声明而直接使用变量 可以通过语句OptionExplicit 来要求所使用的变量必须事先声明 否则VBA会发出警告信息 下面是一个简单的程序 其使用的变量a b Sum都没有事先定义 PrivateSubForm Click Sum 0a 10b 20Sum a bPrint Sum SumEndSub 良好的编程习惯应该是 先声明变量 后使用变量 这样做可以提高程序的效率 同时也使程序易于调试 VBA中可以强制显式声明 可以在窗体模块 标准模块和类模块的通用声明段中加入语句 OptionExplicit 声明而未赋值的变量的值为 数值型变量初始化为0 字符型变量为零长度字符串 变体型变量初始化为Empty 变量的初始化 8 2 3运算符和表达式 教材P199页 运算符算术运算符 例如 123 456 结果 123456 123 456 结果 123456 使用上 与 的区别 例如 abcdef 12345结果为 abcdef12345 123 456结果为 123456 abcdef 12345结果为出错 123 456结果为579 连接运算符 字符串连接 将两个操作数进行大小比较 结果为逻辑值 注意 字符串比较 则按字符的ASCII码值从左到右一一比较 直到出现不同的字符为止 关系运算符 将操作数进行逻辑运算 结果是逻辑值 逻辑运算符 组成由变量 常量 函数等运算对象加上运算符 圆括号组成的式子 书写规则 1 运算符不能相邻 例a b是错误的 2 乘号不能省略 例x乘以y应写成 x y 3 括号必须成对出现 均使用圆括号 4 表达式从左到右在同一基准上书写 无高低 运算优先级算术运算符 连接运算符 关系运算符 逻辑运算 表达式 例1 用人单位招聘秘书 年龄小于40岁的女性 学历专科或本科 年龄 40 性别 女 学历 专科 学历 本科 AndAndOr 例2 算术表达式 正确的VBA表达式 3 xAndx 7错误的VBA表达式 3 x 7或3 xOrx 7 考虑 若分别写成 年龄 40And性别 女 And 学历 专科 And学历 本科 年龄 40Or性别 女 Or 学历 专科 Or学历 本科 函数实际上是系统事先定义好的内部程序 用来完成特定的功能 VBA提供了大量的内部函数 供用户在编程时使用 函数的调用形式为 函数名 参数表 常用内部函数参照教材P201页表8 5常用内部函数 在立即窗口练习 体会函数的功能 8 2 4常用函数 InputBox函数InputBox 提示 标题 缺省 其中 提示 提示信息 标题 对话框标题 缺省 输入区缺省值 注意 函数的返回值为字符型数据 输入 输出函数 使用MsgBox 可以在对话框中显示文本信息 格式为 MsgBox 提示信息 按钮数目和类型 标题 MsgBox函数或方法 用于显示输出信息 MsgBox函数 变量 MsgBox 提示 按钮 标题 MsgBox方法 MsgBox提示 按钮 标题 8 3VBA常用语句 VBA代码不区分字母的大小写系统保留字自动转换每个单词的首字母大写 语句书写自由一行可书写几句语句 之间用冒号 分隔 一句语句可分若干行书写 用续行符将语句分开 8 3 1VBA语句书写规则 赋值语句 给变量 常量或对象的属性指定一个值或表达式 8 3 2VBA常用语句 格式 LET 变量名 表达式作用 将表达式的值赋值给变量名 一般用于给变量赋值或对控件设定属性值 例如 s 10Text1 Text 欢迎使用VBA 注意 虽然赋值号与关系运算符等于号都用 表示 VBA会根据所处的位置自动判断是何种意义的符号 声明语句 命名和定义常量 变量 数组以及过程 注释语句在程序中的适当位置加上注释语句有利于程序的维护和阅读 格式 Rem注释内容或用单引号 注释内容 结构化程序设计由顺序 分支 循环这3种基本结构所组成 8 4VBA程序流程控制 单行If语句格式 If表达式Then语句1 Else语句2 功能 If测试指定的条件 如果条件表达式为真 True 则执行Then后面的语句1 否则执行语句2 若Else子句未省略 分支结构 PrivateSubp1 DimxAsInteger yAsIntegerx InputBox 请输入x值 Ifx 0Theny 2 x 1MsgBox y yEndSub PrivateSubp1 DimxAsInteger yAsIntegerx InputBox 请输入x值 Ifx 0Theny 2 x 1Elsey 1MsgBox y yEndSub 根据输入x的值 观察y的输出结果 多行If语句格式 If表达式Then语句组1 Else语句组2 EndIf 多行If语句的执行过程是 如果 表达式 的值为真 则执行语句组1 否则执行语句组2 当执行完语句组1或语句组2后 程序流程跳转到语句EndIf的后面 语句组可以由一条或多条语句组成 语句组不能与Then书写在同一行 否则VBA认为是一个单行If语句 会导致Else没有匹配的If 语句 EndIf 是多行If语句的结束标志 在多行If语句中 即使省略Else子句 也要写该结束标志 省略Else子句时的多行If语句形式为 If表达式Then语句组EndIf 例 计算分段函数 单行If语句实现 Ifx 0Theny cos x x 3 3 xIfx0Theny sin x sqr x x 1 多行If语句实现 Ifx0Theny sin x sqr x x 1 Elsey cos x x 3 3 xEndIf If语句的嵌套If语句的嵌套是指If或Else后面的语句块中又包含If语句 IfThenIfThen EndIf EndIf 例 已知x y z三个数 使得x y z用一个IF语句和一个嵌套的IF语句实现 Ifx yThent x x y y tIfy zThent y y z z tIfx yThent x x y y tEndIfEndIf If语句的嵌套注意事项 书写锯齿型 If与EndIf配对 If Then ElseIf语句 多分支结构 IfThenElseIfThen Else语句块n 1 EndIf 不管有几个分支 依次判断 当某条件满足 执行相应的语句 其余分支不再执行 若条件都不满足 且有Else子句 则执行该语句块 否则什么也不执行 ElseIf不能写成ElseIf 说明 例 已知百分制成绩mark 显示对应的五级制成绩下列三种方法哪些正确 哪些错误 与同类型的下面四种形式之一 表达式例 A 一组枚举表达式 用逗号分隔 2 4 6 8表达式1To表达式260To100Is关系运算符表达式Is 60 SelectCase语句 情况语句 语句格式 SelectCase变量或表达式Case表达式列表1语句块1Case表达式列表2语句块2 CaseElse语句块n 1 EndSelect 数值型或字符串表达式 程序流程图 例 变量strC中存放了一个字符 判断该字符类型 用多分支结构实现 IfUcase strC A AndUcase strC 0 AndstrC 9 ThenPrintstrC 是数字字符 ElsePrintstrC 其他字符 EndIf用SelectCase语句实现 SelectCasestrCCase a To z A To Z PrintstrC 是字母字符 Case 0 To 9 PrintstrC 是数字字符 CaseElsePrintstrC 其他字符 EndSelect 例如 在输入成绩文本框中输入一个分数 单击 判断 命令按钮后 在成绩等级文本框中显示对应的成绩等级 输入的成绩在90 100分为A 80 89分为B 70 79分为C 60 69分为D 0 59分为E 否则显示出错信息 编程点拨 根据题意 当输入的成绩不在 0 100 内时 应显示出错信息 在该范围内时 应进行分等级 判断是否为合法成绩可用If语句 而分等级最好使用SelectCase语句 条件函数IIf函数形式为 IIf 表达式 当表达式为True时的值 当表达式为False时的值 例如 求x y中大的数 放入max变量中 max IIf x y x y 循环结构 参照教材P211页 For Next循环Do Loop循环 For Next循环结构 将一段程序重复执行指定的次数 其中使用一个计数变量 统计执行的次数 格式 For循环变量 初值to终值 Step步长 语句块 ExitFor 语句块Next 循环变量 For Next循环语句P211 功能 执行For语句时 循环变量 设为 初值 执行到Next语句时 步长加 减 到循环变量上 再执行For语句时 若 循环变量 超过 终值 则循环结束 步长 未指定值时默认为1 若 步长 是正数或0 则 初值 应大于等于 终值 否则 初值 应小于等于 终值 例 计算累加程序S 1 2 3 4 x 并输出结果 方法 接收一个累加的终值 确定一个循环变量 循环变量有2个作用 加数和循环变量 确定一个存储累加和的变量 使用循环计算 最后输出显示结果 DimsAsinteger xAsintegerx InputBox 请输入累加的终值 Forx lToxs s xNext思考 计算 1 3 5 7 X或2 4 6 8 X如何编写 例 计算累乘程序S 1 2 3 4 X方法 接收一个累乘的终值 确定一个循环变量 循环变量有2个作用 乘数和循环变量 确定一个存储累乘积的变量 使用循环计算 最后输出显示结果 DimSAsinteger iAsintegerx InputBox 请输入累加的终值 S 1Fori lToxS S iNext注意 累乘的乘数和乘积变量的初值为1 注意 出了循环 循环控制变量值的问题 例程序段 Fori 2To13Step3循环执行次数debug Printi输出i的值分别为 25811Nextidebug Printi出了循环输出为 i 14 例 改变循环控制变量对循环的影响PrivateSubCommand1 Click j 0Fori 1To20Step2i i 3j j 1Print 第 j 次循环i iNextiPrint 退出循环后i iEndSub正常情况 i 1 3 5 7 9 11 13 15 17 19现在 i 4 9 14 19 Do Loop循环语句 用于控制循环次数未知 形式1 Do While Until 语句块 ExitDo语句块 Loop 形式2 Do语句块 ExitDo语句块 Loop While Until Do Loop语句 循环结构 DoWhile Loop语句DoUntil Loop语句Do LoopWhile语句Do LoopUntil语句 DoWhile Loop语句 i 1DoWhilei 10s s ii i 1Loop当i 10成立时 执行循环体循环变量i必须有初值防止产生死循环有可能一次也不执行循环体 修改循环控制变量 改变加数值 Do LoopWhile i 1Dos s ii i 1LoopWhilei 10当i 10成立时 执行循环体循环变量i必须有初值防止产生死循环至少执行一次循环体 修改循环控制变量 改变加数值 DoUntil Loop i 1DoUntili 10s s ii i 1Loop当i 10成立时 结束执行循环体循环变量i必须有初值防止产生死循环有可能一次也不执行循环体 修改循环控制变量 改变加数值 Do LoopUntil i 1Dos s ii i 1LoopUntili 10当i 10成立时 结束执行循环体循环变量i必须有初值防止产生死循环至少执行一次循环体 修改循环控制变量 改变加数值 补充 While Wend语句格式如下 WhileWend说明 该语句的功能与DoWhile Loop实现的循环完全相同 三种循环语句 即For Do Loop 共同的特点是重复执行一个语句系列 循环体 不同点是控制重复次数的时机和方法不一样 参照教材P206 P214页实例 掌握程序的控制结构 数组 数组不是一种数据类型 而是一组相同类型的变量的集合 可以像使用普通变量一样使用数组中的每一个元素 使用数组的好处是用一个数组名代表逻辑上相关的一批数据 用下标表示该数组中的各个元素 可以提高处理数据的效率 缩短和简化程序 8 5数组 数组不是一种数据类型 而是一组相同类型的变量的集合 数组必须先声明后使用 两类数组 静态 定长 数组 动态 可变长 数组1 一维数组定义一维数组的形式 Dim数组名 下界To 上界 As类型 声明了数组的名 维数 大小 类型 8 5 1数组的定义 说明 数组名的命名规则与变量的命名相同 数组的元素个数 上界 下界 1 缺省为0 若希望下标从1开始 可在模块的通用部分使用OptionBase语句将设为1 其使用格式是 OptionBase0 1 后面的参数只能取0或1例如 OptionBase1 将数组声明中缺省下标设为1下界 和不能使用变量 必须是常量 常量可以是直接常量 符号常量 一般是整型常量 如果省略As子句 则数组的类型为变体类型 数组中各元素在内存占一片连续的存储空间 一维数组在内存中存放的顺序是按下标大小的顺序 例 Dimmark 1to100 AsInteger 例 Dima 1to3 AsInteger声明一维数组a 包含了5个整型元素a 1 a 0 a 1 a 2 a 3 在定义静态数组时 每一维的元素个数必须是常数 不能是变量或表达式 如 错误的声明 下标是变量Dimx n 或 n Inputbox 输入n Dimx n AsSingle 注意 在数组声明中的下标说明了数组的整体 即每维的大小 而在程序其他地方出现的下标表示数组中的一个元素 两者写法形式相同 但意义不同 例如 Dimx 10 AsIntegerx 10 100 表示声明了数组x 有11个数组元素 对x 10 这个数组元素赋值 定义二维数组的形式 Dim数组名 下界1To 上界1 下界2To 上界2 As类型 例如 Dima 2 3 AsSingle二维数组在内存的存放顺序是 先行后列 数组a的各元素在内存中的存放顺序是 a 0 0 a 0 1 a 0 2 a 0 3 a 1 0 a 1 1 a 1 2 a 1 3 a 2 0 a 2 1 a 2 2 a 2 3 2 二维数组 例 DimlArray 0To3 0To4 AsLong共有4 5个元素等价于 DimlArray 3 4 AsLong 动态数组指在声明数组时未给出数组的大小 省略括号中的下标 当要使用它时 随时用ReDim语句重新指出数组大小 形式如下 ReDim数组名 下标 下标2 As类型 例 PrivateSubS1 Dimx AsSingle n Inputbox 输入n ReDimx n EndSub 3 动态数组 说明 Dim Static Public声明语句是说明性语句 可出现在过程内或通用声明段 ReDim语句是执行语句 只能出现在过程内 在过程中可多次使用ReDim来改变数组元素的个数ReDim中的下标可以是常量 也可以是有了确定值的变量 如 n InputBox 输入n的值 ReDimArr n 静态数组在程序编译时分配存储单元 动态数组在运行时分配存储单元 一维数组元素的引用 使用形式 数组名 下标 其中 下标可以是常量 整型变量或表达式 例如 设有下面的数组A 10 B 10 AsInteger则下面的语句都是正确的 A 1 B 2 B 1 5 取数组元素运算A i B i 下标使用变量A i 2 B i 1 下标使用表达式注意 引用数组时不能下标越界 8 5 2数组的基本操作 1 数组元素的引用 引用二维数组的形式 数组名 下标1 下标2 下标1指定元素在二维表中所在的行 下标2指定元素在二维表中所在的列 例如 a 1 2 10a i 2 j a 2 3 2在程序中常常通过二重循环来操作使用二维数组元素 数组引用实例 通过循环给数组元素的初值Fori 1To10 A数组的每个元素值为1A i 1Nexti数组的输入 通过InputBox 函数 Fori 1To4Forj 1To5sc i j InputBox 输入sc i j 的值 NextjNexti 2 数组元素的输入 用户自定义数据类型也称为记录数据类型 它是在基本数据类型不能满足实际需要时 由用户以基本

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论