




已阅读5页,还剩80页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VBA编程入门 目录 序 3VBA编程环境 7VBA编程基础 12VBA常用语句 32VBA流程控制 35VBA数组 57VBA过程 69VBA操作数据库 76 序言 VBA是什么 简单的说VBA是一种编程语言 它可以支持在Office系列软件中命令和功能的编写 ExcelVBA则是以MicrosoftExcel为开发对象的VBA语言 如运行下面的VBA代码就可以在单元格A1中输入100 SubT1 Range a1 100EndSub VBA有什么作用 怎么才能学好VBA 进入VBA编程环境VBA窗口的组成VBA窗口由工具栏 工程资源管理器窗口 属性窗口 代码窗口和立即窗口组成 新建模块进行VBA编程 V 1VBA编程环境 进入VBA编程环境 Excel2007 如果是在Office2007中 若你没看到 开发工具 选项卡的话 先到选项中打开它 VBE编程环境 然后在 开发工具 选项卡的 代码 区域里按 VisualBasic 按键 就可以打开同样的界面 标准工具条 视图MicrosoftExcel按钮 切换Excel2007窗口 插入按钮 插入模块或过程 运行子过程 用户窗体按钮 运行模块中的程序 中断按钮 中断正在运行的程序 重新设置按钮 结束正在运行的程序 设置模式按钮 在设计模式和非设计模式之间切换 工程资源管理器按钮 用于打开工程资源管理器 属性窗口按钮 用于打开属性窗口 对象浏览器按钮 用于打开对象浏览器 新建模块 在 工程 视图中 右键单击 ThisWorkbook 然后在菜单中选 插入 模块 就会在主界面出现一片空白 如图Module1 即可在空白进行VBA编程 V 2 1常量 变量 常量 在程序运行中其存储的值不会改变 变量 在程序运行中其值可以改变 VBA使用常量 变量来存储值 用来保存在程序运行期间数据 V 2VBA编程基础 常量在程序运行过程中 其值不会被改变的量称为常量 在VBA中有三类常量 直接常量如 10 20 123 0 AB VBA程序设计 等符号常量系统常量指VBA系统预先定义好的 用户可以直接引用的量 如 acForm acQuery vbOk vbRed 变量是内存中的临时单元 存放在程序执行过程中产生的中间结果和最后输出结果 在程序中使用变量 就要给变量定义名称及类型 即对变量进行声明 变量 变量命名规则变量名必须以字母或汉字开头 后可跟字母 汉字 数字或下划线组成 不能含有小数点和空格 长度不超过255个字符的字符串 不能使用VBA中的关键字 VBA中不区分变量名的大小写 变量名的最后一个字符可以是 等表示数据类型的声明符 说明 常量名的命名规则与变量名的命名规则相同 V 2 2数据类型与变量的声明 在VBA中 数据类型用来决定变量可以保存何种数据 VBA支持多种数据类型 为用户编程提供了方便 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 变量的初始化 V 2 3运算符和表达式 运算符算术运算符 例如 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提供了大量的内部函数 供用户在编程时使用 函数的调用形式为 函数名 参数表 V 2 4常用函数 InputBox函数InputBox 提示 标题 缺省 其中 提示 提示信息 标题 对话框标题 缺省 输入区缺省值 注意 函数的返回值为字符型数据 输入 输出函数 使用MsgBox 可以在对话框中显示文本信息 格式为 MsgBox 提示信息 按钮数目和类型 标题 MsgBox函数或方法 用于显示输出信息 MsgBox函数 变量 MsgBox 提示 按钮 标题 MsgBox方法 MsgBox提示 按钮 标题 V 3VBA常用语句 VBA代码不区分字母的大小写系统保留字自动转换每个单词的首字母大写 语句书写自由一行可书写几句语句 之间用冒号 分隔 一句语句可分若干行书写 用续行符将语句分开 V 3 1VBA语句书写规则 赋值语句 给变量 常量或对象的属性指定一个值或表达式 V 3 2VBA常用语句 格式 LET 变量名 表达式作用 将表达式的值赋值给变量名 一般用于给变量赋值或对控件设定属性值 例如 s 10Text1 Text 欢迎使用VBA 注意 虽然赋值号与关系运算符等于号都用 表示 VBA会根据所处的位置自动判断是何种意义的符号 声明语句 命名和定义常量 变量 数组以及过程 注释语句在程序中的适当位置加上注释语句有利于程序的维护和阅读 格式 Rem注释内容或用单引号 注释内容 结构化程序设计由顺序 分支 循环这3种基本结构所组成 V 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 显示对应的五级制成绩下列三种方法哪些正确 哪些错误 循环结构For Next循环Do Loop循环 For Next循环结构 将一段程序重复执行指定的次数 其中使用一个计数变量 统计执行的次数 格式 For循环变量 初值to终值 Step步长 语句块 ExitFor 语句块Next 循环变量 For Next循环语句 功能 执行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如何编写 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必须有初值防止产生死循环至少执行一次循环体 修改循环控制变量 改变加数值 三种循环语句 即For Do Loop 共同的特点是重复执行一个语句系列 循环体 不同点是控制重复次数的时机和方法不一样 数组 数组不是一种数据类型 而是一组相同类型的变量的集合 可以像使用普通变量一样使用数组中的每一个元素 使用数组的好处是用一个数组名代表逻辑上相关的一批数据 用下标表示该数组中的各个元素 可以提高处理数据的效率 缩短和简化程序 V 5数组 数组不是一种数据类型 而是一组相同类型的变量的集合 数组必须先声明后使用 两类数组 静态 定长 数组 动态 可变长 数组1 一维数组定义一维数组的形式 Dim数组名 下界To 上界 As类型 声明了数组的名 维数 大小 类型 V 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 一维数组元素的引用 使用形式 数组名 下标 其中 下标可以是常量 整型变量或表达式 例如 设有下面的数组A 10 B 10 AsInteger则下面的语句都是正确的 A 1 B 2 B 1 5 取数组元素运算A i B i 下标使用变量A i 2 B i 1 下标使用表达式注意 引用数组时不能下标越界 V 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 数组元素的输入 V 6VBA过程 过程是构成程序的一个模块 往往用来完成一个相对独立的功能 过程可以使程序更清晰 更具结构性 VBA具有四种过程 Sub过程 Function函数 Property属性过程和Event事件过程 Sub过程执行一些有用的任务但是不返回任何值 它们以关键字Sub开头并以关键字EndSub结束 如下例 V 6 1Sub过程 Submain Msgbox Hello EndSub 第一行Sub表示过程的开始 main为过程名 第二行是过程的主体 调用函数Msgbox 输出 Hello 最后EndSub表示过程的结束 Sub过程的参数有两种传递方式 按值传递 ByVal 和按地址传递 ByRef 如下例 Subpassword ByValxasinteger ByRefyasinteger Ify 100theny x yelsey x yx x 100Endsub 1Sub过程的参数传递 在上例中 过程password每次执行时需要向其传递两参数 x y 否则该过程不能执行 在传递x与y参数时 x不影响过程password外部x的值 而y则对过程外的y值产生影响 2Sub过程的调用 调用过程有两种方式 1 Call过程名 参数1 参数2 2 过程名参数1 参数2 如下例 注意 调用Sub过程也是在过程中进行的 V 6 2Function函数 Function函数实际是实现一种映射 它通过一定的映射规则 完成运算并返回结果 它们以关键字Function开头并以关键字EndFunction结束 如下例 Functionpassword ByValxasinteger asbooleanifx 150thenpassword trueelsepassword falseEndFunction 函数password返回一个布尔值 Function函数的两各调用方式 1 作为一个表达式放在 右端 2 作为参数使用 如下例 V 6 3 Property属性过程和Event事件过程 这是VB在对象功能上添加的两个过程 与对象特征密切相关 也是VBA比较重要组成 技术比较复杂 可以参考相关书籍 V 7简单介绍VBA操作SQLServer数据库 这一节介绍的是利用ADO的Connection对象来连接数据库 从面达到操作SQLServer的目的 首先要说的是ADO是什么 ADO的全称是 MicrosoftActiveXDataObjects 它使您的客户端应用程序能够通过OLEDB提供者访问和操作数据库服务器中的数据 它的主要优点是易于使用 速度快 内存支出低和占用磁盘空间少 V 7 1建立对ADO对象库的引用 要操作ADO中的对象的话 首先就得创建对ADO对象库的引用 1 在VB编辑器窗口 选择工具 引用以打开引用对话框 该对话框列出了你电脑上所有可用的类型库2 在清单上找到MicrosoftActiveDataObjects2 8Library
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 ISO/IEC 19566-8:2023/AMD1:2025 EN Information technologies - JPEG systems - Part 8: JPEG Snack - Amendment 1: Revision of JPEG Snack content boxes
- 【正版授权】 IEC 61000-4-7:2002 FR-D Electromagnetic compatibility (EMC) - Part 4-7: Testing and measurement techniques - General guide on harmonics and interharmonics measurements and i
- 【正版授权】 IEC 60672-2:1999 EN-D Ceramic and glass insulating materials - Part 2: Methods of test
- 【正版授权】 IEC 60730-1:1999+AMD1:2003+AMD2:2007 CSV EN-D Automatic electrical controls for household and similar use - Part 1: General requirements
- 【正版授权】 IEC 60269-1:2006 FR-D Low-voltage fuses - Part 1: General requirements
- 【正版授权】 CISPR 16-1-3:2004 FR-D Specification for radio disturbance and immunity measuring apparatus and methods - Part 1-3: Radio disturbance and immunity measuring apparatus - Anc
- 2025年学校学校新学期工作方案表
- 物流行业储备管理岗位竞聘
- 早产儿家庭精细化护理
- 老师个人工作方案2025年
- 糖尿病前期的干预
- 河南2020年河南省农村信用社(农商银行)员工招聘考试参考题库含答案详解
- 新版申报国家社科基金经验交流汇报课件
- 森林区划 组织森林经营类型(森林资源经营管理)
- 一氧化氮吸入治疗法演示文稿
- 欧盟农残标准
- 新生儿疾病诊疗规范诊疗指南诊疗常规2022版
- 六年级奥数阴影部分面积
- 以传世之心做传世之文-《江苏文库》编纂出版的思考与实践
- YY/T 0935-2014CT造影注射装置专用技术条件
- GB/T 8929-2006原油水含量的测定蒸馏法
评论
0/150
提交评论