logo资料库

Excel_VBA程序开发自学通.doc

第1页 / 共471页
第2页 / 共471页
第3页 / 共471页
第4页 / 共471页
第5页 / 共471页
第6页 / 共471页
第7页 / 共471页
第8页 / 共471页
资料共471页,剩余部分请下载后查看
入门篇:VBA优势、功能与概念
第一章从Excel插件认识VBA
1.1 从身份证号获取个人信息
1.1.1 常规公式法
1.1.2 自定义函数法
1.1.3 插件法
1.1.4 浅谈VBA优势
1.2 插件特点及其如何发挥插件的优势
1.2.1 Excel插件的特点
1.外观特征
2.功能特征
1.2.2 Excel插件的优势与限制
1.2.3 如何发挥插件的优势
1.2.4 开发Excel插件的条件
1.2.5 本书架构
第二章 VBA概述
2.1 VBA的发展史与优缺点
2.1.1 宏与VBA
2.1.2 VBA历史与版本
2.1.3 VBA优、缺点
2.2 VBA能做什么
2.2.1 VBA用途
2.2.2 VBA主要用户
2.3 VBA的安全性
2.3.1 VBA安全性
2.3.2 了解安全性对话框
1.安全选项
2.信任中心
2.3.3 让自己的VBA程序畅通无阻
2.4 使用VBA帮助
2.4.1 利用帮助学习VBA语法
1.即时提示
2.本地帮助
3.在线帮助
2.4.2 捕捉错误
1.编译错误
2.运行时错误
第三章巧设VBA编辑器提升编程效率
3.1 认识VBE组件
3.1.1 访问VBA开发环境
1.功能区按钮法
2.快捷键法
3.右键菜单法
3.1.2 认识VBE的组件
1.菜单栏
2.工具栏
3.工程资源管理器
4.属性窗口
5.代码窗口
6.对象与过程窗口
7.立即窗口
8.工具箱
3.1.3 VBE中不同代码窗口的作用
1.工作表代码窗口
2.工作簿代码窗口
3.窗体代码窗口
4.模块代码
5.类模块
3.2 VBE中选项设置
3.2.1 编辑器选项
1.自动语法检测
2.要求声明变量
3.自动列出成员
4.自动显示快速信息
5.自动显示数据提示
6.编辑时可拖动文本
7.缺省查看所有模块
8.过程分隔符
9.自动缩进
3.2.2 编辑器格式选项
3.2.3 通用选项
1.显示网格
2.显示工具提示
3.错误捕捉
3.2.4 VBA代码保护
1.共享法
2.加密法
进阶篇:VBA语法、过程与事件
第四章VBA基本概念
4.1 理解VBA的对象、属性与方法
4.1.1 什么是对象
4.1.2 如何理解属性
1.自动成员列表
2.查看帮助
4.1.3 如何理解方法
4.1.4 判断对象的属性与方法
1.根据自动成员列表中的图标判断
2.看帮助
3.判断词性
4.2 认识VBA的事件
4.2.1 什么是事件
4.2.2 事件的分类及其用途
4.3 VBA的运算符
4.3.1 VBA中运算符的分类
4.3.2 算术运算符
4.3.3 比较运算符
4.3.4 逻辑运算符
1.And运算符
2.Or运算的运算符
3.Not运算符
4.3.5 运算符的优先顺序
4.4 简单的字符处理函数
4.4.1 字符串处理函数功能介绍
4.4.2 StrComp:字符相似比较
4.4.3 Strconv:字符串类型转换
4.4.4 Format:格式化字符串
4.4.5 LCase/ Ucase:大小写转换
4.4.6 String / space:重复字符
1.String
2.Space
4.4.7 Lset / Rset:字符串往左/右对齐
1.Lset
2.Rset
4.4.8 Instr:返回字符出现位置
4.4.9 Left/Mid/Right:从左、中、右取值
1.Lef
2.Mid
3.Right
4.4.10 LTrim/RTrim/ Trim:去除空格
4.4.11 Like:字符串相似度比较
第五章VBA数据类型与变量、常量
5.1 数据类型
5.1.1 为什么要区分数据类型
5.1.2 认识VBA的数据类型
5.1.3 数据类型的声明与转换
5.2 常量与变量
5.2.1 常量的定义与用途
1.简化输入
2.方便识别
5.2.2 常量的声明方式
5.2.3 常量的命名规则
5.2.4 变量的定义与用途
5.2.5 变量的类型与声明
5.2.5 区分静态变量与动态变量
5.2.6 变量的作用域与生命周期
5.2.7 认识对象变量
5.2.8 认识数组变量
第六章认识VBA过程及开发自定义函数
6.1 认识过程
6.1.1 过程的分类与调用方式
1.【Alt+F8】执行
2.快捷键执行
3.按钮执行
4.菜单调用
5.事件引发
6.工作表中使用公式调用
6.1.2 插入过程的方式
1.非事件过程
2.事件类过程
6.1.3 过程的命名规则
6.2 编写SUB过程
6.2.1 SUB过程的语法解析
1.模块级过程
2.工程级过程
3.中途退出程序的多种方法与分别
6.2.2 Sub过程的执行流程
1.使用冒号使一行执行多句代码
2.使用标签改变执行流程
3.SUB过程的嵌套调用方式
6.2.3 过程的递归
1.按条件新建工作表
2.设计时钟
6.2.4 SUB过程实例演示
1.统计选区信息:不带参数的Sub过程
2.将单元格数据转换为首字母大写:带有参数的Sub过程
6.3 认识Function过程
6.3.1 Function过程的特点
6.3.2 Function的语法解析
6.3.3 调用Function过程
6.4 关于过程的参数
6.4.1 SUB过程的参数及应用
6.4.2 Function过程的参数
6.5 开发自定义函数
6.5.1 开发不带参数的Function过程
1.不随时间变化的时间函数
2.取当前工作簿名
6.5.2 开发带有一个参数的Function过程
1.将人民币金额转换为大写
2.建立工作表目录
3.关机函数
6.5.3 开发带有两个参数的Function过程
1.对带“/”的数据进行合计
2.中国式排名
6.5.4 开发带有两个可选参数的Function过程
1.获取可控制大小写的英文列标
2.计算多样式星期
6.5.5 开发带有不确定参数的Function过程
1.串连内存数组及选区
2.统计多区域公式个数
6.5.6 开发具有三个参数其中第三个为可选的Function过程
1.按单元格背景颜色进行条件平均
2.按颜色从左向向右查找所有数据
6.6 编写函数帮助
1.普通工作簿
2.加载宏工作簿
3.如何让函数说明通用于Excel 2003和2007
6.7 总结
第七章VBA的对象模型与对象表示法
7.1 VBA中的对象及结构
7.1.1 关于对象的相关概念
7.1.2 对象与对象集合
7.1.3 对象的层次:父对象与子对象
7.1.4 认识Excel所有对象
7.2 对象的表示法
7.2.1 对象的完整指定方式与简写
7.2.2 利用定义名称获取对象
1.图形对象的默认名称
2.重定义图形对象的名称
7.2.3 利用集合索引号获取对象
7.2.4 活动对象的简化引用
7.2.5 利用WITH语句简化对象引用
7.2.6 事件中的Me关键字
1.作为过程函数调用
2.提供成员列表
7.3 单元格的各种引用方式
7.3.1 Range("A1")方式引用单元格
1.引用单元格
2.引用区域
3.引用多区域
4.引用整行、整列
5.Range嵌套使用
7.3.2 Cells(1,1)方式引用单元格
1.WorkSheet.Cells(横座标,纵座标)
2.WorkSheet.Cells(行号,列标)
3.Range.Cells(横座标,纵座标)
4.Range.cells(索引号)
7.3.3 [a1]方式引用单元格
7.3.4 Range("A1")、Cells(1,1)与[a1]比较
7.3.5 Selection与ActiveCell:当前选区与活动单元格
7.3.6 Names:利用名称引用单元格或区域
1.将区域转换成名称
2.在过程中引用名称
7.3.7 UsedRange与CurrentRegion
1.UsedRange
2.CurrentRegion
3.UsedRange与CurrentRegion应用
7.3.8 SpecialCells:按条件引用区域
7.3.9 CurrentArray:引用数组区域
7.3.10 Resize:重置区域大小
7.3.11 Offset:根据偏移量引用区域
7.3.12 Union:单元格的合集
7.3.13 Intersect:单元格、区域的交集
7.3.14 End:引用源区域的区域尾端的单元格
第八章自动宏与Excel事件
8.1 让宏自动执行
8.1.1 Auto自动宏
8.2.2 工作簿事件中的自动宏
8.2.3 利用鼠标移动事件执行自动宏
8.2 详谈VBA的事件
8.2.1 事件的定义与分类
8.2.2 事件的层次与执行顺序
1.事件的层次
2.不同级别事件的执行顺序
3.同一级别事件的执行顺序
8.2.3 事件的禁用与启用
1. 临时关闭事件
2. 防止事件进入死循环
8.2.4 事件代码的录入方式
8.3 VBA有哪些事件
8.3.1 应用程序级别事件介绍
8.3.2 工作簿事件介绍
8.3.3 工作表事件介绍
8.3.4 事件的特例
1.删除空文本时触发“Worksheet_Change”事件
2.插入批注时不触发任何事件
3.修格单元格格式不触发事件
4.清除格式会触发“Worksheet_Change”事件
5.数据分列时不触发事件
6.表单控件修改数据时不触发任何事件
第九章VBA程序常规则
9.1 代码编写规则
9.1.1 对代码添加注释
1.添加注释的作途
2.添加注释的方法
3.设置注释在调试代码中的作用
4.对插件添加声明
9.1.2 长代码分行
9.1.3 代码缩进对齐
1.单行代码手动缩进
2.利用工具栏按钮批量缩进
9.1.4 声明有意义的变量名称
9.1.5 IF…end if类配对语句的录入方式
9.1.6 录入事件代码的方式
9.1.7 借用自动列出程序录入代码
9.1.8 善用公共变量
9.1.9 将较大的过程分为多个再调用
9.1.10 减少过程参数
9.1.11 兼容Excel 2007和Excel 2003
1.对象、方法与属性与函数的增减
2.工作表行列数差异
3.菜单与功能区模式
9.2 优化代码
9.2.1 强制声明变量
9.2.2 善用常量
9.2.3 关闭屏幕更新
9.2.4 利用WITH减少对象读取次数
9.2.5 利用变量减少对象读取次数
9.2.6 善用带$的字符串处理函数
9.2.7 善用循环中的步长减少循环次数
9.2.8 利用数组代替单元格对象
9.2.9 不重复调用自定义函数时不使用自定义函数
9.2.10 将不改变值或者属性的语句放到循环语句外
9.2.11 利用长度计算判断单元格是否非空
9.2.12 尽量调用内置功能
9.2.13 利用对象循环替代单元格循环
第十章常用语法剖析
10.1 输入、输出语句
10.1.1 Msgbox函数的功能及作用
1.返回运算结果
2.询问执行方式
3.提示执行步骤
4.告知错误原因
5.展示当前状态
6.设计程序帮助
10.1.2 Msgbox函数的语法
1.Msgbox的参数
2.Msgbox的按钮与图标
3.Msgbox的返回值
10.1.3 Msgbox函数的限制
1.字符数问题
2.控制权问题
3.时间性问题
10.1.4 利用WScript突破Msgbox限制
10.1.5 Debug.print
10.1.6 Inputbox函数的功能与作用
10.1.7 Inputbox函数的语法
1.定制“另存为”对话框
2.根据指定月份批量创建工作表
3.将A1日期按指定样式转换为星期
10.1.8 借用Inputbox函数生成月历
10.1.10 Inputbox函数的限制
1.不能检验用户录入字符的数据类型
2.不能让产生单元格引用
3.字符长度限制
10.1.11 利用Application.Inputbox方法替代Inputbox函数
10.1.12 Application.Inputbox语法详解
1.强制用户录入数值
2.对任意选区进行行列合计
3.利用Application.Inputbox录入公式
10.2 条件判断语句
10.2.1 IIF函数的语法与应用
1.IIF的参数
2.And运算符与Or运算符
3.IIF应用案例
10.2.2 IIF函数的限制
10.2.3 IF… Then…语句的语法详解
10.2.4 IF…then…应用案例
1.禁止打印“总表”以外的工作表
2.仅仅允许8到18点可以打开当前工作簿
3.如果A1是数字,则当前工作簿保存为A1的值
10.2.5 IF…Then…Else…语法与应用
1.语法详解
2.实例:多条件计算奖金
10.2.6 条件语句的嵌套应用
1.语法详解
2.实例:模防复选框控制单元格
10.2.7 Select Case语法详解
1.语法详解
2.实例:多条件时间判断
3.实例:根据成绩返回评语
4.实例:以指定格式的今日日期显示工作簿标题
5.实例:Select Case嵌套应用计算时间
10.2.8 Select Case与IF… Then…Else之比较
10.2.9 借用Choose函数简化条件选择
10.3 循环语句
10.3.1 For Next语句
1.法语详解
2.步长值正负对过程的影响
3.调整步长值提升循环效率
4.循环中执行多行语句
5.根据需求中途退出循环
6.For Next循环的嵌套应用
10.3.2 利用循环获取工作表目录
1. 工作表中建立表名配合链接函数创建目录
2. 数据有效性配合工作簿事件创建目录
10.3.3 For Each Next语法详解
10.3.4 利用循环选择区域中所有负数
10.3.5 利用循环统一所有图片高度及对齐单元格
10.3.6 Do Loop语法详解
10.3.7 在工作表中循环获取所有字体
10.3.8 计算得分累加到1000时的月份
10.3.9 利用循环产生文字动画
10.4 With语句
10.4.1 With语句的用途与语法
1.简化代码
2.提升速度
3.减少变量
4.语法解析
10.4.2 With语句实例
1.批量生成复选框
2.让图形对象设计动画
10.4.3 With语句常见错误分析
1.忘记写“End With”
2.End With放错了位置
3.里层With代码调用外层With对象的属性
10.5 错误处理语句
10.5.1 错误类型与原因
1.环境问题
2.开发者“笔误”
3.用户错误使用
10.5.2 Err对象及其属性、方法
10.5.3 认识Error函数
10.5.4 罗列错误代码及含义
10.5.5 VBA的错误时处理机制
1. On Error GoTo line
2. On Error Resume Next
3. On Error GoTo 0
10.5.6 错误处理:错误三次则退出程序
10.5.7 错误处理:多功能选区统计
10.5.8 错误处理的作用域
1.On Error GoTo line
2. On Error Resume Next
3.On Error GoTo 0
10.5.9 GoSub...Return语句
10.5.10 开发错误处理函数
1.判断工作表是否存在
2.判断工作簿是否存在
3.判断批注是否存在
4.判断单元格是否处于可操作状态
第十一章Excel常见对象的应用技巧
11.1 Application应用案例
11.1.1 选区拼写检查
11.1.2 调用工作表函数
11.1.3 切换鼠标形状
11.1.4 计算表达式
11.1.5 禁用程序运行时弹出警告框
11.1.6 调整计算方式
11.1.7 罗列最近使用过的文件
11.1.8 查找并打开文件
11.1.9 建立文件目录
11.1.10 定制程序标题
11.1.11 打开指定应用程序
11.1.12 新建一个带有7个工作表的工作簿
11.1.13 在指定时间提示行程安排
11.1.14 模拟键盘快捷键
11.1.15 为程指定快捷键
11.1.16 合并区域
11.1.17 获取多区域的交集
11.1.18 中断程序到一定时间后再继续
11.1.19 调用内置对话框
11.1.20 滚动显示Excel状态栏信息
11.1.21 添加自定义序列
11.1.22 添加名称
11.1.23 将自定义数标记为易失性函数。
11.1.24 选定任意工作簿中的任意区域。
11.1.25 设置应用程序的可见性。
11.1.26 设置批注的显示方式
11.2 Range对象应用案例
11.2.1 清除单元格格式
11.2.2 复制单元格数据
11.2.3 将区域中的数据合并到一个单元格中
11.2.4 多工作表数据合并且添加边框
11.2.5 让高度与宽度自动适应数据
11.2.6 在区域中精确查找
11.2.7 替换不规则货品名称
11.2.8 将公式添加到公式
11.2.9 填充工作日
11.2.10 对区域添加四周边框
11.2.11 多区域合并
11.2.12 对小于60的成绩加虚框
11.2.13 反向选择单元格
11.2.14 插入图片并调整为选区大小
11.2.15 选择当前表已用区域的奇/偶数行
11.2.16 删除当前表的空行
11.2.17 删除重复值
11.2.18 将选区导出为图片
11.2.19 删除超链接
11.2.20 选择本表所有合并单元格
11.2.21 朗读选区字符
11.2.22 隐藏所有公式结果为错误的单元格
11.2.23 快速添加日期批注且自动缩放
11.2.24 以逗号分为隔符将文本分列
11.2.25 生成二级下拉选单
11.2.26 将产量批量转换成下拉菜单
11.2.27 设计一个简单放大镜
11.3 Names对象应用案例
11.3.1 罗列当前工作簿的所有名称
11.3.2 利用名称引用其它表数据
11.3.3 隐藏当前工作簿包含“A”的所有名称
11.3.4 借用名称将区域数据引用到组合框
11.3.5 设计三级下拉菜单
11.4 Comments 对象应用案例
11.4.1 批量将数据导入批注
11.4.2 在所有批注末尾添加指定日期
11.4.3 为批注设置图片背景
11.4.4 添加个性化批注
11.4.5 批量修改当前表批注的外观
11.4.6 替换所有批注中的“计算机”为“电脑”
11.5 Sheets对象应用案例
11.5.1 添加汇总工作表
11.5.2 批量添加工作表且以本月日期命名
11.5.3 迅速产生样表
11.5.4 将当前表移到其基它工作簿
11.5.5 除“目录”工作表外隐藏其它所有工作表
11.5.6 分别计算工作表数量和图表数量
11.5.7 建立带链接功能工作表目录且通过快捷键返回目录
11.5.8 对当前表已用区域设置背景图片
11.5.9 批量命名工作表
11.5.10 隐藏所有工作表非使用区
11.6 Workbooks对象应用案例
11.6.1 新建工作簿且对其命名为今日期
11.6.2 将当前工作簿另存且加密为123
11.6.3 工作簿拆分
11.6.4 批量打开文件
11.6.5 导入文本文件到当前工作簿
11.6.6 保存并关闭本工作簿以外的工作簿
11.6.7 每30分钟备份工作簿
11.6.8 将当前工作簿备份到D盘
11.6.9 清除所有打开工作簿的密码
11.6.10 获取工作簿建立时间和最后一次保存时间
11.6.11 记录文件打开次数
11.6.12 切换图形对象隐藏与显示
11.6.13 设计一个查看一次即自动删除的工作簿
11.6.14 禁止插入新工作表
11.6.15 不打开工作簿而提取数据
11.6.16 合并指定文件夹下每个工作簿中三月生产表到一个工作簿
11.6.17 建立指定文件夹下所工作簿目录和工作表目录
11.6.18 断开与其它工作簿的数据链接
11.7 Windows 对象案例
11.7.1 获取窗口列表
11.7.2 确保随时打开工作簿都窗口最大化
11.7.3 切换当前窗口的网格线、滚动条、标题与工作表标签
11.7.4 自由滚动窗口方便阅读工作表数据
11.7.5 以当前单元格为基准拆分窗格
11.7.6 计算活动单元格左边距
11.7.7 计算活动单元格的屏幕位置
11.7.8 三种方式不显示零值
第十二章Excel的事件应用案例
12.1 应用程序事件案例
12.1.1 新工作簿环境设计
12.1.2 打开任意工作簿时全自动备份
12.2 工作簿事件案例
12.2.1 新建工作表时自动设置页眉
12.2.2 禁止缩小工作簿窗口
12.2.3 未汇总则禁止关闭工作簿
12.2.4 新建工作表时以当前时间命名
12.2.5 关闭工作簿前删除多余工作表
12.2.6 除了月底禁止打印总表
12.2.7 调整窗口大小时报告可见区域行列数
12.2.8 禁止切换到其它工作簿
12.3 工作表事件案例
12.3.1 选择单元时在状态栏提示地址
12.3.2 快速录入出勤表
12.3.3 建立只能使用一次的超链接
12.3.4 让A1的日期单击更新
12.3.5 在状态栏显示选区的字母、数字、汉字个数
12.3.6 实时监控单元格每一次的编辑数据与时间
12.3.7 利用数字简化公司名输入
12.3.8 录入数据时自动跳过带公式的单元格
12.3.9 在工作表的标题行禁用左、右键
12.3.10 对选择区域进行背景着色
12.3.11 适用于指定区域的自动更正
12.4 ActiveX控件事件案例
12.4.1 鼠标移过时切换按钮颜色
12.4.2 鼠标移动录入姓名
12.4.3 鼠标移过组合框时加载图片
12.4.4 鼠标移过列表框时输入品名与单价
登堂篇:VBA数组、窗体与控件
第十三章数组基础
13.1 数组基础
13.1.1 数组概念
13.1.2 数据的维数
1.一维数组
2.二维数组
13.1.3 利用索引号获取数组中的元素
13.1.4 声明数组与赋值
1.声明数组变量
2.对数组变量赋值
13.1.5 静态数组与动态数组
13.2 内置数组函数
13.2.1 Array:创建一个数组
13.2.2 Isarray:判断是否是数组
13.2.3 Index:从数组中取值
13.2.4 Transpose:转置数组
13.2.5 LBound / Ubound:获取数组的上下界
1. LBound
2. Ubound
13.2.6 Split/ Join:文本与数组转化
1. Split函数
2. Join
13.2.7 Filter:数组的筛选
第十四章开发数组函数与数组应用
14.1 自定义数组函数
14.1.1 定义数组函数要点
14.1.2 获取工作表目录
14.1.3 星期序列
14.1.4 获取区域的唯一值
14.2 数组应用案例
14.2.1 将按姓名排列的纵向学员表转置为按班级横向排列
14.2.2 多表学员资料查询
14.2.3 自定义百家姓序列
14.2.4 查询两列共有项
14.2.5 获取文件夹下所有文件详细信息
14.2.7 获取当前表所有批注
第十五章认识窗体与控件
15.1 UserForm简介
15.1.1 窗体与控件的用途
15.1.2 插入窗体与控件的方法
15.1.3 使用Excel 5.0对话框
15.2 窗体控件一览
15.2.1 标签
15.2.2 文字框
15.2.3 命令按钮
15.2.4 复合框
15.2.5 列表框
15.2.6 复选框
15.2.7 单选框
15.2.8 分组框
15.2.9 切换按钮
15.2.10 多页控件
15.2.11 滚动条
15.2.12 图像
15.2.13 RefEdit
15.2.14 附件控件
15.3 设置控件属性
15.3.1 调窗体控件位置与大小
15.3.2 设置控件的顺序
15.3.3 共同属性与非共同属性
15.3.4 设置颜色属性
15.3.5 设置宽与高属性
15.3.6 设置Pictrue属性
15.3.7 设置光标属性
15.3.8 设置复合框
15.3.9 设置Flash动画
15.4 窗体与控件的事件
15.4.1 窗体事件介绍
15.4.2 显示窗体时随机加载背景图
15.4.3 初始化窗体时填充列框下拉列表
15.4.4 双击时关闭窗体
15.4.5 窗体永远显示在上左角
15.4.6 按比例缩放窗体及滚动窗体
15.4.7 控件事件介绍
15.4.8 在窗体中建立超链接
15.4.9 鼠标移过更新列表框数据
15.4.10 让输入学号的文字框仅能录入6位数字
15.4.11 鼠标拖动调整文字框大小
15.4.12 为窗体中所有控件设置帮助
第十六章窗体控件运用案例
16.1 窗体运用
16.1.1 设计登录界面
16.1.2 权限认证窗口
16.1.3 设计计划任务向导
16.1.4 设动动画帮助
16.1.5 用窗体浏览图片
16.2 窗体与表格的交互
16.2.1 设计多表录入面板
16.2.2 多条件高级查询
16.2.3 分类汇总捐赠额并按钮导出
16.2.4 奇偶行列选择工具
16.2.5 背景着色工具箱
第十七章表单控件与ActiveX控件
17.1 表单控件
17.1.1 控件的调出方式
17.1.2 表单控件功能一览
17.1.3 表单工具的优缺点
17.1.4 用单选框控制图表
17.1.5 用滚动条控制生产表数据
17.2 ActiveX控件
17.2.1 ActiveX控件功能一览
17.2.2 利用组合框突破数据有效性的单列限制
17.2.3 在工作表中显示Flash动画
17.2.4 在工作表左上角播放GIF运画
17.2.5 在组合框显示数据源的唯一值
入室篇:文件管理、菜单、API、VBE与加载项
第十八章VBA命令处理文件
18.1 认识文件处理内置命令
18.1.1 Open与Close
18.1.2 Input#
18.1.3 ChDir与ChDriver
18.1.4 FileCopy
18.1.5 FileDateTime
18.1.6 FileLen
18.1.7 GetAttr与SetAttr
18.1.8 Kill
18.1.9 MkDir与RmDir
18.1.10 Name
18.2 文件操作案例
18.2.1 在D盘批量建立文件夹
18.2.2 判断文件是否存在
18.2.3 删除2009年1月1日以前的所有文件
18.2.4 罗列指定文件夹下隐藏文件
18.2.5 10分钟后文件自杀
18.2.6 删除D盘下所有空白文件
19.2.7 文件批量重命名
19.2.8 将当前工作表数据导出为TXT文件
第十九章使用FileSystemObject和WScript
19.1 认识FSO
19.1.1 FSO定义与用途
19.1.2 FSO常用对象
19.1.3 FSO常用对象的方法
19.2 用FSO处理文件与目录
19.2.1 罗列D盘文件夹目录
19.2.2 在当前文件的父目录创建文件夹
19.2.3 查检E盘是否存在空目录
19.2.4 批量命名文件夹
19.2.5 创建文件夹文件并检查是否存在同名文件
19.2.6 每D盘下“生产表”文件夹备份
19.3 关于脚本语言WScript
19.3.1 关于脚本语言
19.3.2 WScript的常见对象
19.3.3 WScript的方法
19.4 脚本语言在文件管理中的运用
19.4.1 在桌面建立当前工作簿的快捷方式
19.4.2 将当前工作簿添加到收藏夹
19.4.3 将Excel 2003和2007添加到“发送到”文件夹
19.4.4 运行屏保程序
19.4.5 显示D盘“生产表”之目录树
19.4.6 显示D、E、F盘文件夹列表
19.4.7 在注册表记录当前工作簿打开次数
19.4.8 新建记事本且录入字符串
19.4.9 打开网上邻居
19.4.10 打开Excel选项之高级选项卡
19.4.11 罗列名称包括Excel的文件夹列表
19.4.12 自启动软件列表
19.4.13 罗列所有隐藏文件夹
第二十章磁盘与系统信息管理
20.1 获取磁盘信息
20.1.1 FSO法
20.1.2 脚本法
20.1.3 DOS法
20.2 获取系统信息
20.1.1 罗列当前系统进程
20.1.2 计算机名与操作系统版本号
20.1.3 获取主板、显卡与硬盘信息
20.1.4 获取显示设置
20.1.5 获取网卡设置
20.1.6 获取CPU序列号
20.1.7 将“我的电脑”修改为实际名称
20.1.8 利用系统信息提升工作表安全
第二十一章认识Excel的内置命令栏对象
21.1 关于内置命令栏
21.1.1 Excel对命令栏的处理方式
21.1.2 内置命令栏的分类
21.1.3 自定义快速访工具栏
21.2 了解CommandBars集合
21.2.1 CommandBars的常用属性
21.2.2 CommandBars的方法
21.2.3 获取CommandBars子对象的名称与类型
21.2.4 获取及保存内置图标
第二十二章创建新工具栏
22.1 创建与删除工具栏按钮
22.1.1 建立工具栏基本语法
22.1.2 自定义新工具栏案例
22.1.3 控显示新工具栏显示方式
22.2 弹出式工具栏
22.2.1 什么是弹出式工具栏
22.2.2 创建一个弹出式工具栏
22.2.3 创建三级工具栏
22.3 特殊的工具栏(工作表目录、查找)
22.3.1 创建可读写的弹出式工具栏
22.3.2 利用工具栏文字框查找数据
22.3.3 切换零值、图像、分页符和批注的显示状态
22.3.4 工作簿标签设计
第二十三章创建新菜单栏
23.1 菜单订制基础
23.1.1 菜单的分类
23.1.1 生成菜单基本语法
13.1.1 设计菜单注意事项
23.2 设计多级菜单
23.2.1 多级菜单基本思路
23.2.2 创建一个弹出式工作表菜单
23.2.3 让菜单适应Excel 2003和2007
23.2.4 可定制显示方式的菜单
23.3 设计感应菜单
23.3.1 在指定工作表才可用的菜单
23.3.2 工指定区域才可用的菜单
23.3.3 用一个菜单控制其它菜单的状态
23.3.4 选择图表才出现的菜单
第二十四章操作快捷菜单
24.1 认识快捷菜单
24.1.1 快捷菜单的分类
24.1.2 不同快捷菜单的VBA表示法
24.1.3 Excel 2003和2007中快捷菜单的差异
24.2 定制快捷菜单
24.2.1 在右键中生成工作表目录
24.2.2 生成不受限的快捷菜单
24.2.3 快捷菜单的任意调用
24.2.4 在窗体中显示快捷菜单
第二十五章认识类和类模块
25.1 类模块基础
25.1.1 类模块应用范围
25.1.2 类与类模块
25.1.3 类模块代码基本步骤
25.2 类的应用
25.2.1 新建工作簿时命名所有工作表(应用程序级别事件)
25.2.2 让零值、图像、分页符和批注切换工具提升为工作簿级
25.2.3 全自动转换单元格为首字母大写
25.2.4 开发一个颜色拾取器
第二十六章API基础与API应用案例
26.1 API理论
26.1.1 API概述
26.1.2 认识DLL文件
26.1.3 API中的数据类型
26.1.4 声明API函数
26.2 API应用
26.2.1 获取计算机名和登录用户名
26.2.2 防PotoShop设计彩蛋
26.2.3 按任意地方都可拖动的窗体
26.2.4 设计圆形动画窗体
26.2.5 限制鼠标在窗体内移动
26.2.6 自由拖动改变窗体大小
26.2.7 渐进式出现与退出的窗体
第二十七章VBA与注册表
27.1 VBA对注册表的控制方式
27.1.1 什么是注册表
27.1.2 VBA操作注册表的方法
27.1.3 VBA操作注册表的优缺点
27.1.3 借用脚本实现注册表的自由控制
27.2 注册表的应用
27.2.1 记录当前工作表最后一次打开时间
27.2.2 借助注册表限制工作簿使用次数
27.2.3 让程序自动调用上次的设置(零值切换)
第二十八章VBE的对象模型与对象控制
28.1 准备工作
28.1.1 设置Excel选项
28.1.2 引用对象库
28.2 认识VBE的对象模型
28.2.1 VBE对象模型的层次结构
28.2.2 VBE对象介绍
28.2.3 VBE对象与Excel程序的关系
28.2.4 如何引用VBE对象
28.2.5 罗列当前工程中所有组件及其类型
28.3 VBE对象的控制
28.3.1 罗列指定模块中所有过程名称
28.3.2 计算代码总行数
28.3.3 利用代码添加/删除模块
28.3.4 用代码添加工作簿事件代码
28.3.5 用代码新建工作表且写入工作表事件
28.3.6 删除当前工作簿所有代码
28.3.7 导出当前工作簿所有VBA代码
28.3.8 用代码生成窗体与控件
第二十九章VBE的高级运用
29.1 菜单定制基础
29.1.1 认识命令栏对象
29.1.2 生成菜单基本语法
29.1.3 罗列VBE中所有菜单与子菜单
29.1.4 生成菜单条与右键菜单
29.2 开发VBE插件百宝箱
29.2.1 开发插件的准备工作
29.2.2 开发代码编号工具
29.2.3 开发代码美化工具
29.2.4 开发代码清除工具
29.2.5 开发代码减肥工具
29.2.6 编写菜单
29.2.7 生成插件
第三十章加载宏与加载项概述
30.1 关于加载宏
30.1.1 加载宏的特点
30.1.2 为什么使用加载宏
30.1.3 加载宏管理器
30.1.4 内置加载宏的加载与使用
30.1.5 安装自定义加载宏
30.2 关于加载项
30.2.1 加载项的分类
30.2.2 加载项的开发方式
30.2.3 两种加载项的安装方式
第三十一章利用VBA编写XLAM加载宏
31.1 开发前的准备
31.1.1 xla与xlam的区别
31.1.2 生成加载宏的基本步骤
31.1.3 开发加载宏与普通VBA编程的区别
31.2 开发集公农历一体的日历输入器
31.2.1 确认程序需具备的功能
31.2.2 定义公历转农历的函数
31.2.3 设计日历输入器窗体
31.2.4 编写窗体初化代码
31.2.5 实现输入器与工作表交互
31.2.6 设计帮助
31.2.7 定制菜单
31.2.8 发布插件
第三十二章利用VB6.0编写COM加载项
32.1 COM加载项开发基础
32.1.1 安装VB 6.0企业版
32.1.2 添加引用
32.1.3 开发COM加载项基本步骤
32.2 开发重复值制器
32.2.1 确认插件所需功能
32.2.2 建立VB工程
32.2.3 编写菜单代码及响应事件
32.2.4 编写重复值控制主程序
32.2.5 发布加载项并安装调试
攀峰篇:开发“Excel百宝箱”
第三十三章程序开发思想
33.1 开发人员自我定位
33.1.1 区别开发人员与应用人员
33.1.2 开发人员基本条件
33.2 如何开发最佳应用程序
33.2.1 罗列应用程序需具备的功能
33.2.2 与终端用户交流
33.2.3 规划程序结构
33.2.4 设定友好的界面
33.2.5 提升程序通用性
第三十四章开发“Excel百宝箱”
34.1 程序规划
34.1.1 了解终端用户需求
34.1.2 确认插件功能表
34.1.3 规划插件结构
34.2 安全工具箱
34.2.1 多工作表加密解密
34.2.2 设置允许编辑区
34.2.3 工作表反向加密
34.2.4 保护公式
34.2.5 禁用磁盘
34.3 财务工具箱
34.3.1 制作工资条头
34.3.2 根据工资计算所需钞票张数
34.3.3 小写金额转大写
34.3.4 大写金额转小写
34.3.5 工作簿
34.3.6 工作表拆分
34.3.7 工作簿拆分
34.3.8 复选框工具
34.3.9 文本与数据转换
34.4 打印工具箱
34.4.1 分页小计
34.4.2 打印当前页
34.4.3 双面打印
34.4.4 底端标题
34.5 合并工具箱
34.5.1 合并同行数据
34.5.2 合并数据并复制
34.5.3 取消区域合并填充原合并值
34.5.4 可还原的合并居中
34.5.5 合并列中相同数据
34.5.6 取消列中合并且还原数据
34.6 批注工具箱
34.6.1 批注管理器
34.6.2 添加个性化批注
34.6.3 建立图片批注
34.6.4 批量添加右列内容为批注
34.6.5 批量导入同名照片到批注
34.7 图表工具箱
34.7.1 批量修改标签
34.7.2 批量移动标签
34.7.3 图表输出为图片
34.8 图片工具箱
34.8.1 导出图形到硬盘
34.8.2 批量导入图片
34.8.3 单元格转换为图片
34.9 不重复值工具箱
34.9.1 提取唯一值
34.9.2 清除列中重复值
34.9.3 不能输入重复值
34.9.4 筛选唯一值
34.9.5 突出选区重复值
34.9.6 标示列中重复值
34.9.7 产生不重复随机数
34.10 文件工具箱
34.10.1 新建文件夹
34.10.2 新建工作表
34.10.3 查找文件并打开
34.10.4 批量重命名
34.10.5 建立文件目录
34.11 系统工具箱
34.11.1 锁定屏幕
34.11.2 查看电脑使用时间
34.11.3 查看磁盘信息
34.11.4 网卡IP与CPU的ID号
34.11.5 查看程序使用端口
34.11.6 清理垃圾文件
34.12 选择工具箱
34.12.1 行列选择工具箱
34.12.2 选择本表图片
34.12.3 区域定位工具
34.12.4 反向选择
34.13 程序员工具箱
34.13.1 生成系统图标
34.13.2 取得所有菜单ID
34.13.3 提取所有代码到工作表
34.13.4 删除所有VBA代码
34.13.5 一键修复Excel
34.14 其它工具箱
34.14.1 隐藏非使用区
34.14.2 生成字母与百家姓序列
34.14.3 一键删除超链接
34.14.4 一键删除工作簿数据链接
34.14.5 隔行插入行
34.14.6 选区字符统计
34.14.7 批量上标
34.14.8 七彩文字
34.14.9 工作表管理器
34.15 开发函数
34.15.1 开发函数
34.15.2 设计函数帮助
34.16 定制百宝箱帮助
34.16.1 定制底端标题帮助
34.16.2 定制百宝箱帮助
34.16.3 邮件返馈
34.17 定制多级菜单并发布
34.17.1 定制菜单
34.17.2 发布
34.17.3 测试
34.17.4 小结
Excel VBA 程序开发自学通 2022-6-4 第 1页 /共 471页 入门篇:VBA 优势、功能与概念 第一章 从 Excel 插件认识 VBA 简单的说,Excel VBA 是依附于 Excel 程序的一种自动化语言,它可以使常用的程序自动化, 类似于 DOS(磁盘操作系统)中的批处理文件(后缀名“.bat”)。那么它有什么具体的功能?在 工作中与常规操作方式相比,具有哪些优势?笔者试图通过一个简单却实用的插件来展现。 本章要点:  从身份证号获取个人信息  在工作中如何发挥 Excel 插件的优势 1.1 从身份证号获取个人信息 制作人事资料时,通常需要录入职员身份证号码,以及生日、年龄、性别等等。除身份证号 码需要手工逐一录入以外,其它三项信息的录入有四种方法:手工录入、内置公式、自定义函数 法、插件法。手工输入方式效率极差,且出错机率也最高,本节通过后三种方式来实现并比较, 从而让读者对 VBA 之优势与用法得以初步认知。 1.1.1 常规公式法 以图 1.1 数据为例,利用公式从身份证中提取生日、年龄、性别等信息,可以有多种方法。 本例列举其中之一。 图 1.1 根据身份证号提取职工年龄、生日与性别 通过公式计算职工的年龄、出生日期与性别,步骤如下: (1)在单元格 C3 输入以下公式,用于计算年龄: =DATEDIF(DATE(MID(B3,7,4-(LEN(B3)=15)*2),MID(B3,11-(LEN(B3)=15)*2,2),MID(B3,13-( LEN(B3)=15)*2,2)),NOW(),"Y") (2)在单元格 D3 输入以下公式,用于计算出生日期: =TEXT(RIGHT(19&MID(B3,7,LEN(B3)/2-1),8),"#年##月##日") (3)在单元格 E3 输入以下公式,用于计算性别: =IF(ISODD(MID(B3,15,3)),"男","女")
Excel VBA 程序开发自学通 2022-6-4 第 2页 /共 471页 注意:在 Excel 2003 中,ISODD 函数默认状态下无法使用,需要加载“分析工具库”才可以正常使用,为了使 公式通用,通常改用 MOD 函数。即公式改为:=IF(MOD(MID(B3,15,3),2),"男","女") (4)选择 C3:E3 区域,将公式向下填充即完成身份证信息提取。效果如下: 点评:相对于手工输入法,利用公式从身份证号码获取个人信息有着效率更高、错误率更低 图 1.2 公式法获取身份证信息 之优点,人员越多时越能体现出其高效优势。 本例文件参见光盘:..\ 第一章\提取身份证信息.xlsm 1.1.2 自定义函数法 自定义函数是指利用 VBA 编写的外置函数。在本例的随书光盘中已经录入了相关的 VBA 代 码,可以随时调用。对于代码的含义和录入方式在后面的章节后有详细介绍,本章仅通过具体应 用了解其用法与优势。具体操作步骤如下: (1)进入“自定义函数法”工作表; (2)在 C3:E3 区域分别输入以下三个公式,用于计算年龄、出生日期和性别: =SFZ(B3,"NL") =SFZ(B3,"SR") =SFZ(B3)或者=SFZ(B3,"XB") (3)选择 C3:E3 单元格,将公式向下填充,结果见图 1.3 所示。 图 1.3 自定义函数法获取身份证信息 本例中的函数 SFZ 即身份证函数,用于从身份证号码中获取年龄、生日与性别等信息。它不 属于 Excel 内置函数,需要利用 VBA 编写代码才可以使用。读者可以从随书光盘中获取该完整代 码。
Excel VBA 程序开发自学通 2022-6-4 第 3页 /共 471页 SFZ 函数有两个参数,第一参数为单元格引用,第二参数为信息描述,即用于指定需要获取 身份证中哪一部分信息。当它为“NL”(不区分大小写)时,获取年龄;当它为“SR”时,获取 生日,当它为“XB”或者省略第二参数时,获取性别。 点评:相对于内置函数法/公式法,自定义函数法是借用 VBA 编写的外置函数完成,它的优 势在于公式简短,且容易理解。任何不熟悉函数与 VBA 者皆可一分钟内学会操作并理解其公式 含义。 1.1.3 插件法 插件法是指借用 Excel 插件操作工作表,该插件不隶属于当前工作簿,但却可以实现与当前 工作簿交互的功能,批量、迅速完成身份证信息提取工作。 操作步骤如下: (1)关闭 Excel 程序的前提下,将随书光盘中的插件(位置:..\第一章\批量获取身份证信 息.xlam)复制到以下自启动文件夹中即安装完成: C:\Program Files\Microsoft Office\Office12\XLSTART 注意:如果您的 OFFICE 没有装在 C 盘,那么上面的磁盘号需要根据实际情况做修改;如果您使用 OFFICE 2003, 则将其中“Office12”修改为“Office11”。 (2)打开光盘文件“提取身份证信息.xlsm”,进入“插件法”工作表; (3)选择单元格区域 B3:B6,单击右键,从右键中选择【批量获取身份证信息】菜单,程序 将弹出一个对话框“确定计算区域”。该对话框中默认显示当前选区地址,如果需要修改地址,可 以输入新的地址,也可以用鼠标在工作表中选择身份证存放区域,该区域的地址会自动产生在对 话框中。见图 1.4 所示; (4)单击“确定”按钮,程序在瞬间就会从选区的所有身份证中提取年龄、生日和性别等信 息。 图 1.4 插件法批量获取身份证信息 点评:插件法从身份证号码中获取信息的优点是速度快,通用性好。相对于内置函数法,它 在操作上更简单,不需要任何函数知识,不需要输入长长的公式,只点几次鼠标即可;相对于自 定义函数,它的优点是通用性好,在任何工作表、任何工作簿皆可使用本工具。而前一方法之自 定义函数非插件方式存在,只能在当前工作簿中使用。
Excel VBA 程序开发自学通 2022-6-4 第 4页 /共 471页 1.1.4 浅谈 VBA 优势 前面三个案例中我们可以看出,Excel 具有强大的计算功能,但常规方式对于某些大型数据运 算显得比较繁琐。用户需要学习复杂的函数知识,设置长长的公式才可以解决某些运算。而 VBA 可以使公式简化、易懂,甚至根本不需要公式,一个字母不用录入即可完成一些专业性较强的计 算。 具体说来,相对于 Excel 自带的功能,VBA 或者说 VBA 开发的插件具有以下优势:  批量地对操作对象进行数据处理 以前一节插件法完成身份证信息进行例证,它可以瞬间完成多个单元格数据的运算,甚至多 个工作表中存放的身份证号码也可瞬间完成信息提取。较传统的逐一处理方式在效率上有大幅提 升。  多任务一键完成 多任务是指对同一个对象需要进行多个操作,例如前一节是从身份证号码中获取三类信息, VBA 可以单击一个按钮后瞬间完成,完全感觉不到它在分三步逐一完成任务。这是高效办公地最 佳体现。  将复杂的任务简化 Excel 是很多很多小工具的综合体。这些工具可以嵌套运用,完成更强大的数据处理。但当嵌 套过多时,就需要用户要较深的功底才能操纵或者理解。另一方面,对于某些特殊行业的工作、 任务,也要经过很复杂的操作才可以完成,而对于某些只需要应用不需要深入研究、理解的普通 办公文员们来说是一个技能考验。而通过 VBA 进行二次开发可以将复杂的任务变得更简单。简 单是指理解和操作上同时简化。 就像 1.1.3 节中通过右键菜单提取身份证号码三类信息一样,不需要用户去录入长长的公式, 以及理解信息是如何提取出来的,单击菜单即可完成。再如企业中生成工资条,10000 个人的资 数用手工操作需要处理 10000*N 次,而利用 Excel 插件可以单击按钮完瞬间成。  将工作表数据提升安全性 利用 VBA 代码可以对数据进入多层保护,在某些特殊需求下,VBA 可以保护数据让普通用 户无法胡乱修改,或者不小心破坏数据及数组结构。  提升数据准确性 准确性体现在数据录入和数据运算两方面。首先,通地 VBA 对输入的数据进入限制,可以 防止用户意外录入不规范字符。如数字中有两个小数点,或者录入数值时不小心录入了标点或者 字母,造成无法计算或者漏算。其次,在数据运算时,人工设置大量公式,或者每天在不同地方 重复录入同一个公式。在大量地操作中难以避免不产生一次错误。而利用 VBA 可以让工作简化, 工作量越小,出错的机率一定越小;同时,在大量重复性工作中 VBA 可以确保不产生错误。  完成 Excel 本身无法完成的任务 弹出提示、警告对话框、行程安排与预告,或者到磁盘中查找需要的数据、修改注册表等等, Excel 常规方式是不可能完成的。如果需要类似功能,VBA 完全可以胜任。  开发专业程序 利用 VBA 还可以开发一些专业型的程序,如报表汇总软件、进销存管理系统、人事管理系 统等等,可以将界面设置成其它任何软件的显示方式媲美专业的程序软件
Excel VBA 程序开发自学通 2022-6-4 第 5页 /共 471页 1.2 插件特点及其如何发挥插件的优势 在前一节中,通过一个身份证信息获取的插件认识了 Excel 插件,那么在工作中应如何发挥 Excel 插件的优势呢? 1.2.1 Excel 插件的特点 Excel 插件是利用 VBA 程序开发的外置工具,通常是 xla、xlam 格式或者 dll 格式。其中 xla 和 xlam 插件直接用 Excel 就可以开发,而 dll 插件通常采用 VB 或者 C++来编写。 不管何种软件开发的插件,它都需要在外观和功能两方面具有某些特征,以方便用户调用。 1.外观特征  有若干个菜单或者工具按钮 在插件封装后,调用其代码有两种方式:用代码调用,用菜单或者工具栏按钮,显然菜单更 方便。用户通过菜单单击即可完成相对于常规方式较复杂的操作或者运算。  利用窗体实现与工作表数据交互 在弹出的窗体中可以调用工作表的数据,也可以将窗体中录入的数据导到工作表。而在窗体 中录入数据时,相对于工作表中录入数据,可更好地控制。例如某个文字框中可以指定只能录入 数字,而另一个文字框可以指定只能入日期。也可以设定录入某项目后自动跳转到指定目标位置, 而不用手动去移动光标插入点。甚至可以在录入时核对是否与工作表中数据是否重复等等……  有一个帮助界面 对于开发者来说,不管自己开发的工具如何简单,都有必要向用户说明其功能和操作方式。 所以在工具中通常加入一个窗体,进行文字说明或者动画演示。特别是工具没有提供菜单、而是 通过函数调用或者快捷键调用时,更需要一个说明窗体。  对函数做参数说明 对于函数类插件,必须对每个函数的参数进入详细说明,让用户插入函数时可以清晰明了地 看到每个函数中每个参数的功能与使用方式。 2.功能特征 Excel 插件中的代码和普通宏程序的代码在编写上具有一些差异,这是它们的设计目的不同造 成的。其中宏代码通常用于解决某个具体的问题,它可能限用一次,也可能需要反复调用。但都 只为解决自己的某个具体问题而录制。而开发 Excel 插件则通常是开发者开发后,给其他的终端 用户使用。用户不确定,需要操作的区域对象不确定。所以插件有不同的需求,它需要具有以下 特征:  没有具体的区域地址 由于开发插件通常是给其他的终端用户使用,所以不能指定数据区域地址,而是提供一个自 由选择目标区域的选择对话框,或者利用代码计算目标工作表中的待计算区域。这是和录制宏最 大的差异。  不使用具体的工作表名或者工作簿名 原理与前一条一致。  必须有通于菜单或者窗体供用户调用命令,而不是在工作表中建立按钮来调用命令。 dll 格式的插件不存在工作表,而 xla 和 xlam 格式插件的工作表是隐藏状态,工作表不可能在 用户的界面呈现出来,所以必须建立一个通用的菜单栏,使其在打开任意工作簿都会显示出来供 用户操作。如果使设置了快捷键,那么是可以不用菜单或工具栏的,界面将会更简洁。
Excel VBA 程序开发自学通 2022-6-4 第 6页 /共 471页  尽可能提供自定义选项 插件的针对性不强,即它需要有广泛性。插件通常不是为某一个固定用户开发,或者需要处 理的数据并非永远一致,那么在不同用户使用同一功能时,需要有自定义其参数或者选项的空间, 工具才能有更好的通用性。例如设计一个工资条制作插件,那么工资条的表头行数就有必要让用 户选择,而非强制一行或者两行。这和编写一个解决临时性问题的编程思路不同。  具有多版本适应能力 目前办公用户使用的 Excel 版本差异很大,有 Excel 2000、Excel XP、Excel 2003,也有 Excel 2007。开发者不会假定用户都用某个版本的 Excel,而是通过代码判断当前用户的版本号,然后调 用不同的代码,以适应当前版本,否则某些功能可以无法使用。  防错机制 自用型宏程序通常不用防错,因为用户和开发者是同一人。而插件则必须有完善的防错机制, 预先设置了遇到某种错误该如何反应的措施,避免破坏用户数据,或者进入死循环,消耗尽计算 机的内存资源。 1.2.2 Excel 插件的优势与限制 在工作中使用插件,可以使用工作更轻松,运算更快速、准确。当然前提是插件的代码编写 足够优秀,不仅具有很强的通用性,还要有完善的防错机制,以及灵活的自定义选项。那么工作 中使用优秀的插件进行工作具有哪些优势呢?  简化操作:类似于 bat 批处理文件,可以一键执行多个任务  强化功能:对 Excel 内置功能无法完成的一些任务,借用 VBA 代码可以实现  美化界面:VBA 用以调用 Flash 动画,也可以播放 Gif 动画,还可以直接对单元格字符 产生滚动效果。对于喜欢装点的用户,借用 VBA 可对工作表进行很好地修饰  固化格式:VBA 可以对录入的数据进入检测,阻止输入不规范的数据;也可以禁止新增、 删除工作表,或者禁止缩放窗口,从而促使多用户文件能确保格式一致,便于汇总 虽然插件在工作中有以上优势,但它在某些方面也具有一些限制:  通用性方面:开发插件通常是个人行为,而非 Office 软件一样由一个大公司主持。所以 其通用性很可能不是很好,开发者测试的次数少以及测试条件不足等等,导致工具具有 某些隐含的缺陷  防错方面:程序员不一定是终端用户,甚至可能从来没有成为办公用户,而是直接学习 插件开发。那么在程序编写时就可能思维受限,无法对可能出现的所有错误进行防范  移植方面:插件属于外置工具,它的所有功能都需要安装才能使用。所以如果利用插件 设计的表格有可能传用客户后无法正常开启,或者开启后无法正常显示。最好的解决方 法是将插件让客户端也安装一次  独立方面:Excel 的 VBA 是依附于 Excel 主体程序的附属程序,它可以开发强化 Excel 功能的程序,但不能开发脱离 Excel 而单独存在的软件。如果需要开发全新而专业的应 用程序,VBA 并非理想的程序 1.2.3 如何发挥插件的优势 可以确定的是,善用插件可以提升工作效率。但是插件也不可滥用,否则享用优势的同时, 也会产生一些后患。 首先,需要明白插件相对于 Excel 的功能属于外置工具,它需要安装后才能使用。如果读者
Excel VBA 程序开发自学通 2022-6-4 第 7页 /共 471页 的文件非自用型,需要与他人共享、阅读,那么需要连插件一起共享; 其次,如果是简单的功能,尽量使用内置功能,少用插件。插件适用于处理复杂的或者 Excel 内置功能无法完成的工作; 宏有一个通用 BUG,即使用宏代码后,内置撤消功能将禁用。为了让用户减少损失,针对某 些会更新数据、修改(破坏)原有格式的工具,一定要提供一个恢复原状的程序。例如有制作工 资的工具,就搭配一个删除工资条的工具。 最后,尽量将插件在同部门共享。即一个办公室为单位或者一个企业为单位,让整个单位都 拥有相同的插件,才能更好地发挥插件优势。 1.2.4 开发 Excel 插件的条件 针对插件的开发者,他/她需要什么条件呢?现罗列如下:  熟练撑握 VBA 技术 这是首要条件。必须对大部分常用对象及其属性熟练地掌握。且需要了解数据处理的常用方 式,并从多种处理方式中找出最高效且通用的方式。如果在某些特殊情况下,程序的通用性与执 行效率只能选择其一时,通用性优先于执行速度。  具有一定的报表操作经验 仅学习 VBA 是可以熟练掌握 VBA 知识的,但是仅掌握 VBA 知识却不可能成为优秀的程序 员。例如开发财务人员用的插件,那么需要懂得一些财务知识,不需要精通,但一定要对财务知 识有所了解或者有财务报表的制作经验,才可能开发出适合于财务人员的插件。  美化常识 这里的美化并不一定是漂亮的外观,而是要使自己开发的程序界面具有协调性、统一性,还 需要了解普通用户的操作习惯,根据习惯设计人性化或者操作更便利的界面。当然,在不影响效 率的前提下,将窗体设计得更美观,也是具有现实意义的。  熟悉不同版本的 Excel 间的差异 终端用户们有可能使用多个版本的 Excel,那么开发者也需要了解不同版本间的差异。例如 Excel 2003 中 Application 有一个属性 FileSearch,用于在磁盘中查找文件,而 Excel 2007 取消了 该属性,那么开发插件时就应尽量避免使用该属性,借用其它方法的代替。否则将产生兼容性问 题,以致程序产生 BUG。  具有较强的耐心 编写程序是一个与字母相处的过程。对于大中型程序,可能长时间对着一堆字母或者数字, 这需要有一定的忍耐力。甚至在程序开发完成后,仍然需要耐心对程序进行多角度、多版本的测 试,以提升程序的通用性和纠错性。 1.2.5 本书架构 本书除 VBA 基本理论外,偏重于讲解插件开发的原理、思路与方法以及如何提升程序速度。 在以后的章节中,主要从按以下方式进行编排: (1) VBA 历史与功能、安全性等等周边知识简要介绍 (2) 认识 VBE 编辑器并对其它进行优化设置 (3) 学习 VBA 中常用对象及属性、方法、事件 (4) VBA 代码如何提升执行速度 (5) 掌握 VBA 高级应用,包括窗体的认识,及磁盘、目录与文件操作
Excel VBA 程序开发自学通 2022-6-4 第 8页 /共 471页 (6) 开发 VBE 环境下的插件 (7) 学习利用 VB 开发专业性的 COM 加载宏插件 (8) 最后利用前面章节的知识开发一个大型 Excel 插件。从该插件的开发思路和过程让读 者了解插件开发的常规流程及注意事项 本书以插件开发为重心,但对于 VBA 中常用知识,不一定与插件开发相关的知识但工作中 较常用的功能也会进行详解,或者进行实例演示。 除插件开发外,程序的提升和防错在本书的多次强调的重点。 从第二章开始,让读者学习、掌握 VBA 理论知识,为插件开发提供基础。
分享到:
收藏