第1章 使用VBA发挥Excel的威力 1
1.1 Excel的威力 1
1.2 进入壁垒 1
1.3 宏录制器不管用 1
1.3.1 Visual Basic并不像BASIC 2
1.3.2 VBA非常容易上手 2
1.3.3 Excel VBA值得学习 2
1.4 熟悉“开发工具”选项卡 2
1.5 宏安全性 3
1.5.1 添加受信任位置 3
1.5.2 使用宏设置启用不在受信任位置的工作簿中的宏 5
1.5.3 使用设置“禁用所有宏,并发出通知” 6
1.6 录制和存储宏 6
1.7 运行宏 7
1.7.1 创建宏按钮 7
1.7.2 将宏关联到窗体控件、文本框或形状 8
1.8 使用Excel 2007新增的文件类型 9
1.9 了解Visual Basic编辑器 10
1.9.1 Visual Basic编辑器设置 10
1.9.2 工程资源管理器 11
1.9.3 属性窗口 12
1.10 了解宏录制器的缺点 12
1.10.1 准备录制宏 13
1.10.2 录制宏 14
1.10.3 在编程窗口中查看代码 14
1.10.4 其他时间运行该宏时得到意外的结果 16
1.10.5 一种可能的解决方案:在录制时使用相对引用 16
第2章 VBA简介 21
2.1 VBA是一种面向对象语言 21
2.2 VBA语言的组成部分 22
2.3 VBA学起来并不难 24
2.3.1 VBA帮助文件——使用F1键获取帮助 24
2.3.2 使用帮助主题 26
2.4 查看录制的宏代码——使用Visual Basic编辑器和帮助 27
2.4.1 可选参数 28
2.4.2 预定义常量 28
2.4.3 可返回对象的属性 32
2.5 使用调试工具帮助理解录制的代码 33
2.5.1 步进执行代码 33
2.5.2 另一个调试选项——断点 35
2.5.3 在代码中向前或向后移动 36
2.5.4 不逐句运行每行代码 36
2.5.5 在逐句执行代码时进行查询 36
2.5.6 使用监视设置断点 40
2.5.7 监视对象 41
2.6 所有对象、方法和属性的终极参考信息 41
2.7 整理代码的5项技巧 43
2.7.1 技巧1:不要选择任何单元格 43
2.7.2 技巧2:从区域底部开始查找最后一行 44
2.7.3 技巧3:使用变量避免硬编码行和公式 45
2.7.4 技巧4:在一条语句中进行复制和粘贴 45
2.7.5 技巧5:使用With...End With对相同的单元格或区域执行多项操作 45
2.8 综合应用——修复录制的代码 46
第3章 引用区域 49
3.1 Range对象 49
3.2 使用选择的左上角和右下角指定区域 50
3.3 命名区域 50
3.4 引用区域的快捷方式 50
3.5 引用其他工作表中的区域 50
3.6 引用相对于其他区域的区域 51
3.7 使用Cells属性选择区域 52
3.8 使用Offset属性引用区域 53
3.9 使用Resize属性修改区域的大小 54
3.10 使用Columrs和Rows属性指定区域 55
3.11 使用Union方法合并多个区域 55
3.12 使用Intersect方法根据重叠区域创建新区域 56
3.13 使用IsEmpty函数检查单元格是否为空 56
3.14 使用CurrentRegion属性快速选择数据区域 57
3.15 使用区域集合返回非连续区域 59
3.16 引用数据表 60
第4章 用户定义的函数 61
4.1 创建用户定义的函数 61
4.2 自定义函数示例 62
4.3 共享UDF 63
4.4 很有用的自定义函数 63
4.4.1 获取工作簿的名称 64
4.4.2 获取当前工作簿的名称和文件路径 64
4.4.3 检查工作簿是否打开 64
4.4.4 检查工作表是否包含在打开的工作簿中 65
4.4.5 统计文件夹中的工作簿数量 65
4.4.6 获取UserID 66
4.4.7 检索最后一次保存的日期和时间 67
4.4.8 获取固定不变的日期和时间 68
4.4.9 验证电子邮件地址 68
4.4.10 根据内部颜色对单元格求和 70
4.4.11 统计非重复值的数量 70
4.4.12 删除区域中重复的值 71
4.4.13 在区域中查找第一个非空单元格 73
4.4.14 替换多个字符 73
4.4.15 从文本中获取数字 74
4.4.16 将星期编号转换为日期 75
4.4.17 从用分隔符分隔的字符串中提取值 76
4.4.18 排序并拼接 76
4.4.19 对数字和字母进行排序 77
4.4.20 在文本中搜索字符串 79
4.4.21 颠倒单元格内容的顺序 79
4.4.22 多个最大值 80
4.4.23 返回链接的地址 81
4.4.24 返回单元格地址的列字母 81
4.4.25 静态随机 81
4.4.26 将Select Case用于工作表 82
第5章 循环和流程控制 83
5.1 For...Next循环 83
5.1.1 在For语句中使用变量 85
5.1.2 For...Next循环的变体 86
5.1.3 在满足特定条件时提早退出循环 87
5.1.4 嵌套循环 87
5.2 Do循环 88
5.2.1 在Do循环中使用While或Until子句 91
5.2.2 While...Wend循环 92
5.3 VBA循环:For Each 92
5.3.1 对象变量 93
5.3.2 遍历文件夹中的所有文件 94
5.4 流程控制:使用If...Then...Else和Select Case 95
5.4.1 基本流程控制:if...Then...Else 95
5.4.2 条件 96
5.4.3 If...Then...Else...End If 96
5.4.4 使用If...Else If...End If检测多个条件 97
5.4.5 使用Select Case...End Select检测多个条件 97
5.4.6 在Case语句中使用复杂表达式 98
5.4.7 嵌套If语句 98
第6章 R1C1公式 101
6.1 引用单元格:A1和R1C1引用样式之比较 101
6.2 切换到R1C1引用样式 102
6.3 Excel公式创造的奇迹 103
6.3.1 输入公式一次并复制多次 103
6.3.2 这并不神奇 104
6.3.3 在VBA中采用A1与RICl样式之比较 104
6.4 R1C1引用样式简介 105
6.4.1 使用R1C1相对引用 105
6.4.2 使用R1C1绝对引用 106
6.4.3 使用R1C1混合引用 106
6.4.4 使用R1C1引用样式整行或整列 107
6.4.5 使用单个R1C1公式替换多个A1公式 107
6.4.6 记住列字母对应的列号 108
6.5 条件格式必须使用R1C1引用 109
6.5.1 通过用户界面设置条件格式 109
6.5.2 使用VBA设置条件格式 111
6.5.3 找出G列中最大的值 112
6.6 数组公式必须是R1C1公式 113
第7章 Excel 2007新增和修改过的功能 115
7.1 如果Excel用户界面不同,则VBA也不同 115
7.1.1 选项卡 115
7.1.2 图表 115
7.1.3 数据透视表 116
7.1.4 条件格式 116
7.1.5 数据表 117
7.1.6 排序 117
7.1.7 SmartArt 117
7.2 宏录制器不记录在以前的版本中记录的操作 117
7.3 学习新的对象和方法 119
7.4 兼容模式 120
7.4.1 Version 120
7.4.2 Excel8CompatibilityMode 120
第8章 使用VBA创建和操作名称 122
8.1 Excel名称 122
8.2 全局名称和局部名称 122
8.3 添加名称 123
8.4 删除名称 125
8.5 添加备注 125
8.6 名称类型 126
8.6.1 公式 126
8.6.2 字符串 126
8.6.3 数字 128
8.6.4 数据表 128
8.6.5 让名称指向数组 129
8.6.6 保留名称 129
8.7 隐藏名称 130
8.8 确定名称是否存在 130
第9章 事件编程 133
9.1 事件级别 133
9.2 使用事件 134
9.2.1 事件参数 134
9.2.2 启用事件 134
9.3 工作簿事件 135
9.3.1 Workbook_Activate() 135
9.3.2 Workbook_Deactivate() 135
9.3.3 Workbook_Open() 135
9.3.4 Workbook_BeforeSave(ByVal SaveAsUI As Boolean,Cancel As Boolean) 136
9.3.5 Workbook_BeforePrint(Cancel As Boolean) 136
9.3.6 Workbook_BeforeClose(Cancel As Boolean) 137
9.3.7 Workbook_NewSheet(ByVal ShAs Object) 137
9.3.8 Workbook_WindowResize(ByVal Wn As Window) 138
9.3.9 Workbook_WindowActivate(ByVal Wn As Window) 138
9.3.10 Workbook_WindowDeactivate(ByVal Wn As Window) 138
9.3.11 Workbook_AddInInstall() 138
9.3.12 Workbook_AddInUninstall 138
9.3.13 Workbook_SheetActivate(ByVal Sh As Object) 138
9.3.14 Workbook_SheetBeforeDoubleClick(ByVal Sh As Object,ByVal Target As Range,Cancel As Boolean) 139
9.3.15 Workbook_SheetBeforeRightClick(ByVal Sh As Object,ByVal Target As Range,Cancel As Boolean) 139
9.3.16 Workbook_SheetCalculate(ByVal Sh As Object) 139
9.3.17 Workbook_SheetChange(ByVal Sh As Object,ByVal Target As Range) 139
9.3.18 Workbook_Sync(ByVal SyncEventType As Office.MsoSyncEventType) 139
9.3.19 Workbook_SheetDeactivate(ByVal Sh As Object) 139
9.3.20 Workbook_SheetFollowHyperlink(ByVal Sh As Object,ByVal Target As Hyperlink) 140
9.3.21 Workbook_SheetSelectionChange(ByVal ShAs Object,ByVal TargetAs Range) 140
9.3.22 Workbook_PivotTableCloseConnection(ByVal Target As PivotTable) 140
9.3.23 Workbook_PivotTableOpenConnection(ByVal Target As PivotTable) 140
9.3.24 Workbook_RowsetComplete(ByVal Description As String,ByVal Sheet As String,ByVal Success As Boolean) 140
9.4 工作表事件 140
9.4.1 Worksheet_Activate() 140
9.4.2 Worksheet_Deactivate() 140
9.4.3 Worksheet_BeforeDoubleClick(ByVal Target As Range,Cancel As Boolean) 141
9.4.4 Worksheet_BeforeRightClick(ByValTarget As Range,Cancel As Boolean) 141
9.4.5 Worksheet_Calculate() 141
9.4.6 Worksheet_Change(ByVal Target As Range) 142
9.4.7 Worksheet_SelectionChange(ByVal Target As Range) 142
9.4.8 Worksheet_FollowHyperlink(ByVal Target As Hyperlink) 143
9.5 在单元格中快速输入24小时制事件 143
9.6 图表事件 144
9.6.1 嵌入图表 144
9.6.2 Chart_Activate() 145
9.6.3 Chart_BeforeDoubleClick(ByVal ElementID As Long,ByVal Argl As Long,ByVal Arg2 As Long,Cancel As Boolean) 145
9.6.4 Chart_BeforeRightClick(Cancel As Boolean) 145
9.6.5 Chart_Calculate() 145
9.6.6 Chart_Deactivate() 145
9.6.7 Chart_MouseDown(ByVal Button As Long,ByVal Shift As Long,ByVal x As Long,ByVal y As Long) 145
9.6.8 Chart_MouseMove(ByVal Button As Long,ByVal Shift As Long,ByVal x As Long,ByVal y As Long) 146
9.6.9 Chart_MouseUp(ByVal Button As Long,ByVal Shift As Long,ByVal x As Long,ByVal y As Long)…….. 146
9.6.10 Chart_Resize() 146
9.6.11 Chart_Select(ByVal ElementID As Long,ByVal Argl As Long,ByVal Arg2 As Long) 146
9.6.12 Chart_SeriesChange(ByVal SeriesIndex As Long,ByVal PointIndex As Long) 147
9.6.13 Chart_DragOver() 147
9.6.14 Chart_DragPlot() 147
9.7 应用程序级事件 147
9.7.1 AppEvent_AfterCalculate() 148
9.7.2 AppEvent_NewWorkbook(ByVal Wb As Workbook) 148
9.7.3 AppEvent_SheetActivate(ByVal Sh As Object) 149
9.7.4 AppEvent_SheetBeforeDoubleClick(ByVal Sh As Object,ByVal Target As Range,CancelAs Boolean) 149
9.7.5 AppEvent_SheetBeforeRightClick(ByVal Sh As Object,ByVal Target As Range,CancelAs Boolean) 149
9.7.6 AppEvent_SheetCalculate(ByVal Sh As Object) 149
9.7.7 AppEvent_SheetChange(ByVal Sh As Object,ByVal Target As Range) 149
9.7.8 AppEvent_SheetDeactivate(ByVal ShAs Object) 149
9.7.9 AppEvent_SheetFollowHyperlink(ByVal Sh As Object,ByVal Target As Hyperlink) 149
9.7.10 AppEvent_SheetSelectionChange(ByVal Sh As Object,ByVal Target As Range) 149
9.7.11 AppEvent_WindowActivate(ByVal Wb As Workbook,ByVal Wn As Window) 150
9.7.12 AppEvent_WindowDeactivate(ByVal Wb As Workbook,ByVal Wn As Window) 150
9.7.13 AppEvent_WindowResize(ByVal Wb As Workbook,ByVal Wn As Window) 150
9.7.14 AppEvent_WorkbookActivate(ByVal Wb As Workbook) 150
9.7.15 AppEvent_WorkbookAddinInstall(ByVal Wb As Workbook) 150
9.7.16 AppEvent_WorkbookAddinUninstall(ByVal Wb As Workbook) 150
9.7.17 AppEvent_WorkbookBeforeClose(ByVal Wb As Workbook,Cancel As Boolean) 151
9.7.18 AppEvent_WorkbookBeforePrint(ByVal Wb As Workbook,Cancel As Boolean) 151
9.7.19 AppEvent_WorkbookBeforeSave(ByVal Wb As Workbook,ByVal SaveAsUI As Boolean,Cancel As Boolean) 151
9.7.20 AppEvent_WorkbookNewSheet(ByVal Wb As Workbook,ByVal Sh As Object) 151
9.7.21 AppEvent_WorkbookOpen(ByVal WbAs Workbook) 151
9.7.22 AppEvent_WorkbookPivotTableCloseConnection(ByVal Wb As Workbook,ByVal Target As PivotTable) 151
9.7.23 AppEvent_WorkbookPivotTableOpenConnection(ByVal Wb As Workbook,ByValTargetAsPivotTable) 151
9.7.24 AppEvent_WorkbookRowsetComplete(ByVal Wb As Workbook,ByVal DescriptionAs String,ByVal Sheet As String,ByVal SuccessAs Boolean) 152
9.7.25 AppEvent_WorkbookSync(ByVal Wb As Workbook,ByVal SyncEventType As Office.MsoSyncEventType) 152
第10章 用户窗体简介 153
10.1 用户交互方法 153
10.1.1 输入框 153
10.1.2 消息框 154
10.2 创建用户窗体 154
10.3 调用和隐藏用户窗体 155
10.4 用户窗体编程 155
10.5 控件编程 157
10.6 使用基本的窗体控件 158
10.6.1 使用标签、文本框和命令按钮 158
10.6.2 选择在窗体中使用列表框还是组合框 160
10.6.3 在用户窗体中添加单选按钮 162
10.6.4 在用户窗体中添加图片 163
10.6.5 在用户窗体中使用旋转按钮 164
10.6.6 使用多页控件来组合窗体 165
10.7 验证用户输入 168
10.8 非法的窗口关闭 168
10.9 获取文件名 169
第11章 创建图表 171
11.1 Excel 2007图表引擎 171
11.2 Excel 2007新增图表功能编程 172
11.3 在VBA代码中引用图表和图表对象 172
11.4 创建图表 172
11.4.1 指定图表的大小和位置 173
11.4.2 引用特定图表 174
11.5 录制选项卡“布局”和“设计”中的命令 176
11.5.1 指定图表类型 176
11.5.2 指定模板图表类型 179
11.5.3 修改图表的布局或样式 179
11.6 使用SetElement模拟通过“布局”选项卡所做的修改 181
11.7 使用VBA修改图表标题 186
11.8 模拟通过“格式”选项卡所做的修改 186
11.9 使用监视窗口查看对象的设置 199
11.10 使用监视窗口了解旋转设置 202
11.11 创建高级图表 203
11.11.1 创建真正的“开盘-盘高-盘低-收盘”股价图 203
11.11.2 为频数图创建区间(bin) 205
11.11.3 创建堆积面积图 208
11.12 将图表作为图形导出 212
11.13 创建数据透视图 213
第12章 使用统计函数 216
12.1 通过VBA使用高级筛选比通过Excel用户界面使用它更容易 216
12.2 使用高级筛选提取不重复的值 217
12.2.1 使用用户界面提取不重复的值 217
12.2.2 使用VBA代码提取不重复的值 219
12.2.3 获得多个字段的不重复组合 222
12.3 使用包含条件区域的高级筛选 223
12.3.1 使用逻辑OR合并多个条件 225
12.3.2 使用逻辑AND合并两个条件 225
12.3.3 其他稍复杂的条件区域 225
12.3.4 最复杂的条件——使用公式指定条件 226
12.4 在原有区域显示高级筛选结果 232
12.4.1 原地筛选时没有符合条件的记录 233
12.4.2 执行就地筛选后显示所有记录 233
12.4.3 在原有区域显示不重复的筛选结果 233
12.5 复制符合条件的所有记录而不是不重复的记录 233
12.5.1 复制所有列 234
12.5.2 复制部分列并重新排列 234
12.5.3 使用两种高级筛选为每位顾客创建报表 236
12.6 使用自动筛选 240
12.6.1 使用代码启用自动筛选 240
12.6.2 隐藏部分字段的自动筛选下拉列表 241
12.6.3 使用自动筛选针对单列进行筛选 242
12.6.4 从筛选下拉列表中选择多个值 243
12.6.5 使用自动筛选选择动态日期范围 243
12.6.6 根据颜色或图标进行筛选 244
12.6.7 使用自动筛选复制下周的所有记录 246
第13章 使用VBA创建数据透视表 248
13.1 数据透视表简介 248
13.2 了解版本 248
13.3 通过Excel用户界面创建数据透视表 250
13.4 使用Excel VBA创建数据透视表 253
13.4.1 定义数据透视表缓存 254
13.4.2 创建和配置数据透视表 254
13.4.3 求和而非计数 255
13.4.4 无法移动或修改部分数据透视报表的原因 257
13.4.5 确定数据透视表的最终大小 257
13.5 创建有关每种产品的收入的报表 260
13.5.1 避免数据区域包含空单元格 261
13.5.2 确保使用表格布局 262
13.5.3 使用“自动排序”来控制排列顺序 262
13.5.4 修改默认的数字格式 262
13.5.5 删除多个行字段的分类汇总行 263
13.5.6 删除“总计”行 263
13.6 在创建最终的报表时处理讨厌的问题 263
13.6.1 创建用于放置报表的工作簿 264
13.6.2 将汇总数据复制到空报表工作表中 264
13.6.3 填充大纲视图导致的空单元格 265
13.6.4 最后的格式设置 266
13.6.5 添加分类汇总 266
13.6.6 完整的代码 267
13.7 解决包含多个数据字段时导致的问题 270
13.7.1 计算数据字段 272
13.7.2 计算项 274
13.8 使用分组根据日期字段进行汇总 276
13.8.1 立即VBA中的Group方法 276
13.8.2 按星期分组 278
13.8.3 通过将两个日期字段分组计算从订货到交货的时间 280
13.9 使用高级数据透视表技术 283
13.9.1 使用“自动显示”创建简报 283
13.9.2 使用ShowDetail筛选记录集 285
13.9.3 为每个地区创建一个报表 287
13.9.4 手工筛选出多项 290
13.10 手工控制排列顺序 291
13.11 使用求和、平均值、计数、最小值、最大值等 291
13.12 使用百分比 293
13.12.1 占总和的百分比 293
13.12.2 相对于前一个月的增长百分比 293
13.12.3 占特定地区的百分比 294
13.12.4 当前累计值 294
13.13 使用Excel 2007新增的数据透视表功能 295
13.13.1 使用新的筛选方式 295
13.13.2 应用数据透视表样式 296
13.13.3 通过“设计”选项卡修改布局 297
13.13.4 应用数据可视化 298
第14章 展示Excel的威力 300
14.1 文件操作 300
14.1.1 列出文件夹中的文件 300
14.1.2 导入CSV 302
14.1.3 将整个CSV读入内存并进行分析 303
14.2 合并和拆分工作簿 304
14.2.1 将每个工作表存储为独立的工作簿 304
14.2.2 合并工作簿 305
14.2.3 筛选数据并将结果复制到工作表中 306
14.2.4 将数据导出到Word文档中 307
14.3 处理单元格批注 308
14.3.1 列出批注 308
14.3.2 调整批注框的大小 310
14.3.3 通过居中调整批注框的大小 311
14.3.4 将图表用作批注 312
14.4 让客户叫绝的实用程序 313
14.4.1 使用条件格式突出选定单元格 313
14.4.2 在不使用条件格式的情况下突出选定的单元格 315
14.4.3 自定义转置数据 316
14.4.4 选中/取消选中非连续单元格 318
14.5 VBA专业技巧 320
14.5.1 数据透视表深化 320
14.5.2 加速页面设置 321
14.5.3 计算代码的执行时间 324
14.5.4 自定义排序顺序 324
14.5.5 进度指示器 325
14.5.6 密码框 327
14.5.7 修改大小写 329
14.5.8 使用SpecialCells进行选择 330
14.5.9 ActiveX上下文菜单 330
14.6 很不错的应用程序 332
14.6.1 检索股票/基金的历史价格 332
14.6.2 使用VBA扩展性将代码移到新工作簿中 333
第15章 数据可视化和条件格式 335
15.1 数据可视化简介 335
15.2 VBA中新增的数据可视化方法和属性 336
15.3 在区域中添加数据条 337
15.4 在区域中添加色阶 339
15.5 在区域中添加图标集 340
15.5.1 指定图标集 341
15.5.2 指定每个图标对应的范围 342
15.6 可视化使用技巧 342
15.6.1 将图标集应用于区域的一部分 342
15.6.2 在区域中使用双色数据条 344
15.7 使用其他条件格式化方法 346
15.7.1 设置高于或低于平均值的单元格的格式 346
15.7.2 设置值最大或最小的单元格的格式 347
15.7.3 设置非重复或重复单元格的格式 348
15.7.4 根据单元格的值设置其格式 349
15.7.5 设置包含文本的单元格的格式 349
15.7.6 设置包含日期的单元格的格式 350
15.7.7 设置空单元格或包含错误的单元格的格式 350
15.7.8 使用公式确定要设置哪些单元格的格式 350
15.7.9 使用新属性NumberFormat 352
第16章 读写Web 353
16.1 从Web获取数据 353
16.1.1 手工创建Web查询 354
16.1.2 使用VBA更新现有Web查询 355
16.1.3 使用VBA创建新的Web查询 355
16.2 使用流式数据 358
16.3 使用Application.OnTime定期分析数据 359
16.3.1 计划执行过程要求Excel处于就绪模式 359
16.3.2 指定更新的时间窗口 360
16.3.3 撤销宏运行计划 360
16.3.4 关闭Excel将取消所有挂起的宏执行计划 360
16.3.5 让宏在X分钟后运行 361
16.3.6 语音提示计划 361
16.3.7 让宏每隔两分钟运行一次 362
16.4 将数据发布到网上 363
16.4.1 使用VBA创建自定义网页 364
16.4.2 将Excel用作内容管理系统 365
16.4.3 在Excel中使用FTP 368
16.5 信任Web内容 368
第17章 Excel 2007中的XML 371
17.1 XML简介 371
17.2 简单的XML规则 372
17.3 通用文件格式 372
17.4 XML是新的通用文件格式 373
17.5 XML缩略语 374
17.6 Microsoft将XML作为文件类型 375
17.7 使用Amazon.com的XML数据 376
第18章 自动控制Word 379
18.1 早期绑定 379
18.2 晚期绑定 382
18.3 创建和引用对象 382
18.3.1 关键字New 382
18.3.2 CreateObject函数 383
18.3.3 GetObject函数 383
18.4 使用常量 384
18.4.1 使用监视窗口来获悉常量的实际值 384
18.4.2 使用对象浏览器来获悉常量的实际值 385
18.5 理解Word对象 386
18.5.1 Document对象 386
18.5.2 Selection对象 388
18.5.3 Range对象 388
18.5.4 书签 392
18.6 控制Word窗体控件 394
第19章 数组 397
19.1 声明数组 397
19.2 填充数组 398
19.3 清空数组 400
19.4 使用数组提高代码的运行速度 401
19.5 动态数组 402
19.6 传递数组 403
第20章 处理文本文件 405
20.1 导入文本文件 405
20.1.1 导入不超过1084576行的文本文件 405
20.1.2 读取超过1084576行的文本文件 411
20.2 写入文本文件 415
第21章 将Access用作后端以改善多用户数据访问 416
21.1 ADO和DAO之比较 417
21.2 ADO工具 418
21.3 添力口记录 420
21.4 检索记录 421
21.5 更新记录 423
21.6 通过ADO删除记录 425
21.7 通过ADO汇总记录 425
21.8 通过ADO完成其他任务 426
21.8.1 检查表是否存在 426
21.8.2 检查字段是否存在 427
21.8.3 动态添加表 428
21.8.4 动态添加字段 429
第22章 创建类、记录和集合 430
22.1 插入类模块 430
22.2 捕获应用程序事件和嵌入图表事件 431
22.2.1 应用程序事件 431
22.2.2 嵌入图表事件 432
22.3 创建自定义对象 434
22.4 使用自定义对象 434
22.5 使用Property Let和Property Get控制用户使用自定义对象的方式 435
22.6 集合 437
22.6.1 在标准模决中创建集合 437
22.6.2 在类模块中创建集合 439
22.6.3 帮助按钮 440
22.7 用户定义类型(UDT) 442
第23章 高级用户窗体技术 445
23.1 使用“用户窗体”工具栏设计用户窗体控件 445
23.2 其他用户窗体控件 445
23.2.1 复选框 445
23.2.2 TabStrip控件 447
23.2.3 RefEdit 449
23.2.4 切换按钮 450
23.2.5 将滚动条用作滑块让用户选择值 451
23.3 控件和集合 452
23.4 非模态用户窗体 454
23.5 在用户窗体中使用超链接 455
23.6 在运行阶段添加控件 456
23.6.1 动态地调整用户窗体大小 457
23.6.2 动态地添加控件 457
23.6.3 动态地确定大小 458
23.6.4 添加其他控件 458
23.6.5 动态地添加图像 459
23.6.6 完成的代码 459
23.7 在用户窗体中添加帮助 461
23.7.1 显示快捷键 462
23.7.2 添加控件提示文本 462
23.7.3 指定Tab顺序 462
23.7.4 给活动控件着色 463
23.8 多列列表框 464
23.9 透明窗体 465
第24章 Windows应用程序编程接口 467
24.1 Windows API简介 467
24.2 理解API声明 467
24.3 使用API声明 468
24.4 API示例 469
24.4.1 获悉计算机的名称 469
24.4.2 确定网络中是否有人打开了Excel文件 470
24.4.3 获悉显示器分辨率设置 470
24.4.4 自定义“关于”对话框 471
24.4.5 禁止通过“X”按钮关闭用户窗体 472
24.4.6 不间断的时钟 473
24.4.7 播放声音 473
24.4.8 获悉文件路径 474
24.5 找到其他API声明 477
第25章 处理错误 479
25.1 错误导致的后果 479
25.2 使用On Error GoTo进行基本错误处理 482
25.3 通用的错误处理程序 483
25.3.1 忽略错误 483
25.3.2 页面设置问题通常可忽略 484
25.3.3 禁止显示Excel警告 485
25.3.4 利用错误 485
25.4 培训用户 486
25.5 开发阶段错误和运行阶段错误 486
25.5.1 运行错误9:下标越界 486
25.5.2 运行错误1004:Global对象的Range方法失败 487
25.6 保护代码的缺点 488
25.7 破解密码 489
25.8 密码保护的其他问题 489
25.9 不同版本导致错误 490
第26章 创建自定义选项卡以方便用户运行宏 491
26.1 辞旧迎新 491
26.2 将代码加入到文件夹Customui中 492
26.3 创建选项卡和组 493
26.4 在组中添加控件 494
26.5 Excel文件的结构 499
26.6 理解RELS文件 499
26.7 重命名Excel文件并打开它 500
26.8 给按钮指定图像 500
26.8.1 Microsoft Office图标 500
26.8.2 自定义图标 502
26.9 将Excel 2003自定义工具栏转换为Excel 2007自定义选项卡 503
26.10 排除错误 505
26.10.1 在DTD/架构中没有找到指定属性 505
26.10.2 菲法的名称字符 506
26.10.3 元素之间的父子关系不正确 506
26.10.4 Excel发现不可读取的内容 506
26.10.5 参数数量不正确或属性值无效 507
26.10.6 自定义选项卡没出现 508
26.11 其他运行宏的方式 508
26.11.1 快捷键 508
26.11.2 将宏关联到命令按钮 509
26.11.3 将宏同ActiveX控件关联起来 511
26.11.4 通过超链接运行宏 512
第27章 创建加载项 513
27.1 标准加载项的特征 513
27.2 将Excel工作簿转换为加载项 514
27.2.1 使用“另有为”将文件转换为加载项 514
27.2.2 使用Visual Basic编辑器将文件转换为加载项 515
27.3 让用户安装加载项 516
27.3.1 标准加载项不安全 517
27.3.2 关闭加载项 518
27.3.3 删除加载项 518
27.4 使用隐藏工作簿代替加载项 518
27.5 使用隐藏工作簿存储所有宏和窗体 519