学习VBA基础知识ppt课件.ppt_第1页
学习VBA基础知识ppt课件.ppt_第2页
学习VBA基础知识ppt课件.ppt_第3页
学习VBA基础知识ppt课件.ppt_第4页
学习VBA基础知识ppt课件.ppt_第5页
已阅读5页,还剩104页未读 继续免费阅读

下载本文档

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

文档简介

VBA基础 2020 3 30 数组 VBA程序流程控制 VBA常用语句 VBA编程基础 VBA概念 VBA概念 1 1VBA简介 VBA VisualBasicforApplication 是MicrosoftOffice系列软件的内置编程语言 其语法结构与VisualBasic编程语言互相兼容 采用的是面向对象的编程机制和可视化的编程环境 1 2面向对象程序设计的基本概念 1 集合和对象VBA中的应用程序是由许多对象组成的 如表 窗体 查询等 对象是帮助构造应用程序的元素 以特定的方式组织这些对象 就形成了应用程序 2 对象的属性 事件和方法属性属性描述了对象的自身性质其格式为 对象名 属性 属性值 1 2面向对象程序设计的基本概念 事件事件是指可以发生在一个对象上且能够被该对象所识别的动作 如 单击某个命令按钮就产生该按钮的 单击 事件当某个对象发生某一事件后 就会驱动系统去执行预先编好的 与这一事件相对应的一段程序 方法方法是系统事先设计好的 可以完成一定操作的特殊过程 是附属于对象的行为和动作 在需要使用的时候可以直接调用 其格式为 对象名 方法名 常见对象及其含义 1 3VBA编程环境 VBA中的程序与函数共有 种 一般程序 Sub 事件程序 Event 属性程序 Property 和函数 Function VBA程序窗口共 种 代码窗口 立即窗口 本地窗口 监视窗口 工程资源管理器和属性窗口在VBE环境中编写VBA代码 工程窗口 选择对象 属性窗口 选择对象的属性 代码窗口 选择事件 VBE编程环境 标准工具条 视图MicrosoftExcel按钮 切换Excel窗口 插入按钮 插入模块或过程 运行子过程 用户窗体按钮 运行模块中的程序 中断按钮 中断正在运行的程序 重新设置按钮 结束正在运行的程序 设置模式按钮 在设计模式和非设计模式之间切换 工程资源管理器按钮 用于打开工程资源管理器 属性窗口按钮 用于打开属性窗口 对象浏览器按钮 用于打开对象浏览器 MicrosoftExcel 插入模块 运行子过程 用户窗体 设计模式 中断 重新设计 工程资源管理器 对象浏览器 属性窗口 新建一个窗体并添加两个命令按钮 运行窗体后 单击第一个按钮 显示一个消息框 单击第二个按钮 退出当前窗体 通过此例 体会可视化编程 面向对象 事件过程 应用方法等基本概念 数组 VBA程序流程控制 VBA常用语句 VBA编程基础 VBA概念 VBA编程基础 2 1常量 变量 VBA使用常量 变量来存储值 用来保存在程序运行期间数据 常量 在程序运行中其存储的值不会改变 变量 在程序运行中其值可以改变 2 1 1常量 在程序运行过程中 其值不会被改变的量称为常量 在VBA中有三类常量 1 直接常量如 10 20 123 0 AB VBA程序设计 等2 符号常量3 系统常量指VBA系统预先定义好的 用户可以直接引用的量 如 acForm acQuery vbOk vbRed 符号常量 在程序中 某个常量多次被使用 则可以使用一个符号来代替该常量 这样不仅在书写上方便 而且有效地改进了程序的可读性和可维护性 VBA中使用关键字Const声明符号常量 其格式如下 Const常量名 类型符号 常数表达式如 ConstPI 3 1415926 2 1 2变量 变量是内存中的临时单元 存放在程序执行过程中产生的中间结果和最后输出结果 在程序中使用变量 就要给变量定义名称及类型 即对变量进行声明 变量命名规则 1 变量名必须以字母或汉字开头 后可跟字母 汉字 数字或下划线组成 不能含有小数点和空格 长度不超过255个字符的字符串 2 不能使用VBA中的关键字 3 VBA中不区分变量名的大小写 4 变量名的最后一个字符可以是 等表示数据类型的声明符 说明 常量名的命名规则与变量名的命名规则相同 2 2数据类型与变量的声明 在VBA中 数据类型用来决定变量可以保存何种数据 VBA支持多种数据类型 为用户编程提供了方便 2 2 1VBA的数据类型 2 2 2变量声明 用Dim或Static语句显式声明局部变量格式 Dim变量名 AS类型 或Dim变量名类型符语句中的 As类型 子句是可选的 如果使用该子句 就可以定义变量的数据类型 未使用 默认变量的类型为变体型 Variant 例如 DimiAsinteger s表示声明了一个名为i的整型变量和一个名为s的变体型变量 关键字Dim或Static的区别 Dim声明 随过程的调用而分配存贮单元 每次调用都对变量初始化 过程体结束 变量的内容自动消失 存储单元释放 Static声明 Static声明的变量 也称为静态变量 静态变量在程序运行过程中一直保留其值 即每次调用过程 变量保持原来的值 数据类型的转换函数列表 识别数据类型的函数TypeName Subabc DimiAsIntegerDimstrAsStringi 10MsgBoxTypeName i str CStr i MsgBoxTypeName str EndSub 隐式声明变量 未进行上述的声明而直接使用变量 称变量的隐式声明 采用隐式声明的变量都是变体型 Variant 注意 VBA中允许不事先声明而直接使用变量 可以通过语句OptionExplicit 来要求所使用的变量必须事先声明 否则VBA会发出警告信息 变量a b Sum都没有事先定义 PrivateSubForm Click Sum 0a 10b 20Sum a bDebug Print Sum SumEndSub 良好的编程习惯应该是 先声明变量 后使用变量 这样做可以提高程序的效率 同时也使程序易于调试 VBA中可以强制显式声明 可以在窗体模块 标准模块和类模块的通用声明段中加入语句 OptionExplicit 变量的初始化 声明而未赋值的变量的值为 数值型变量初始化为0 字符型变量为零长度字符串 变体型变量初始化为Empty 2 3 1算术运算符 2 3 2连接运算符 连接运算符 字符串连接 例如 123 456 结果 123456 123 456 结果 123456 使用上 与 的区别 例如 abcdef 12345结果为 abcdef12345 123 456结果为 123456 abcdef 12345结果为出错 123 456结果为579 2 3 3关系运算符 将两个操作数进行大小比较 结果为逻辑值 注意 字符串比较 则按字符的ASCII码值从左到右一一比较 直到出现不同的字符为止 2 3 4逻辑运算符 将操作数进行逻辑运算 结果是逻辑值 举例 例1 用人单位招聘秘书 年龄小于40岁的女性 学历专科或本科 正确的VBA表达式 3 xAndx 7错误的VBA表达式 3 x 7或3 xOrx 7 年龄 40 性别 女 学历 专科 学历 本科 AndAndOr 例2 算术表达式 2 3 5简单的字符处理函数 OptionCompare设置字符串比较规则 OptionCompare Binary Text Database OptionCompareBinary 是根据字符的内部二进制表示导出的一种排序A Z a z 汉字OptionCompareText 是根据系统区域确定的一种不区分大小写的一种排序 A a B b Z z 结果 True 结果 False StrComp比较两个字符串 StrConv字符串类型转换 StrConv字符串类型转换 例 MsgBoxstrConv English vbUpperCase Chr 10 strConv English vbLowerCase Chr 10 strConv english vbProperCase Chr 10 strConv English vbWide Format格式化字符串 MsgBoxFORMAT Date yyyy年m月d日 Chr 10 FORMAT Date aaaa vbaOKOnly 现在是 LCase UCase大小写转换 Sub大小写转换 MsgBoxLCase HELLOWORLD Chr 10 UCase helloworld EndSub String Space重复字符 Sub重复字符 MsgBoxString 5 Space 3 String 5 EndSub Lset Rset字符串往左 右对齐 Sub字符左右对齐 Dimstr1 str2AsStringstr1 大连华信计算机技术股份有限公司 LSetstr1 华信培训 str2 大连华信计算机技术股份有限公司 RSetstr2 华信培训 MsgBox str1 Chr 10 str2 EndSub Instr返回字符出现位置 Sub查找位置 MsgBoxInStr 大连华信计算机技术股份有限公司 信 EndSub Left Mid Right从左 中 右取值 Sub取值 DimstrAsStringstr 大连华信计算机技术股份有限公司 MsgBoxLeft str 2 Mid str 3 2 Right str 2 EndSub LTrim RTrim Trim去除空格 Subabc Dimstr1 str2AsStringstr1 大连 str2 华信 MsgBoxTrim str1 str2 666 MsgBoxLTrim str1 RTrim str2 666 EndSub Like字符串相似度比较 Subabc result stringlikpattern 任何单一字符 零个或多个字符 任何一个数字 0 9 Dimstr1AsStringstr1 abda Ifstr1Like ThenMsgBox 相似 Ifstr1Like a ThenMsgBox 相似 If1234Like ThenMsgBox 相似 EndSub 2 4表达式 组成由变量 常量 函数等运算对象加上运算符 圆括号组成的式子 书写规则 1 运算符不能相邻 例a b是错误的 2 乘号不能省略 例x乘以y应写成 x y 3 括号必须成对出现 均使用圆括号 4 表达式从左到右在同一基准上书写 无高低 运算优先级算术运算符 连接运算符 关系运算符 逻辑运算 2 5常用函数 函数实际上是系统事先定义好的内部程序 用来完成特定的功能 VBA提供了大量的内部函数 供用户在编程时使用 函数的调用形式为 函数名 参数表 常用内部函数常用内部函数 在立即窗口练习 体会函数的功能 请参照 VBA函数参考手册 2 6模块 函数和过程 模块是自定义的过程 函数保存的地方 也是录制的宏保存的场所 有两种基本类型的模块 类模块和标准模块 模块可以通过右键单击工程资源管理器的工程名 选择 插入 模块 来新建 新建的模块缺省的名称为 模块1 模块2 建议在属性窗口内更改为有意义的名称 模块任务 1 保存过程和函数 2 定义模块内的私有变量或整个工程的公有变量 2 7过程 过程是最基本的运行单位语法 Private Public Friend Static Subname arglist statements ExitSub statements EndSub在以上程序中 Sub代表过程种类 表示运行指定的操作 但不返回运行结果 部分描述 2 8函数 函数是具有返回值的过程语法 Public Private Friend Static Functionname arglist Astype statements name expression ExitFunction statements name expression EndFunction 部分描述 函数和过程区别 调用一个过程 Sub 时 必须键入过程名称以及任何需要的参数值 Call语句可有可无 如果使用它 则参数必须以括号括起来 调用函数 Function 时 为了使用函数的返回值 必须指定函数给变量 并且用括号将参数封闭起来 数组 VBA程序流程控制 VBA常用语句 VBA编程基础 VBA概念 VBA常用语句 3 1VBA语句书写规则 VBA代码不区分字母的大小写系统保留字自动转换每个单词的首字母大写 语句书写自由一行可书写几句语句 之间用冒号 分隔 一句语句可分若干行书写 用续行符 将语句分开 3 2VBA常用语句 赋值语句 给变量 常量或对象的属性指定一个值或表达式 格式 变量名 表达式作用 将表达式的值赋值给变量名 一般用于给变量赋值或对控件设定属性值 例如 s 10Text1 Text 欢迎使用VBA 注意 虽然赋值号与关系运算符等于号都用 表示 VBA会根据所处的位置自动判断是何种意义的符号 声明语句 命名和定义常量 变量 数组以及过程 注释语句在程序中的适当位置加上注释语句有利于程序的维护和阅读 格式 Rem注释内容或用单引号 注释内容 数组 VBA程序流程控制 VBA常用语句 VBA编程基础 VBA概念 VBA程序流程控制 顺序 分支 循环 结构化程序设计由顺序 分支 循环这3种基本结构所组成 4 1分支结构 单行If语句格式 If表达式Then语句1 Else语句2 功能 If测试指定的条件 如果条件表达式为真 True 则执行Then后面的语句1 否则执行语句2 若Else子句未省略 PrivateSubp1 DimxAsInteger yAsIntegerx InputBox 请输入x值 Ifx 0Theny 2 x 1Elsey 1MsgBox y yEndSub 根据输入x的值 观察y的输出结果 单行If语句举例 多行If语句 语句组可以由一条或多条语句组成 语句组不能与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配对 IfThenElseIfThen Else语句块n 1 EndIf If Then ElseIf语句 多分支结构 说明 不管有几个分支 依次判断 当某条件满足 执行相应的语句 其余分支不再执行 若条件都不满足 且有Else子句 则执行该语句块 否则什么也不执行 ElseIf不能写成ElseIf 例 已知百分制成绩mark 显示对应的五级制成绩下列三种方法哪些正确 哪些错误 与同类型的下面四种形式之一 表达式例 A 一组枚举表达式 用逗号分隔 2 4 6 8表达式1To表达式260To100Is关系运算符表达式Is 60 语句格式 SelectCase变量或表达式Case表达式列表1语句块1Case表达式列表2语句块2 CaseElse语句块n 1 EndSelect 数值型或字符串表达式 SelectCase语句 情况语句 程序流程图 变量strC中存放一个字符 判断该字符类型 例如 在输入成绩文本框中输入一个分数 单击 判断 命令按钮后 在成绩等级文本框中显示对应的成绩等级 输入的成绩在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 循环结构 For Next循环Do Loop循环 For Next循环语句 For Next循环结构 将一段程序重复执行指定的次数 其中使用一个计数变量 统计执行的次数 格式 For循环变量 初值to终值 Step步长 语句块 ExitFor 语句块Next 循环变量 注意 功能 执行For语句时 循环变量 设为 初值 执行到Next语句时 步长加 减 到循环变量上 再执行For语句时 若 循环变量 超过 终值 则循环结束 步长 未指定值时默认为1 若 步长 是正数或0 则 初值 应大于等于 终值 否则 初值 应小于等于 终值 例 计算累加程序S 1 2 3 4 x 并输出结果 方法 接收一个累加的终值 确定一个循环变量 循环变量有2个作用 加数和循环变量 确定一个存储累加和的变量 使用循环计算 最后输出显示结果 DimsAsinteger xAsintegerx InputBox 请输入累加的终值 Fori lToxs s iNext思考 计算 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循环语句 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 共同的特点是重复执行一个语句系列 循环体 不同点是控制重复次数的时机和方法不一样 数组 VBA程序流程控制 VBA常用语句 VBA编程基础 VBA概念 数组 5 1数组的概念 数组 数组不是一种数据类型 而是一组相同类型的变量的集合 可以像使用普通变量一样使用数组中的每一个元素 使用数组的好处是用一个数组名代表逻辑上相关的一批数据 用下标表示该数组中的各个元素 可以提高处理数据的效率 缩短和简化程序 5 2数组的定义 数组不是一种数据类型 而是一组相同类型的变量的集合 数组必须先声明后使用 两类数组 静态 定长 数组 动态 可变长 数组1 一维数组定义一维数组的形式 Dim数组名 下界To 上界 As类型 声明了数组的名 维数 大小 类型 说明 数组名的命名规则与变量的命名相同 数组的元素个数 上界 下界 1 缺省为0 若希望下标从1开始 可在模块的通用部分使用OptionBase语句将设为1 其使用格式是 OptionBase0 1 后面的参数只能取0或1例如 OptionBase1 将数组声明中缺省下标设为1和不能使用变量 必须是常量 常量可以是直接常量 符号常量 一般是整型常量 例 Dimmark 1to100 AsInteger 例 Dima 1to3 AsInteger声明一维数组a 包含了5个整型元素a 1 a 0 a 1 a 2 a 3 如果省略As子句 则数组的类型为变体类型 数组中各元素在内存占一片连续的存储空间 一维数组在内存中存放的顺序是按下标大小的顺序 注意 在定义静态数组时 每一维的元素个数必须是常数 不能是变量或表达式 如 错误的声明 下标是变量Dimx n 或 n Inputbox 输入n Dimx n AsSingle 在数组声明中的下标说明了数组的整体 即每维的大小 而在程序其他地方出现的下标表示数组中的一个元素 两者写法形式相同 但意义不同 例如 Dimx 10 AsIntegerx 10 100 表示声明了数组x 有11个数组元素 对x 10 这个数组元素赋值 5 3二维数组 定义二维数组的形式 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 例 DimlArray 0To3 0To4 AsLong共有4 5个元素等价于 DimlArray 3 4 AsLong 5 4动态数组 动态数组指在声明数组时未给出数组的大小 省略括号中的下标 当要使用它时 随时用ReDim语句重新指出数组大小 形式如下 ReDim数组名 下标 下标2 As类型 例 PrivateSubS1 Dimx AsSingle n Inputbox 输入n ReDimx n EndSub 说明 Dim Static Public声明语句是说明性语句 可出现在过程内或通用声明段 ReDim语句是执行语句 只能出现在过程内 在过程中可多次使用ReDim来改变数组元素的个数ReDim中的下标可以是常量 也可以是有了确定值的变量 如 n InputBox 输入n的值 ReDimArr n 静态数组在程序编译时分配存储单元 动态数组在运行时分配存储单元 5 5数组的基本操作 1 数组元素的引用一维数组元素的引用使用形式 数组名 下标 其中 下标

温馨提示

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

评论

0/150

提交评论