




已阅读5页,还剩74页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 12 04 2020 第7章VBA程序设计初步 3 12 04 2020 要点 7 1VBA概述7 2对象模型7 3数据类型7 4程序语句7 5数组 4 12 04 2020 7 1VBA概述 1 VBA简介VBA VisualBasicApplication 是MicrosoftOffice系列软件的内置编程语言 VBA的语法与独立运行的VisualBasic编程语言互相兼容 它使得在MicrosoftOffice系列软件中快速开发应用程序更加容易 且可以完成特殊的 复杂的操作 5 12 04 2020 7 1VBA概述 1 VBA简介VBA是面向对象的程序设计语言 面向对象程序设计是一种以对象为基础 以事件来驱动对象的程序设计方法 6 12 04 2020 7 1VBA概述 1 VBA简介 续 VBA和常用的程序开发语言VB非常相似 二者来自同一种编程语言 即BASIC VBA与VB所包含的对象级是相同的 也就是说 对于VB所支持对象的多数属性和方法 VBA也同样支持 但两者并非完全一致 在许多语法和功能上有所不同 VBA从VB中获得了主要的语法结构 另外又加上Office中的一些功能 7 12 04 2020 2 VBA编程环境 Office中提供的VBA开发界面称为VBE VisualBasicEditor 即可视化的Basic编程环境 在Access中 打开VBE窗口的方法有多种 在模块对象窗口单击 新建 按钮 或打开一个已存在的模块 都会打开VBE窗口 选择工具菜单中 宏 子菜单的 VisualBasic编辑器 命令 使用Alt F11快捷键打开VBE界面 或切换数据库窗口和VBE窗口 8 12 04 2020 2 VBA编程环境 9 12 04 2020 工具栏工程资源管理器窗口属性窗口代码窗口 10 12 04 2020 7 2对象模型 1 Access对象Access中的对象大多都有父子关系 有根对象 也有子对象 包括子对象的子对象等等 在VBA代码中访问对象 必须从根对象开始 逐步取其子对象 直到需要访问的对象为止 11 12 04 2020 Access根对象有6个 如表所示 12 12 04 2020 Forms是一个集合对象 包括当前数据库中所有打开的窗体对象 引用窗体对象的语法为Forms formname 其中的formname是窗体名每个Form对象都有一个Controls集合例如要引用窗体Form 窗体1上的控件Text1 可以显式或隐式地引用Controls集合 Forms Form 窗体1 Text1 隐式引用Forms Form 窗体1 Controls Text1 显示引用 13 12 04 2020 2 对象的属性在程序代码中 通过赋值的方式来设置对象的属性 格式为 对象 属性 属性值例如 Label1 Caption 学生成绩表 14 12 04 2020 3 对象的事件事件是发生在对象上的事情或消息 系统为每个对象预先定义了一系列的事件 如 Click 单击 DblClick 双击 等等 例如 按下按钮Command1时 文本框Text1的字体改变 PrivateSubCommand1 Click Text1 FontSize 14EndSub 15 12 04 2020 4 对象的方法 方法是一些系统封装起来的通用过程和函数 以方便用户的调用 对象方法的调用格式为 对象 方法 参数名表 例如 在立即窗口输出2 3的结果Debug Print2 3Subq1 定义了一个宏 名为 q1 Debug Print2 3EndSub 16 12 04 2020 4 对象的方法 除窗体 控件的SetFocus 获得控制焦点 Requery 更新数据 等方法外 用得最多的是DoCmd对象的一些方法 使用DoCmd对象的方法 可以在VBA中运行Access的操作 如执行打开窗体 OpenForm 关闭窗体 Close SelectObject 指定数据库对象 等操作 例如 打开 学生资料浏览 窗体的语句是DoCmd OpenForm 学生资料浏览 17 12 04 2020 例7 2 1 制作一个显示欢迎信息的窗体 P169 新建一个窗体 放置两个按钮和一个文本框 OptionCompareDatabasePrivateSubCommand1 Click Me Text1 SetFocusMe Text1 Text 您好 欢迎您学习VBA EndSub PrivateSubCommand2 Click Me Text1 SetFocusMe Text1 Text EndSubPrivateSubForm Load Me Caption 欢迎 EndSub 在 工具 菜单的 选项 的 编辑器格式 中 调整字体 18 12 04 2020 7 3数据类型 1 变量变量是在程序运行时发生变化的量 作用 保存计算结果设置属性指定方法的参数在过程间传递数据 19 12 04 2020 7 3数据类型 变量名是内存中存放数据的缓冲区的名字 在使用变量前必须先声明 通知VBA变量的名字和数据类型 变量命名应注意 变量名必须以字母开头 其最大长度为255 变量名不能包含下列字符 等 变量名不能包含空格 可以包含下划线 不能包括VBA中的关键字 在程序中有特定含义的词 运算符Or内置函数名Len Abs等等 20 12 04 2020 变量的类型 P170 21 12 04 2020 声明变量作用 指定变量的数据类型 变量的适用范围 作用域 显式声明变量 可以在变量被使用之前 在代码的任意位置进行声明 最好在程序的开始位置声明所有变量 可以用Dim语句声明变量 其格式为 Dim变量名 As类型 例如 DimxAsInteger即Dimx Dimx1AsInteger x2AsInteger x3AsSingle隐式声明变量 使用变量前不对变量类型进行明确声明 系统会默认为Variant数据类型 22 12 04 2020 2 常量 常量在程序运行期间 其值保持不变 常量可以是数字 字符串 也可以是其他值 每个应用程序都包含一组常量 用户也可以定义新常量 定义了常量 就可以在程序中使用它 不必再用实际值 VBA支持两种类型的常量 即内置常量和用户定义的常量 23 12 04 2020 2 常量 用户自定义常量在程序中经常用到某个常数值 或为了程序的阅读或修改方便 声明常量使用Const关键字 其格式为 Const常量名 As类型 表达式例如 ConstPI 3 141593 24 12 04 2020 3 运算符及优先级 算术运算 加 减 取负 乘 除 Mod 取模 整除 乘方 连接运算符 25 12 04 2020 3 运算符及优先级 关系运算符 等于 不等于 大于 大于等于 小于等于 逻辑运算符Imp 包含 Eqv 等价于 Xor 异或 Or 或 And 与 Not 非 26 12 04 2020 3 运算符及优先级 优先级 P173 算术运算符 连接运算符 关系运算符 逻辑运算符 27 12 04 2020 4 表达式 定义 表达式由运算符 数值和标识符组成 P172 表达式书写规则 1 每个符号占一格 所有符号必须并排写在同一横线上 不能在右上角或右下角写方次或下标 例如 X3写成X 3 X1 X2写成X1 X2 2 所有运算符都不能省略 例如 2X写成2 X 28 12 04 2020 4 表达式 3 所有括号都用小括号 成对出现 例如 5 X 2 Y Z 必须写成5 X Y Z 4 数学表达式中的有些符号需要修改 例如 2 R可改写为2 PI R例如 数学表达式写成VBA表达式为 b sqr b 2 4 a c 2 a 29 12 04 2020 5 内置函数 VBA提供的内置函数按其功能可分为数学函数 字符串函数 日期函数 转换函数等 常用内置函数见P174表7 3 3 30 12 04 2020 1MsgBox函数MsgBox 提示 按钮 标题 例7 3 1 P175 PrivateSubForm Load DimIntResponseAsInteger StrTitleAsStringStrTitle MsgBox示例 IntResponse MsgBox 停止处理 19 StrTitle IfIntResponse vbYesThenMsgBox 你按下的是 确认 键 ElseMsgBox 你按下的不是 确认 键 EndIfEndSub 31 12 04 2020 2InputBox函数InputBox 提示 标题 默认 X坐标位置 Y坐标位置 例7 3 2 PrivateSubForm Load DimStrMsgAsString StrTitleAsString StrNameAsStringStrMsg 请输入你的名字 StrTitle InputBox示例 StrName InputBox StrMsg StrTitle 李四 EndSub 32 12 04 2020 7 4程序语句 VBA中的语句是执行具体操作的指令 每个语句以Enter 回车 结束 语句由VBA关键字 属性 函数 运算符以及VBE可以识别的指令符号组合而成 33 12 04 2020 7 4程序语句 书写程序语句时遵循的构造规则称为语法 缺省情况下 输入语句时 VBA将自动对输入的内容进行语法检查 发现错误会弹出一个信息框提示出错的原因 VBA按约定对语句进行简单的格式化处理 例如关键字 函数的第一个字母自动变为大写 34 12 04 2020 7 4程序语句 书写程序的语法规则一般情况下 一行输入一个语句 允许使用复合语句 即把几个语句放在一行中 各语句间用冒号 分隔 一个语句也可分若干行书写 在要续行的行尾加入续行符 空格和下划线 见P176 35 12 04 2020 7 4程序语句 VBA具有结构化程序设计的三种基本结构 顺序结构选择结构循环结构 36 12 04 2020 1 赋值语句 赋值语句是程序语言中最基本的语句 其格式为 例如 Total 100ReadOut GoodMorning Text1 Text 请输入您的姓名 A 35 Total 2 37 12 04 2020 1 赋值语句 注意 P177 赋值语句兼有计算与赋值的双重功能 右边表达式类型与左边变量类型不同时 要进行类型的转换 赋值号左边只能是变量 不能是常量或表达式 38 12 04 2020 1 赋值语句 不能在一条赋值语句中 同时给多个变量赋值 反例 Dimx y z x y z 50运行结果为x 0因为系统只将最左边的 作为赋值符号 另外两个 当作关系运算符 y z默认初值为0 则y z比较 结果为真 1 而 1与50比较 结果为假 0用With语句可以给一个对象的多个属性同时赋值 P177例7 4 1 39 12 04 2020 40 12 04 2020 41 12 04 2020 42 12 04 2020 例7 4 3 某商场促销采用购物打折的办法 顾客一次购物在1000元以上者 按八折优惠 在500元以上 但不足1000元者 按八五折优惠 在300元以上 但不足500元者 按九折优惠 在100元以上 但不足300元者 按九五折优惠 不足100元者 没有优惠 P179 则计算折扣的程序代码为 DimaAsSingle bAsSingle a为原价 b为折扣后应付款Ifa 1000Thenb 0 8 aElseIfa 500Thenb 0 85 aElseIfa 300Thenb 0 9 a ElseIfa 100Thenb 0 95 aElseb aEndIf 43 12 04 2020 44 12 04 2020 3 条件语句二SelectCase语句 例7 4 5SelectCaseaCaseIs 1000b 0 8 aCaseIs 500b 0 85 aCaseIs 300b 0 9 aCaseIs 100b 0 95 aCaseElseb aEndSelect 45 12 04 2020 在实际中遇到操作过程不太复杂 但需要重复相同处理的问题 比如 统计本单位所有人员的工资 求全班同学各科的平均成绩等等 如果用顺序结构来处理 是一个非常乏味且冗长的程序 例如 求自然数1 100的和 用顺序结构 程序如下 4 循环语句 46 12 04 2020 PrivateSubForm Click Dims x s 0 x 1s s xx x 1s s xx x 1s s x x x 1 x的值累加到99s s xEndSub 4 循环语句 解决这类问题最好用循环语句 循环就是重复地执行同一组语句 47 12 04 2020 新建一个窗体 添加一个文本框 名称为text0 在窗体上添加如下代码 PrivateSubForm Click Dims x s 0Forx 1To99Step1s s xNextxtext0 value 自然数1 100的和 sEndSub 4 循环语句 48 12 04 2020 VBA提供两种不同风格的循环语句 For Next语句Do Loop语句循环结构适合处理过程相同 数据相关 但具体值不同的问题 4 循环语句 49 12 04 2020 For循环的一般格式 For循环变量 初值To终值 Step步长 循环体 Next 循环变量 参见下页图示 4 循环语句一For循环 例 Forn 1To10s s nNextn 50 12 04 2020 4 循环语句一For循环 执行过程1 系统将初值赋给循环变量 并自动记下终值和步长 2 检查循环变量的值是否超过终值 如果超过就结束循环 执行Next后面的语句 否则 执行一次循环体 3 执行Next语句 将循环变量增加一个步长值再赋给循环变量 转到 2 继续执行 51 12 04 2020 说明 循环变量 或循环控制变量 必须为数值型 初值 终值 数值型 可以是数值表达式 步长 循环变量的增量 是数值表达式 其值为正 初值应小于终值 若为负 初值应大于终值 步长不能是0 如果步长是1 Step1可略去不写 循环体 在For和Next之间的语句序列 Next后面的循环变量与For语句中的循环变量必须相同 4 循环语句一For循环 52 12 04 2020 注意 For语句和Next语句必须成对出现 缺一不可 且For语句必须在Next语句之前 循环次数由循环的初值 终值和步长确定 计算公式为 循环次数 Int 终值 初值 步长 1 4 循环语句一For循环 53 12 04 2020 例 求N N为自然数 分析 由阶乘的定义N 1 2 N 2 N 1 N N 1 N即自然数的阶乘 等于该自然数与前一个自然数阶乘的乘积 4 循环语句一For循环 54 12 04 2020 程序如下 PrivateSubcmd1 Click DimIAsIntegerDimfAsLongDimnAsIntegern InputBox 输入一个自然数 输入提示 10 f 1ForI 1Tonf f INextIlabel1 Caption n 的阶乘是 fEndSub 4 循环语句一For循环 55 12 04 2020 For循环需要预先知道循环次数 对于不能预先确定循环次数 只知道控制条件的情况 可以使用Do循环 Do Loop循环可以根据需要决定是条件满足时执行循环体 还是一直执行循环体直到条件满足 具有很强的灵活性 5 循环语句二Do Loop循环语句 56 12 04 2020 形式1 Do While Until 语句块 ExitDo 语句块 Loop 57 12 04 2020 形式2 Do 语句块 ExitDo 语句块 Loop While Until 58 12 04 2020 例 以下循环的执行次数是 k 0dowhilek 2k k 1loop 例 以下循环的执行次数是 k 0dountilk 2k k 1loop 59 12 04 2020 例 阅读程序 结果是 n 0don n 1debug printnloopuntiln 2 例 阅读程序 结果是 n 0don n 1debug printnloopwhilen 2 60 12 04 2020 注意 Do循环中 While语句指定循环开始的条件 当 Until语句指定循环结束的条件 直到 Do循环本身不能修改循环条件 必须在循环体内设置相应语句 如 n n 1 使得整个循环趋于结束 以避免死循环 能用For Next循环编写的程序 都可以用Do循环来实现 反之 则不尽然 61 12 04 2020 循环的嵌套 For循环和Do循环都可以嵌套 且可以互相嵌套 但必须满足以下条件 外循环必须完全包含内循环 不能交叉 外循环变量与内循环变量不能同名 例 i 1 j 1 s 0 n 0Fori 1to3Forj 1to4s i j n n sNextNext 62 12 04 2020 循环的强制退出 在某些情况下 为了减少循环次数或便于程序调试 需要提前强制退出循环 VBA为For Next和Do Loop循环语句提供了相应的强制退出循环的语句 63 12 04 2020 1 ExitFor该语句用于For Next循环 在循环体中可以出现一次或多次 当系统执行到该语句时 就强制退出当前循环 常用格式是 If条件ThenExitFor即当循环执行过程中满足某个条件时 就结束循环 循环的强制退出 64 12 04 2020 2 ExitDo该语句用于Do Loop循环 具体用法同ExitFor一样 循环的强制退出 65 12 04 2020 7 5数组 1 数组的定义数组是一组相同类型变量的集合 必须先声明后使用 在程序中使用数组的好处是用一个数据名代表逻辑上相关的一批数据 用下标表示该数组中的各个元素 数组的形式 数组名 下标1 下标2 例如 name 30 或A 2 3 66 12 04 2020 7 5数组 数组分为两类 静态 定长 数组动态 可变长 数组静态数组的声明Dim数组名 下标1 下标2 As数据类型 例如 DimS 10 AsSingleDimSu 3 4 AsInteger Sd 1To3 3To4 AsInteger数组中元素的排列 见P185表7 5 1 67 12 04 2020 说明 声明了数组名 维数 大小 类型维数 几个下标为几维数组 下标 必须为常数 下界To 上界 省略下界为0 每一维大小 上界 下界 1数组大小 每一维大小的乘积例1 Dimmark 1to100 AsInteger 68 12 04 2020 例2 DimlArray 0To3 0To4 AsLong数组lArray共有4 5个元素等价于 DimlArray 3 4 AsLong 69 12 04 2020 注意 数组声明中的下标说明了数组的整体 即每维的大小 而在程序其他地方出现的下标表示数组中的一个元素 两者写法形式相同 但意义不同 例如 Dimx 10 AsInteger 声明x数组有11个元素而x 10 100 对x 数组中下标为10的元素赋值 70 12 04 2020 动态数组的声明动态数组在声明数组时 不指定数组中的元素个数 使用它时 再按需要用ReDim语句指定数组的大小 ReDim语句的格式为 ReDim数组名 下标1 下标2 As数据类型 例如 声明数组时 不指定元素个数 DimS AsSingleDimScore AsSingle 71 12 04 2020 例7 5 1 使用动态数组 P185 OptionCompareDatabaseDimStname AsString Strecord AsIntegerPrivateSubCommand2 Click n 50i 3ReDimStname n ReDimStrecord 1Toi n EndSub 72 12 04 2020 2 数组处理 定义数组时 用数组名表示该数组的整体 例如 DimA 10 表示数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机电设备安装电气安全防护方案
- 水泥与混凝土配比优化方案
- 水稻贪青课件
- 机电设备安装气动控制系统方案
- 园区创新资源对接方案
- 水电站税务知识培训课件
- 支气管哮喘口腔医10课件
- 水电收费课件
- 2025版海洋工程设计与施工合同样本
- 2025版国际金融合作贷款合同范本(含信用证)
- MissionPlanner地面站操作使用文档
- 中级采气工操作技能鉴定要素细目表
- 油水气井带压井作业操作规程及工艺技术要求
- (33)-钠钾泵细胞生物学
- 配电室巡检记录表
- 紧急宫颈环扎术的手术指征及术后管理
- GB/T 242-2007金属管扩口试验方法
- 政治理论水平任职资格考试题库
- 路基压实度汇总表
- 【食品生产加工技术】香肠的加工技术
- 贫困户访谈记录
评论
0/150
提交评论