You are on page 1of 642

内 容 简 介

本书侧重于 Access 的基础应用技巧,共 11 章,分为四大部分:第一部分为第 1~


4 章,着重介绍 Access VBA 的基础操作技巧;第二部分为第 5~8 章,着重介绍对数
据库中数据的处理技巧;第三部分为第 9~10 章,着重介绍通过 VBA 代码使用其他
应用程序和外部文件的技巧;第四部分为第 11 章,以 3 个大型的综合实战案例,对
全书所涉及的 Access VBA 知识进行直观、综合的讲解。
读者可以在本书中查询相关案例,从而得到解决工作中问题的思路;也可以将
本书作为学习 Access VBA 的参考书或习题集,通过对本书中案例的演练来掌握
Access VBA 的常用技巧。
本书适用于希望快速掌握 Access VBA 相关知识,并使用 Access VBA 解决办公
中遇到问题的用户,对于不同年龄段的办公人员、文秘、财务人员、公务员,尤其
对刚进入职场的工作人员,在解决实际问题上有很大的指导作用。

图书在版编目(CIP)数据

Access VBA 活用范例大辞典 : 全新版 / 何先军编著


. — 北京:中国铁道出版社,2014.6
ISBN 978-7-113-18200-7

Ⅰ. ①A… Ⅱ. ①何… Ⅲ. ①关系数据库系统 Ⅳ.


①TP311.138

中国版本图书馆 CIP 数据核字(2014)第 050454 号

书 名:Access VBA 活用范例大辞典(全新版)


作 者:何先军 编著

策 划:张亚慧 读者热线电话:010-63560056
责任编辑:张 丹 编辑助理:刘建玮
责任印制:赵星辰 封面设计:多宝格

出版发行:中国铁道出版社(北京市西城区右安门西街 8 号 邮政编码:100054)
印 刷:北京铭成印刷有限公司
版 次:2014 年 6 月第 1 版 2014 年 6 月第 1 次印刷
开 本:880mm×1 230mm 1/32 印张:20 字数:582 千
书 号:ISBN 978-7-113-18200-7
定 价:55.00 元(附赠光盘)

版权所有 侵权必究
凡购买铁道版图书,如有印制质量问题,请与本社读者服务部联系调换。电话:
(010)51873174
打击盗版举报电话:(010)51873659
Foreword

前 言
◎写在前面
Access 开发软件具有易学、易用、成本低的优点,它是开发小型管理软
件的一个最佳选择。要使用 Access 开发软件,Access VBA 则是必须学习的
内容之一。
在初学 Access VBA 时,经常会遇到诸如“能否使用 VBA 实现某种功能”

“可以使用哪些方法实现某种功能”
、“有没有更简单、高效的方法实现某项功能”
之类的问题。有鉴于此,我们特别编写了这本《Access VBA 活用范例大辞典(全
新版)
》,书中精选了各类经典范例 303 个以及 3 个大型综合实战案例,为读者
展示了使用 VBA 代码解决各类问题和实现各种功能的一些常用方法和技巧。

◎精髓大提炼
本书共 11 章,分别从基础技巧、数据处理和数据交换 3 个层面展示了使
用 VBA 代码解决问题和实现各种功能的方法,各章节的具体内容如下所示:

Chapter 01 Access 基础操作技巧


在使用 VBA 代码解决实际问题之前,需要 ◎过程、模块与语句
掌握一些 Access VBA 的基础知识,比如 VBA 编 ◎内置函数++++
辑器的使用、认识过程、函数和变量等。 ◎流程语句

Chapter 02 控件和对象的使用技巧
使用 Access 进行程序开发时,离不开对象和 ◎在窗体上操作的控件
控件的支持。了解并掌握通过 VBA 代码操作它 ◎获取控件中的数据
们的方法,是熟练使用 Access 开发程序的前提。 ◎数据库对象的引用
◎数据库对象的创建与编辑

Chapter 03 掌握 Access 中的对象操作技巧


通过 VBA 代码控制数据库对象的打开、关 ◎应用程序的操作技巧
闭、显示、隐藏等,是使用 Access 开发程序时不 ◎窗体的操作
可避免的操作。

Chapter 04 数据格式处理技巧
使用 Access 开发的程序,更多的是为了在不 ◎文本的外观格式 ◎字符串数据处理
同成员之间进行交互。所以,使用简洁、规范的 ◎数值数据处理 ◎日期数据处理
数据格式,可以提高程序的实用性。

I
Access VBA 活用范例大辞典(全新版)
前 言

Chapter 05 数据排序技巧
通过对数据库中的排序,可以更加高效地对 ◎对窗体中的数据记录进行排序
数据库中的数据进行查找和分析。本章便着重展 ◎通过查询排序数据
示在不同环境下采用的数据排序方式和技巧。 ◎通过编写 SQL 语句排序数据

Chapter 06 数据查询技巧
数据的查找和筛选,可以说是数据库类管理 ◎逐条查询技巧
软件最为重要的功能。通过对大量数据的查找和 ◎同时显示所有查询记录技巧
筛选,可以获得有价值的数据。 ◎通过编写 SQL 语句查询数据

Chapter 07 数据记录的追加、删除和更新技巧
数据记录的追加、删除和更新,是数据库最 ◎追加数据技巧
为重要的功能之一。本章将着重讲解如何通过 ◎删改数据技巧
VBA 代码实现这些功能。 ◎通过编写 SQL 语句编辑记录

Chapter 08 数据记录的统计和打印技巧
通过 VBA 代码实现对数据记录的统计和打 ◎统计数据记录技巧
印设置,可以拓展数据库管理软件的功能,实现 ◎打印数据记录技巧
电脑办公与传统办公的有机结合。

Chapter 09 Access 与其他 Office 组件之间的数据交换技巧


Office 组件的每一个成员都有其鲜明的特 ◎Access 与 Word 之间的数据读写
点,比如 Word 出色的文档处理能力,通过数据 ◎Access 与 Excel 之间的数据读写
交换,Access 开发的软件可以吸收这些特点。

Chapter 10 其他的操作技巧
作为一款常用的软件,Access 功能繁多。本 ◎文件的操作 ◎Web 与 XML 的应用
章将介绍一些其他的操作技巧,通过这些技巧, ◎超链接的应用 ◎其他常用技巧
可以更好地使用 Access 开发数据库管理软件。

Chapter 11 Access VBA 办公实战综合案例


在全书的最后,通过 3 个精心挑选的综合案 ◎出入库管理系统
例,对 Access VBA 在办公过程中的实战应用进 ◎考勤管理系统
行更直观、综合的体现。 ◎通讯录管理系统

◎选择此书理由
【案例目标明确,直指核心问题】
本书与市面上的一部分 VBA 类书籍不同,没有试图在一个综合性案例

II
前 言
中解决所有问题,而是采用了一个案例解决一个问题的思路,尽量避免使读
者陷入到在大段程序中寻找所需代码的麻烦。
【解决方法多样,拓展解题思路】
本书的部分案例采用了多种解决方法,通过比较这些方法之间的异同,
可以有效地拓展读者解决问题的思路和能力。
【提供完整代码,方便学习使用】
本书中的所有案例均提供完整的 VBA 代码,读者在使用本书时,可以
通过光盘文件快速获取案例的源代码。

◎学习指南

1 2
3 8
4
5

6
7

10

1 案例编号
若需要在目录中查找相关的案例,可以使用案例编号进行查找。
2 难易程度·适用版本
本书中将案例按照难易程度分为初、中、高 3 个等级,并使用黑色字体
标识当前案例难度。部分不能够适用某些版本的案例则使用白色字体标出。
III
Access VBA 活用范例大辞典(全新版)
前 言

3 案例标题
将案例主要解决的问题通过标题表示出来,以便根据问题查询相关知识
和案例。
4 案例归类·使用知识
本书中将每一章的案例按照方法分为若干小类,每一类中的案例均可以
进行比较学习,并且在案例类别后面罗列了本例中使用的重点知识。
5 基础解说
对本例中使用到的基础知识和注意事项进行解说。
6 案例操作
叙述本例中需要解决的主要问题和简单地解决办法。
7 素材文件
光盘中提供本例进行操作时使用的素材,方便读者练习时使用。
8 源文件
光盘中保存的案例操作结果,方便读者练习时查阅代码和对比学习。
9 过程源代码
本例中使用到的所有 VBA 代码,并使用注释对代码中的重要部分进行
说明,方便读者阅读代码。
10 执行过程
本例中 VBA 代码的执行方法、过程和结果。

◎超值光盘
本书的随书光盘中提供了书中 11 章共 306 个案例所使用到的所有素材文
件和源文件,以供读者在练习时使用。

◎读者定位
本书主要适用于希望快速掌握 Access VBA 的相关知识,并使用 Access
VBA 解决办公中实际问题的用户,对于不同年龄段的办公人员、文秘、财
务人员、公务员,尤其对刚进入职场的工作人员解决实际问题有很大的指导
作用。
编 者
2014 年 3 月

IV
Contents

目 录
Chapter 01 Access 基础操作技巧 .......................... 1
◎VBA 编辑器 ................................................. 2
001 显示 VBA 编辑器.....................................................................................................2
源文件\第 1 章\显示 VBA 编辑器.accdb

002 调用编辑工具栏 .......................................................................................................4


源文件\第 1 章\调用编辑工具栏.accdb

003 设置代码的显示效果 ...............................................................................................5

004 通过视图菜单打开窗口 ...........................................................................................6


源文件\第 1 章\通过视图菜单打开窗口.accdb

005 设置强制性声明变量 ...............................................................................................7


源文件\第 1 章\设置强制性声明变量.accdb

◎过程、模块与语句............................................ 9
006 创建 Sub 过程 ...........................................................................................................9
源文件\第 1 章\创建 Sub 过程.accdb

007 创建 Function 程序 .................................................................................................10


源文件\第 1 章\创建 Function 过程.accdb

008 定义有作用域的过程 .............................................................................................13


009 创建标准模块和类模块 .........................................................................................13
010 导入与导出模块 .....................................................................................................14
011 直接删除指定模块 .................................................................................................15
012 快速定位到某个过程 .............................................................................................16
013 拆分代码窗口 .........................................................................................................17
014 调用 Sub 过程 .........................................................................................................17
源文件\第 1 章\调用 Sub 过程.accdb

015 递归调用中的参数传递 .........................................................................................19


源文件\第 1 章\递归调用中的参数传递.accdb

I
Access VBA 活用范例大辞典
目 录

◎内置函数................................................... 21
016 显示消息对话框(1) ...........................................................................................21
源文件\第 1 章\显示消息对话框(1).accdb

017 显示消息对话框(2) ...........................................................................................22


源文件\第 1 章\显示消息对话框(2).accdb

018 显示输入对话框 .....................................................................................................24


源文件\第 1 章\显示输入对话框.accdb

019 根据条件表达式的结果返回不同值.....................................................................25
源文件\第 1 章\根据条件表达式的结果返回不同值.accdb

020 判断是否为空值 .....................................................................................................27


源文件\第 1 章\判断是否为空值.accdb

021 判断变量是否被初始化 .........................................................................................29


源文件\第 1 章\判断变量是否被初始化.accdb

022 取得字符串长度 .....................................................................................................30


源文件\第 1 章\取得字符串长度.accdb

023 使用 RGB()函数设置颜色 .....................................................................................32


源文件\第 1 章\使用 RGB 函数设置颜色.accdb

◎VBA 中的定义 ............................................... 33


024 VBA 中的命名规则................................................................................................33
025 让变量名更有意义 .................................................................................................34
026 定义常量 .................................................................................................................34
027 定义变量 .................................................................................................................35
028 定义数组 .................................................................................................................35
029 定义动态数组 .........................................................................................................36
030 自定义数据类型 .....................................................................................................36
源文件\第 1 章\自定义数据类型.accdb

031 定义具有作用域的变量 .........................................................................................38


源文件\第 1 章\定义具有作用域的变量.accdb

II
目 录
032 定义静态变量 .........................................................................................................41
源文件\第 1 章\定义静态变量.accdb

033 使用定义的常量 .....................................................................................................42


源文件\第 1 章\使用定义的常量.accdb

034 使用内置常量 .........................................................................................................44


源文件\第 1 章\使用内置常量.accdb

◎流程语句................................................... 45
035 直线流程结构 .........................................................................................................45
源文件\第 1 章\直线流程结构.accdb

036 简单条件分支结构 .................................................................................................47


源文件\第 1 章\简单条件分支结构.accdb

037 多条件分支结构(1) ...........................................................................................48


源文件\第 1 章\多条件分支结构(1).accdb

038 多条件分支结构(2) ...........................................................................................51


源文件\第 1 章\多条件分支结构(2).accdb

039 具有包含关系的条件分支结构 .............................................................................53


源文件\第 1 章\具有包含关系的条件分支结构.accdb

040 进行循环判断 .........................................................................................................55


源文件\第 1 章\进行循环判断.accdb

041 进行判断循环(1) ...............................................................................................57


源文件\第 1 章\进行判断循环(1).accdb

042 进行判断循环(2) ...............................................................................................59


源文件\第 1 章\进行判断循环(2).accdb

043 进行计次循环 .........................................................................................................61


源文件\第 1 章\进行计次循环.accdb

044 强制跳出循环 .........................................................................................................62


源文件\第 1 章\强制跳出循环.accdb

III
Access VBA 活用范例大辞典
目 录

◎错误处理及工程安全......................................... 64
045 使用 On Error GoTo 处理错误...............................................................................64
源文件\第 1 章\使用 On Error GoTo 处理错误.accdb

046 获取程序的具体错误信息(1)...........................................................................66
源文件\第 1 章\获取程序的具体错误信息(1).accdb

047 获取程序的具体错误信息(2)...........................................................................67
源文件\第 1 章\获取程序的具体错误信息(2).accdb

048 如何提示是否执行宏操作 .....................................................................................69

049 创建数字证书 .........................................................................................................70

050 为数据库应用数字证书 .........................................................................................71

051 保护 VBA 代码.......................................................................................................71

Chapter 02 控件和对象的使用技巧 ....................... 72


◎在窗体上操作控件........................................... 73
052 向窗体添加控件 .....................................................................................................73

053 第一次为控件添加代码 .........................................................................................73


源文件\第 2 章\第一次为控件添加代码.accdb

054 在代码中对窗体控件的引用 .................................................................................75


源文件\第 2 章\在代码中对窗体控件的引用.accdb

055 使用 ME 关键字快速引用当前窗体上的控件.....................................................76
源文件\第 2 章\使用 Me 快速引用当前窗体上的控件.accdb

056 快速获取表、查询、窗体或报表的名称列表.....................................................78
源文件\第 2 章\快速获取表、查询、窗体和报表的名称列表.accdb

057 设置控件的可见性 .................................................................................................80


源文件\第 2 章\设置控件的可见性.accdb

058 指定控件是否可以接受焦点 .................................................................................83


源文件\第 2 章\指定控件是否可以接受焦点.accdb

059 指定一个控件能否被编辑 .....................................................................................84


源文件\第 2 章\指定一个控件能否被编辑.accdb

IV
目 录
060 定位控件 .................................................................................................................86
源文件\第 2 章\定位控件.accdb

061 设置控件大小 .........................................................................................................87


源文件\第 2 章\设置控件大小.accdb

062 设置控件边框 .........................................................................................................91


源文件\第 2 章\设置控件边框.accdb

063 指定控件是否透明 .................................................................................................92


源文件\第 2 章\指定控件是否透明.accdb

064 设置控件中的字体的属性 .....................................................................................94


源文件\第 2 章\设置控件中的字体的属性.accdb

065 使标签具有闪烁效果 .............................................................................................95


源文件\第 2 章\使标签具有闪烁效果.accdb

066 获得焦点及失去焦点时字段变更颜色.................................................................97
源文件\第 2 章\获得焦点及失去焦点时字段变更颜色.accdb

◎获取控件的数据............................................. 99
067 获取文本框中的数据 .............................................................................................99
源文件\第 2 章\获取文本框中的数据.accdb

068 获取组合框中的数据 ...........................................................................................100


源文件\第 2 章\获取组合框中的数据.accdb

069 获取列表框中的数据 ...........................................................................................102


源文件\第 2 章\获取列表框中的数据.accdb

070 获取多列列表框某列中的数据(1).................................................................103
源文件\第 2 章\获取多列列表框某列中的数据(1).accdb

071 获取多列列表框某列中的数据(2).................................................................104
源文件\第 2 章\获取多列列表框中某列的数据(2).accdb

072 获取选项控件中的数据 .......................................................................................106


源文件\第 2 章\获取选项控件的数据.accdb

V
Access VBA 活用范例大辞典
目 录

◎数据库对象的引用.......................................... 108
073 引用当前数据库 ...................................................................................................108
源文件\第 2 章\引用当前数据库.accdb

074 引用指定路径的数据库 .......................................................................................110


源文件\第 2 章\引用指定路径的数据库\

075 引用数据库中的表 ...............................................................................................112


源文件\第 2 章\引用数据库中的指定表.accdb

076 通过编写 SQL 来引用指定记录集 .....................................................................113


源文件\第 2 章\通过编写 SQL 来引用指定记录集.accdb

077 引用窗体或报表中的记录集 ...............................................................................116


源文件\第 2 章\引用窗体或报表中的记录集.accdb

078 连接到当前数据库 ...............................................................................................118


源文件\第 2 章\连接到当前数据库.accdb

079 获取已连接数据库指定表的记录集...................................................................120
源文件\第 2 章\获取已连接数据库指定表的记录集.accdb

◎数据库对象的创建与编辑.................................... 122
080 创建数据库 ...........................................................................................................122
源文件\第 2 章\创建数据库\

081 创建数据表并新增字段 .......................................................................................124


源文件\第 2 章\创建数据表并新增字段.accdb

082 删除指定数据表 ...................................................................................................126


源文件\第 2 章\删除指定数据表.accdb

083 在数据表中删除指定字段 ...................................................................................128


源文件\第 2 章\在数据表中删除指定字段.accdb

084 创建自动编号字段 ...............................................................................................129


源文件\第 2 章\创建自动编号字段.accdb

085 创建与删除索引 ...................................................................................................131


源文件\第 2 章\创建与删除索引.accdb

VI
目 录
086 在数据表中设置主键 ...........................................................................................134
源文件\第 2 章\在数据表中设置主键.accdb

087 创建与删除关系 ...................................................................................................136


源文件\第 2 章\创建与删除关系.accdb

088 创建与删除查询 ...................................................................................................140


源文件\第 2 章\创建与删除关系.accdb

Chapter 03 掌握 Access 中的对象操作技巧 ............... 143

◎应用程序的操作技巧........................................ 144
089 启动与退出 Access ...............................................................................................144
源文件\第 3 章\启动与退出 Access.accdb

090 Access 界面操作 ...................................................................................................145


源文件\第 3 章\Access 界面操作.accdb

091 打开指定对象 .......................................................................................................147


源文件\第 3 章\打开指定对象.accdb

092 对象界面大小操作 ...............................................................................................149


源文件\第 3 章\对象界面大小调整.accdb

◎窗体的操作................................................ 150
093 判断窗体是否已加载 ...........................................................................................150
源文件\第 3 章\判断窗体是否已加载.accdb

094 设置窗体的标题 ...................................................................................................152


源文件\第 3 章\设置窗体的标题.accdb

095 设置窗体的高度和宽度 .......................................................................................153


源文件\第 3 章\快速调整窗体的大小尺寸.accdb

096 导航按钮的显示和隐藏 .......................................................................................155


源文件\第 3 章\导航按钮的显示和隐藏.accdb

097 记录选择器的显示和隐藏 ...................................................................................156


源文件\第 3 章\记录选择器的显示和隐藏.accdb

VII
Access VBA 活用范例大辞典
目 录

098 设置窗体的数据源 ...............................................................................................158


源文件\第 3 章\设置窗体的数据源.accdb

099 设置窗体中控件的数据源(1).........................................................................160
源文件\第 3 章\设置窗体中控件的数据源(1).accdb

100 设置窗体中控件的数据源(2).........................................................................161
源文件\第 3 章\设置窗体中控件的数据源(2).accdb

101 窗体记录的双击事件 ...........................................................................................164


源文件\第 3 章\窗体记录的双击事件.accdb

102 创建以及删除窗体 ...............................................................................................166


源文件\第 3 章\创建以及删除窗体.accdb

103 关闭所有打开的窗体 ...........................................................................................168


源文件\第 3 章\关闭所有打开的窗体.accdb

104 调整窗体的可编辑状态 .......................................................................................170


源文件\第 3 章\调整窗体的可编辑状态.accdb

105 引用窗体中的控件 ...............................................................................................172


源文件\第 3 章\引用窗体中的控件.accdb

Chapter 04 数据格式处理技巧 .......................... 174

◎文本的外观格式............................................ 175
106 设置对象文本的前景颜色 ...................................................................................175
源文件\第 4 章\设置对象文本的前景颜色.accdb

107 设置对象中文本的字号 .......................................................................................177


源文件\第 4 章\设置对象中文本的字号.accdb

108 将文本加粗显示 ...................................................................................................180


源文件\第 4 章\将文本加粗显示.accdb

109 将文本倾斜显示 ...................................................................................................181


源文件\第 4 章\将文本倾斜显示.accdb

110 为文本设置下画线 ...............................................................................................183


源文件\第 4 章\为文本设置下画线.accdb

VIII
目 录
111 更改文本的字体....................................................................................................184
源文件\第 4 章\更改文本的字体.accdb

112 设置文本的对齐方式 ...........................................................................................186


源文件\第 4 章\设置文本的对齐方式.accdb

113 设置文本的排列方式 ...........................................................................................187


源文件\第 4 章\设置文本的排列方式.accdb

114 控制文本框中的输入值 .......................................................................................189


源文件\第 4 章\控制文本框的输入值.accdb

◎字符串数据处理............................................ 191
115 英文字母的大小写转换 .......................................................................................191
源文件\第 4 章\英文字母的大小写转换.accdb

116 将字符串换行显示 ...............................................................................................193


源文件\第 4 章\将字符串换行显示.accdb

117 获取指定字符串的长度 .......................................................................................194


源文件\第 4 章\获取指定字符串的长度.accdb

118 从字符串的左侧截取字符 ...................................................................................196


源文件\第 4 章\从字符串的左侧截取字符.accdb

119 实现字符串的任意位置的字符截取 ...................................................................197


源文件\第 4 章\实现字符串的任意位置的字符截取.accdb

120 判断字符是否在另一个字符串中出现...............................................................199
源文件\第 4 章\判断字符是否在另一个字符串中出现.accdb

121 快速对某个数据进行替换 ...................................................................................201


源文件\第 4 章\快速对某个数据进行替换.accdb

◎数值数据处理.............................................. 202
122 将数值转化为货币型 ...........................................................................................202
源文件\第 4 章\数据处理.accdb

123 将数值四舍五入到整数 .......................................................................................204


源文件\第 4 章\数据处理.accdb

IX
Access VBA 活用范例大辞典
目 录

124 将数值四舍五入到指定位数 ...............................................................................205


源文件\第 4 章\数据处理.accdb

125 对数值进行取整 ...................................................................................................207


源文件\第 4 章\数据处理.accdb

126 将数值转换为百分数 ...........................................................................................208


源文件\第 4 章\数据处理.accdb

127 获取指定范围内的随机数 ...................................................................................210


源文件\第 4 章\数据处理.accdb

128 获取指定范围内的随机整数 ...............................................................................211


源文件\第 4 章\数据处理.accdb

◎日期数据处理.............................................. 212
129 获取系统当前的时间 ...........................................................................................212
源文件\第 4 章\获取系统当前的时间.accdb

130 获取系统当前的日期 ...........................................................................................214


源文件\第 4 章\获取系统当前的日期.accdb

131 获取系统当前的日期和时间 ...............................................................................215


源文件\第 4 章\获取系统当前的日期和时间.accdb、操作记录.txt

132 将字符串日期转换为标准格式的日期...............................................................217
源文件\第 4 章\将字符串日期转换为标准格式的日期.accdb

133 将日期格式化 .......................................................................................................218


源文件\第 4 章\将日期格式化.accdb

134 获取日期的年月日 ...............................................................................................220


源文件\第 4 章\获取日期的年月日.accdb

135 获取时间的时分秒 ...............................................................................................221


源文件\第 4 章\获取时间的时分秒.accdb

136 判断日期对应的星期 ...........................................................................................222


源文件\第 4 章\判断日期对应的星期.accdb

X
目 录
137 计算两个日期之间的时间间隔 ...........................................................................224
源文件\第 4 章\计算两个日期之间的时间间隔.accdb

138 计算经过 X 天数后的日期 ..................................................................................226


源文件\第 4 章\计算经过 X 天数后的日期.accdb

Chapter 05 数据排序技巧 .............................. 228

◎通过窗体或报表对记录排序.................................. 229
139 对当前窗体中的数据记录进行排序...................................................................229
源文件\第 5 章\对窗体中的数据记录进行排序.accdb

140 恢复窗体中的数据信息排序 ...............................................................................230


源文件\第 5 章\恢复窗体中的数据信息排序.accdb

141 在加载窗体时排序数据记录 ...............................................................................232


源文件\第 5 章\在加载窗体时排序数据记录.accdb

142 在当前窗体中对数据进行多条件排序...............................................................234
源文件\第 5 章\在当前窗体中对数据进行多条件排序.accdb

143 打开其他窗体并进行多条件排序.......................................................................235
源文件\第 5 章\打开其他窗体并进行多条件排序.accdb

144 加载报表时排序数据记录 ...................................................................................237


源文件\第 5 章\加载报表时排序数据记录.accdb

145 获取文本框中设置的字段灵活排序...................................................................239
源文件\第 5 章\获取文本框中设置的字段灵活排序.accdb

146 通过下拉列表选择排序条件排序.......................................................................241
源文件\第 5 章\通过下拉列表选择排序条件排序.accdb

147 自定义多条件来排序数据 ...................................................................................243


源文件\第 5 章\自定义多条件来排序数据.accdb

148 通过对话框设置排序关键字 ...............................................................................244


源文件\第 5 章\通过对话框设置排序关键字.accdb

149 在子窗体中排序数据 ...........................................................................................246


源文件\第 5 章\在子窗体中排序数据.accdb

XI
Access VBA 活用范例大辞典
目 录

150 通过选项按钮指定排序依据 ...............................................................................248


源文件\第 5 章\通过选项按钮指定排序依据.accdb

◎通过查询排序数据.......................................... 250
151 将查询中的字段设置为排序依据(1).............................................................250
源文件\第 5 章\将查询中的字段设置为排序依据(1).accdb

152 将查询中的字段设置为排序依据(2).............................................................252
源文件\第 5 章\将查询中的字段设置为排序依据(2).accdb

153 恢复根据查询字段排序的顺序(1).................................................................254
源文件\第 5 章\恢复根据查询字段排序的顺序(1).accdb

154 恢复根据查询字段排序的顺序(2).................................................................257
源文件\第 5 章\将查询中的字段设置为排序依据(2).accdb

155 在加载窗体时指定查询字段排序数据(1).....................................................258
源文件\第 5 章\在加载窗体时指定查询字段排序数据(1).accdb

156 在加载窗体时指定查询字段排序数据(2).....................................................261
源文件\第 5 章\在加载窗体时指定查询字段排序数据(2).accdb

157 通过下拉列表选择查询字段作为排序依据(1).............................................263
源文件\第 5 章\通过下拉列表选择查询字段作为排序依据(1).accdb

158 通过下拉列表选择查询字段作为排序依据(2).............................................265
源文件\第 5 章\通过下拉列表选择查询字段作为排序依据(2).accdb

159 指定多个查询字段对数据进行排序(1).........................................................267
源文件\第 5 章\指定多个查询字段对数据进行排序(1).accdb

160 指定多个查询字段对数据进行排序(2).........................................................269
源文件\第 5 章\指定多个查询字段对数据进行排序(2).accdb

161 通过下拉列表灵活指定多个查询字段排序数据(1) ....................................272


源文件\第 5 章\通过下拉列表灵活指定多个查询字段排序数据(1).accdb

162 通过下拉列表灵活指定多个查询字段排序数据(2) ....................................274


源文件\第 5 章\通过下拉列表灵活指定多个查询字段排序数据(2).accdb

XII
目 录
◎通过编写 SQL 语句排序数据................................. 276
163 在打开的窗体中显示排序结果 ...........................................................................276
源文件\第 5 章\在打开的窗体中显示排序结果.accdb

164 在打开的报表中显示排序结果 ...........................................................................277


源文件\第 5 章\在打开的报表中显示排序结果.accdb

165 在窗体中手动指定排序依据 ...............................................................................279


源文件\第 5 章\在窗体中手动指定排序依据.accdb

166 使用多个关键字排序 ...........................................................................................281


源文件\第 5 章\使用多个关键字排序.accdb

167 通过下拉列表指定多个关键字排序...................................................................283
源文件\第 5 章\通过下拉列表指定多个关键字排序.accdb

168 自定义序列排序数据 ...........................................................................................284


源文件\第 5 章\自定义序列排序数据.accdb

Chapter 06 数据查询技巧 .............................. 287

◎逐条查询技巧.............................................. 288
169 跳转到下一条记录 ...............................................................................................288
源文件\第 6 章\跳转到下一条记录.accdb

170 跳转到第一条记录 ...............................................................................................289


源文件\第 6 章\跳转到第一条记录.accdb

171 跳转到最后一条记录 ...........................................................................................290


源文件\第 6 章\跳转到最后一条记录.accdb

172 跳转到上一条记录 ...............................................................................................292


源文件\第 6 章\跳转到上一条记录.accdb

173 定位到指定记录 ...................................................................................................293


源文件\第 6 章\定位到指定记录.accdb

174 查询指定数据的记录 ...........................................................................................295


源文件\第 6 章\查询指定数据的记录.accdb

XIII
Access VBA 活用范例大辞典
目 录

175 通过在文本框中输入数据来查询.......................................................................296
源文件\第 6 章\通过在文本框中输入数据来查询.accdb

176 继续搜寻满足条件的记录 ...................................................................................298


源文件\第 6 章\继续搜寻满足条件的记录.accdb

177 通过在下拉列表框中选择选项来查询...............................................................299
源文件\第 6 章\通过在下拉列表框中选择选项来查询.accdb

178 查询以指定数据打头的记录 ...............................................................................301


源文件\第 6 章\查询以指定数据打头的记录.accdb

179 查询以指定数据结尾的记录 ...............................................................................302


源文件\第 6 章\查询以指定数据结尾的记录.accdb

180 查询包含某个数据的记录 ...................................................................................304


源文件\第 6 章\查询包含某个数据的记录.accdb

181 在子窗体中查询记录 ...........................................................................................305


源文件\第 6 章\在子窗体中查询记录.accdb

182 实现继续查询操作 ...............................................................................................307


源文件\第 6 章\实现继续查询操作.accdb

183 不使用通配符查询包含某个数据的记录...........................................................308
源文件\第 6 章\不使用通配符查询包含某个数据的记录.accdb

184 灵活设置查询字段查询记录 ...............................................................................310


源文件\第 6 章\灵活设置查询字段查询数据.accdb

185 使用 Like 进行模糊查询......................................................................................312


源文件\第 6 章\使用 Like 进行模糊查询.accdb

186 在立即窗口中显示查询结果(1).....................................................................314
源文件\第 6 章\在立即窗口中显示查询结果(1).accdb

187 在立即窗口中显示查询结果(2).....................................................................316
源文件\第 6 章\在立即窗口中显示查询结果(2).accdb

188 查询指定日期的数据记录(1).........................................................................317
源文件\第 6 章\查询指定日期的数据记录(1).accdb

XIV
目 录
189 查询指定日期的数据记录(2).........................................................................319
源文件\第 6 章\查询指定日期的数据记录(2).accdb

190 使用比较运算符来查询数据记录.......................................................................321
源文件\第 6 章\使用比较运算符来查询数据记录.accdb

191 查询指定日期范围内的数据记录.......................................................................323
源文件\第 6 章\查询指定日期范围内的数据记录.accdb

192 在指定的数值范围内查询数据 ...........................................................................325


源文件\第 6 章\在指定的数值范围内查询数据.accdb

193 使用 AND 关键字如何查询数据 ........................................................................327


源文件\第 6 章\使用 AND 关键字如何查询数据.accdb

194 使用 OR 关键字如何查询数据 ...........................................................................329


源文件\第 6 章\使用 OR 关键字如何查询数据.accdb

195 使用 AND 关键字和 OR 关键字如何实现多条件查询 ....................................331


源文件\第 6 章\使用 AND 关键字和 OR 关键字如何实现多条件查询.accdb

196 处理多条件查询中没有指定条件的情况...........................................................333
源文件\第 6 章\处理多条件查询中没有指定条件的情况.accdb

◎同时显示所有查询记录技巧.................................. 335
197 快速筛选指定条件的所有数据记录...................................................................335
源文件\第 6 章\快速筛选指定条件的所有数据记录.accdb

198 恢复筛选之前的效果 ...........................................................................................336


源文件\第 6 章\恢复筛选之前的效果.accdb

199 在加载窗体时筛选指定条件的所有记录...........................................................338
源文件\第 6 章\在加载窗体时筛选指定条件的所有记录.accdb

200 在文本框中自定义筛选条件筛选数据...............................................................339
源文件\第 6 章\在文本框中自定义筛选条件筛选数据.accdb

201 模糊筛选包含指定字符的所有数据记录(1).................................................340
源文件\第 6 章\模糊筛选包含指定字符的所有数据记录(1).accdb

XV
Access VBA 活用范例大辞典
目 录

202 模糊筛选包含指定字符的所有数据记录(2).................................................342
源文件\第 6 章\模糊筛选包含指定字符的所有数据记录(2).accdb

203 打开报表时显示所有的筛选记录.......................................................................344
源文件\第 6 章\打开报表时显示所有的筛选记录.accdb

204 打开报表时指定查询条件筛选符合的所有数据记录.......................................345
源文件\第 6 章\打开报表时指定查询条件筛选符合的所有数据记录.accdb

205 在子窗体中筛选指定数据范围内的所有数据记录...........................................347
源文件\第 6 章\在子窗体中筛选指定数据范围内的所有数据记录.accdb

206 将窗体中筛选的所有数据记录显示在报表中...................................................348
源文件\第 6 章\将窗体中筛选的所有数据记录显示在报表中.accdb

207 查询指定截止日期之间数据记录(1).............................................................350
源文件\第 6 章\查询指定截止日期之前数据记录(1).accdb

208 查询指定截止日期之间数据记录(2).............................................................352
源文件\第 6 章\查询指定截止日期之前数据记录(2).accdb

209 查询指定日期范围内的所有数据记录(1).....................................................354
源文件\第 6 章\查询指定日期范围内的所有数据记录(1).accdb

210 查询指定日期范围内的所有数据记录(2).....................................................356
源文件\第 6 章\查询指定日期范围内的所有数据记录(2).accdb

211 显示指定的数值范围内的所有数据记录(1).................................................358
源文件\第 6 章\显示指定的数值范围内的所有数据记录(1).accdb

212 显示指定的数值范围内的所有数据记录(2).................................................360
源文件\第 6 章\显示指定的数值范围内的所有数据记录(2).accdb

213 使用 AND 关键字查询符合条件的所有记录 ....................................................362


源文件\第 6 章\使用 AND 关键字查询符合条件的所有记录.accdb

214 使用 OR 关键字查询符合条件的所有记录 .......................................................364


源文件\第 6 章\使用 OR 关键字查询符合条件的所有记录.accdb

215 使用 AND 关键字和 OR 关键字查询符合条件的所有记录 ............................367


源文件\第 6 章\使用 AND 关键字和 OR 关键字查询符合条件的所有记录.accdb

XVI
目 录
216 将筛选的所有数据按照指定顺序排序...............................................................369
源文件\第 6 章\将筛选的所有数据按照指定顺序排序.accdb

◎通过编写 SQL 语句查询数据................................. 371


217 在打开的窗体中显示所有查询记录...................................................................371
源文件\第 6 章\在打开的窗体中显示所有查询记录.accdb

218 在下拉列表中设置筛选条件查询所有记录.......................................................373
源文件\第 6 章\在下拉列表中设置筛选条件查询所有记录.accdb

219 在文本框中设置筛选条件查询所有记录...........................................................374
源文件\第 6 章\在文本框中设置筛选条件查询所有记录.accdb

220 快速恢复筛选结果 ...............................................................................................376


源文件\第 6 章\快速恢复筛选结果.accdb

221 使用 Where 语句实现多条件筛选 ......................................................................378


源文件\第 6 章\使用 Where 语句实现多条件筛选.accdb

222 使用 Where 语句在打开的窗体显示查询结果 ..................................................381


源文件\第 6 章\使用 Where 语句在打开的窗体显示查询结果.accdb

Chapter 07 数据记录的追加、删除和更新技巧 ............ 385

◎追加数据技巧.............................................. 386
223 在数据表追加记录 ...............................................................................................386
源文件\第 7 章\在数据表追加记录.accdb

224 判断新增记录是否已经成功 ...............................................................................388


源文件\第 7 章\判断新增记录是否已经成功.accdb

225 在追加记录时自动添加主键 ...............................................................................390


源文件\第 7 章\在追加记录时自动添加主键.accdb

226 确认是否需要追加记录 .......................................................................................391


源文件\第 7 章\确认是否需要追加记录.accdb

227 在非绑定窗体追加记录(1) .............................................................................394


源文件\第 7 章\在非绑定窗体追加记录(1).accdb

XVII
Access VBA 活用范例大辞典
目 录

228 在非绑定窗体追加记录(2) .............................................................................396


源文件\第 7 章\在非绑定窗体追加记录(2).accdb

◎删改数据技巧.............................................. 398
229 删除第一条数据记录 ...........................................................................................398
源文件\第 7 章\删除第一条数据记录.accdb

230 删除最后一条数据记录 .......................................................................................400


源文件\第 7 章\删除最后一条数据记录.accdb

231 删除指定位置的数据记录 ...................................................................................402


源文件\第 7 章\删除指定位置的数据记录.accdb

232 逐条删除符合条件的记录 ...................................................................................404


源文件\第 7 章\逐条删除符合条件的记录.accdb

233 删除所有符合指定条件的记录 ...........................................................................406


源文件\第 7 章\删除所有符合指定条件的记录.accdb

234 删除指定数值范围内的所有数据记录...............................................................409
源文件\第 7 章\删除指定数值范围内的所有数据记录.accdb

235 删除指定日期范围内的所有数据记录...............................................................412
源文件\第 7 章\删除指定日期范围内的所有数据记录.accdb

236 修改指定位置的数据 ...........................................................................................415


源文件\第 7 章\修改指定位置的数据.accdb

◎通过编写 SQL 语句编辑记录................................. 417


237 使用 SQL 语句取得新增主键新增记录 .............................................................417
源文件\第 7 章\使用 SQL 语句取得新增主键新增记录.accdb

238 使用 Update 语句更新数据(1) .......................................................................420


源文件\第 7 章\使用 Update 语句更新数据(1).accdb

239 使用 Update 语句更新数据(2) .......................................................................422


源文件\第 7 章\使用 Update 语句更新数据(2).accdb

240 在数据表中追加查询记录 ...................................................................................424


源文件\第 7 章\在数据表中追加查询记录.accdb

XVIII
目 录
241 在数据表中删除记录 ...........................................................................................425
源文件\第 7 章\在数据表中删除记录.accdb

242 在数据表中新增字段 ...........................................................................................427


源文件\第 7 章\在数据表中新增字段.accdb

243 在数据表中删除字段 ...........................................................................................428


源文件\第 7 章\在数据表中删除字段.accdb

244 在数据表中修改字段类型 ...................................................................................430


源文件\第 7 章\在数据表中修改字段类型.accdb

Chapter 08 数据记录的统计和打印技巧 .................. 432

◎统计数据记录技巧.......................................... 433
245 统计数据表中有多少条数据记录.......................................................................433
源文件\第 8 章\统计数据表中有多少条数据记录.accdb

246 统计符合指定条件的数据记录 ...........................................................................434


源文件\第 8 章\统计符合指定条件的数据记录.accdb

247 统计符合多条件的数据记录 ...............................................................................436


源文件\第 8 章\统计符合多条件的数据记录.accdb

248 通过下拉列表设置统计条件 ...............................................................................438


源文件\第 8 章\通过下拉列表设置统计条件.accdb

249 通过文本框设置统计条件 ...................................................................................439


源文件\第 8 章\通过文本框设置统计条件.accdb

◎打印数据记录技巧.......................................... 441
250 打开“打印”对话框 ...........................................................................................441
源文件\第 8 章\打开“打印”对话框.accdb

251 打印窗体当前的显示页 .......................................................................................443


源文件\第 8 章\打印窗体当前的显示页.accdb

252 打印数据表中的数据 ...........................................................................................444


源文件\第 8 章\打印数据表中的数据.accdb

XIX
Access VBA 活用范例大辞典
目 录

253 将报表内容打印成彩色 .......................................................................................446


源文件\第 8 章\将报表内容打印成彩色.accdb

254 设置打印页面的大小 ...........................................................................................447


源文件\第 8 章\设置打印页面的大小.accdb

255 设置报表打印的页边距 .......................................................................................449


源文件\第 8 章\设置报表打印的页边距.accdb

256 在报表页脚设置打印页码 ...................................................................................451


源文件\第 8 章\在报表页脚设置打印页码.accdb

257 在报表页面打印水印效果 ...................................................................................453


源文件\第 8 章\在报表页面打印水印效果.accdb

258 将指定数据圈释出来打印 ...................................................................................455


源文件\第 8 章\将指定数据圈释出来打印.accdb

Chapter 09 Access 与其他 Office 组件之间的数据交换技巧 .. 458

◎Access 与 Word 之间的数据读写 ............................. 459


259 通过 Access 创建空白 Word 文档(1).............................................................459
源文件\第 9 章\通过 Access 创建空白 Word 文档(1).accdb

260 通过 Access 创建空白 Word 文档(2).............................................................461


源文件\第 9 章\通过 Access 创建空白 Word 文档(2).accdb

261 通过 Access 创建空白 Word 文档(3).............................................................462


源文件\第 9 章\通过 Access 创建空白 Word 文档(3).accdb

262 创建基于模板的 Word 文档 ................................................................................464


源文件\第 9 章\创建基于模板的 Word 文档\

263 打开指定的 Word 文档 ........................................................................................466


源文件\第 9 章\打开指定的 Word 文档\

264 通过 TypeText 方法向 Word 写入数据 ...............................................................468


源文件\第 9 章\通过 TypeText 方法向 Word 写入数据\

265 在 Word 中插入表格 ............................................................................................471


源文件\第 9 章\在 Word 中插入表格\

XX
目 录
266 将 Access 的数据导入 Word 文档.......................................................................473
源文件\第 9 章\将 Access 的数据导入 Word 文档\

267 通过文档属性将 Access 数据合并到 Word........................................................476


源文件\第 9 章\通过文档属性将 Access 数据合并到 Word\

268 通过 Word 书签将 Access 数据合并到 Word.....................................................479


源文件\第 9 章\通过 Word 书签将 Access 数据合并到 Word\

◎Access 与 Excel 之间的数据读写 ............................. 482


269 使用通用方法启动 Exce1 应用程序...................................................................482
源文件\第 9 章\使用通用方法 Exce1 应用程序.accdb

270 启动 Excel 应用程序并新建工作簿....................................................................484


源文件\第 9 章\启动 Excel 应用程序.accdb

271 打开已经存在的工作簿 .......................................................................................485


源文件\第 9 章\打开已经存在的工作簿\

272 激活指定工作表 ...................................................................................................487


源文件\第 9 章\激活指定工作表\

273 向单元格输入数据 ...............................................................................................489


源文件\第 9 章\向单元格输入数据\

274 将 Access 的数据导入 Excel 表格.......................................................................491


源文件\第 9 章\将 Access 的数据导入 Excel 表格\

275 将窗体中的数据写入工作表编辑区...................................................................493
源文件\第 9 章\将窗体中的数据写入工作表编辑区\

276 在工作表顶部插入空行 .......................................................................................497


源文件\第 9 章\在工作表顶部插入空行\

277 为数据表添加边框效果 .......................................................................................498


源文件\第 9 章\为数据表添加边框效果\

278 对表格数据设置字体格式 ...................................................................................501


源文件\第 9 章\对表格数据设置字体格式\

XXI
Access VBA 活用范例大辞典
目 录

279 设置工作表的列宽 ...............................................................................................503


源文件\第 9 章\设置工作表的列宽\

280 获取单元格中的数据 ...........................................................................................505


源文件\第 9 章\获取单元格中的数据\

Chapter 10 其他的操作技巧 ............................ 507

◎文件的操作................................................ 508
281 从文本文件读取数据 ...........................................................................................508
源文件\第 10 章\从文本文件读取数据.accdb、选项文本.txt

282 将文本文件中的数据导入数据表中...................................................................509
源文件\第 10 章\将文本文件中的数据导入数据表中.accdb、学生信息.txt

283 将窗体中的数据保存至文本文档中...................................................................511
源文件\第 10 章\将窗体中的数据保存至文本文档中.accdb、窗体数据.txt

284 使用对话框选择文件 ...........................................................................................513


源文件\第 10 章\使用对话框选择文件.accdb

285 通过对话框打开文件 ...........................................................................................515


源文件\第 10 章\通过对话框打开文件.accdb

286 修改指定位置的文件的名称 ...............................................................................517


源文件\第 10 章\修改指定位置的文件的名称.accdb

287 复制指定位置的文件 ...........................................................................................520


源文件\第 10 章\复制指定位置的文件.accdb

288 删除指定位置的文件 ...........................................................................................522


源文件\第 10 章\删除指定位置的文件.accdb

289 新建文件夹 ...........................................................................................................524


源文件\第 10 章\新建文件夹.accdb

◎Web 与 XML 的应用 ........................................ 526


290 启动邮件管理软件 ...............................................................................................526
源文件\第 10 章\启动邮件管理软件.accdb

XXII
目 录
291 通过邮件将数据库对象寄出去 ...........................................................................527
源文件\第 10 章\通过邮件将数据库对象寄出去.accdb

292 将表或者查询导出为 HTML...............................................................................529


源文件\第 10 章\将表或者查询导出为 HTML.accdb、Q_员工工资.html

293 将 HTML 文件导入到 Access 数据库 ................................................................531


源文件\第 10 章\将 HTML 文件导入.accdb、员工工资.html

294 将数据库中的对象导出为 XML .........................................................................533


源文件\第 10 章\将数据库中的对象导出为 XML.accdb、员工资料.xml

295 将 XML 文件导入到 Access 数据库...................................................................535


源文件\第 10 章\将 XML 文件导入.accdb

◎超链接的应用.............................................. 536
296 通过超链接打开指定的网页 ...............................................................................536
源文件\第 10 章\通过超链接打开指定的网页.accdb

297 显示超链接连接的位置 .......................................................................................538


源文件\第 10 章\显示超链接连接的位置.accdb

298 通过超链接打开本地文件 ...................................................................................540


源文件\第 10 章\通过超链接打开本地文件.accdb

◎其他常用技巧.............................................. 542
299 强制展开下拉列表 ...............................................................................................542
源文件\第 10 章\强制展开下拉列表.accdb

300 拖过代码创建新的窗体 .......................................................................................543


源文件\第 10 章\通过代码创建新的窗体.accdb

301 组合框的联动 .......................................................................................................545


源文件\第 10 章\组合框的联动.accdb

302 组合框的多级联动 ...............................................................................................547


源文件\第 10 章\组合框的多级联动.accdb

303 获取外部数据表数据 ...........................................................................................553


源文件\第 10 章\获取外部数据表数据.accdb

XXIII
Access VBA 活用范例大辞典
目 录

Chapter 11 Access VBA 办公实战综合案例 ............... 559

综合案例 1 出入库管理系统 ......................................................................................560


源文件\第 11 章\出入库管理系统.accdb

综合案例 2 考勤管理系统 ..........................................................................................575


源文件\第 11 章\考勤管理系统.accdb

综合案例 3 通讯录管理系统 ......................................................................................588


源文件\第 11 章\通讯录管理系统.accdb

XXIV
Chapter 01
Access 基础操作技巧

在使用 Access VBA 解决实际问题之前,需要了解一些它的


基础操作及技巧,比如 VBA 编辑器的使用、过程、函数和变量
等一些在 VBA 编程中经常使用到的工具和概念。
只有了解了这些基本的知识和操作技巧后,才能够更好地学
习和使用 Access。

▼主要内容
◎过程、模块与语句
“添加过程”对话框、Function 关键字、Sub 关键字、Call 关键字……
◎内置函数
MsgBox()函数、InputBox()函数、IsNull()函数、Iif()函数、RGB()函数……
◎流程语句
If…Then…Else 语句、Do Until…Loop 语句、While…Wend 语句……

▼涉及案例
◎设置强制性声明变量
◎创建 Sub 过程
◎创建 Function 程序
◎使用 RGB()函数设置颜色
◎定义静态变量
◎使用内置常量
◎使用 On Error GoTo 处理错误
◎保护 VBA 代码
……
Access VBA 活用范例大辞典
初 中 高
001
001显示 VBA 编辑器 2003 / 2007 / 2010
基础操作技巧

显示 VBA 编辑器
◎VBA 编辑器:【Alt+F11】组合键、事件生成器、“数据库工具”选项

显示 VBA 编辑器的常用方法有 3 种,分别为单击“数据库工具”选项


控件和对象

卡中的“Vasual Basic”按钮,使用【Alt+F11】组合键,使用“事件生成器”

其中,使用“事件生成器”的具体方式有两种,一种是在设计模式中任
意对象上右击,在弹出的快捷菜单中选择“事件生成器”命令;另一种是在
设计模式的“属性表”窗体中的“事件”选项卡中单击任意的事件。
对象操作技巧

◎应用实例
素材\第 1 章\显示 VBA 编辑器.accdb

本例需要通过 4 种不同的方式显示 VBA 编辑器,以查看当前数据库中


使用的 VBA 代码。
处理数据格式

◎案例操作
源文件\第 1 章\显示 VBA 编辑器.accdb

01 单击“数据库工具”选项卡 02 关闭 VBA 编辑器,然后按


数据排序技巧

中的“Vasual Basic”按钮。 【Alt+F11】组合键。

03 关闭 VBA 编辑器,打开“自 04 切换至设计视图,在按钮上


定义排序”窗体。 右击,弹出快捷菜单,选择“事
数据查询技巧

件生成器”命令。

05 关闭 VBA 编辑器,打开属性 06 单击“单击”事件右侧的 按


表,切换至“事件”选项卡。 钮,打开 VBA 编辑器。
数据编辑技巧

2
Chapter 01 Access 基础操作技巧

◎执行过程

基础操作技巧
打开“显示 VBA 编辑器.accdb”源文件,根据案例中的步骤进行操作,
可以得到如图 1-1 至图 1-4 所示的效果。

控件和对象
图 1-1 通过“数据库工具”选项卡打开 VBA 编辑器

对象操作技巧
处理数据格式

图 1-2 通过【Alt+F11】组合键打开 VBA 编辑器


数据排序技巧

图 1-3 通过快捷菜单打开 VBA 编辑器


数据查询技巧
数据编辑技巧

图 1-4 通过属性表打开 VBA 编辑器

3
Access VBA 活用范例大辞典

002 调用编辑工具栏 初 中 高
002
基础操作技巧

2003 / 2007 / 2010

调用编辑工具栏
◎VB 编辑器:视图菜单

在编辑 VBA 代码时,使用编辑工具栏可以有效地提高 VBA 代码的编辑


控件和对象

速度。可以通过 VBA 编辑器中的“视图/工具栏/编辑”命令调用编辑工具栏。

◎应用实例
素材\第 1 章\调用编辑工具栏.accdb
对象操作技巧

本例需要在 VBA 编辑器中调用编辑工具栏。

◎案例操作
源文件\第 1 章\调用编辑工具栏.accdb
处理数据格式

01 单击 VBA 编辑器菜单栏中 02 在弹出的菜单中选择“工具


的“视图”按钮。 栏/编辑”命令。

◎执行过程
打开 VBA 编辑器,调用编辑工具栏,如图 1-5 所示。
数据排序技巧
数据查询技巧

编辑工具栏
数据编辑技巧

图 1-5 调用编辑工具栏

4
Chapter 01 Access 基础操作技巧

003 设置代码的显示效果 初 中 高
003 2003 / 2007 / 2010

基础操作技巧
设置代码的显示效果
◎VB 编辑器:【Tab】键、【Tab+Shift】组合键、Rem 关键字

设置代码的显示效果,主要包括代码的缩进、突出,代码的注释、解除

控件和对象
注释,将一行长代码设置在多行显示和将多行代码设置在一行显示等。

代码的缩进、注释,都可以通过编辑工具栏进行设置,本例中主要讲解
如何在不使用组合键的情况下实现代码的缩进和注释等内容。

代码的缩进,可以在编辑代码时使用【Tab】键进行设置;代码的突出可

对象操作技巧
以使用【Tab+Shift】组合键进行设置。

VBA 编辑器默认按键一次缩进或突出 4 个字符,如果需要更改默认的缩


进或突出字符数,可以通过“工具/选项”命令打开“选项”对话框,在其中
进行设置,如图 1-6 所示。
处理数据格式

设置缩进或突出值
数据排序技巧

图 1-6 设置缩进或突出值
数据查询技巧

代码的注释,可以通过在需要注释的代码前面添加“'”或者“Rem”关
键字来实现。解除注释只需要删除代码前的“'”或者“Rem”关键字即可。
注释后的代码在代码运行时不会执行,所以常用来对代码进行说明。

一行长代码设置在多行显示,需要在分断处使用半角状态下的空格“ ”
数据编辑技巧

和“_”来实现,如 1-7 左图所示。

多行代码设置在一行显示,可以使用冒号“:
”来实现,如 1-7 右图所示。

5
Access VBA 活用范例大辞典
基础操作技巧

将短代码设置在一行显示

将长代码设置在多行显示

图 1-7 长代码和短代码的显示设置
控件和对象

004 通过视图菜单打开窗口 初 中 高
004 2003 / 2007 / 2010

通过视图菜单打开窗口
对象操作技巧

◎VB 编辑器:视图菜单

在 VBA 编辑器中,有一些功能各不相同的窗口,比如最为常用的“代
码”窗口。其他常用的窗口还有“对象窗口”
、“立即窗口”
、“本地窗口”和
“属性窗口”等。
处理数据格式

如果需要打开某个没有打开的窗口,可以通过 VBA 编辑器中的视图菜


单来实现。

◎应用实例
素材\第 1 章\通过视图菜单打开窗口.accdb
数据排序技巧

本例需要在 VBA 编辑器中打开“属性”窗口。

◎案例操作
源文件\第 1 章\通过视图菜单打开窗口.accdb
数据查询技巧

01 单击 VBA 编辑器菜单栏中 02 在打开的菜单中选择“属性


的“视图”按钮。 窗口”命令。
数据编辑技巧

◎执行过程
打开 VBA 编辑器,打开属性窗口,如图 1-8 所示。

6
Chapter 01 Access 基础操作技巧

基础操作技巧
属性窗口

控件和对象
图 1-8 通过“视图”菜单打开“属性”窗口

对象操作技巧
005 设置强制性声明变量 初 中 高
005 2003 / 2007 / 2010

设置强制性声明变量
◎VB 编辑器:Option Explicit 语句、“选项”对话框 处理数据格式

如果需要代码中的所有变量都必须进行显式定义才能够使用,可以强制
性声明变量。

设置强制性声明变量的方法有两种,一种是在代码声明段使用“Option
Explicit”语句,如 1-9 左图所示;另一种是通过“工具/选项”命令打开“选
项”对话框,在“编辑器”选项卡中选中“要求声明变量”复选框,如 1-9
数据排序技巧

右图所示。
数据查询技巧

选中复选框
数据编辑技巧

图 1-9 强制性声明变量的两种方法

7
Access VBA 活用范例大辞典

◎应用实例
基础操作技巧

素材\第 1 章\设置强制性声明变量.accdb

本例需要设置强制性声明变量,并演示使用没有声明的变量的效果。

◎案例操作
控件和对象

01 在代码窗口通用声明段设置 02 在程序代码中使用没有定义
强制性声明变量代码。 的代码。

03 在对象窗口中单击按钮,运
对象操作技巧

行程序查看程序运行效果。

◎过程源代码
源文件\第 1 章\设置强制性声明变量.accdb
处理数据格式

在事件过程中编写 VBA 代码,设置强制性声明变量,使用未定义变量,


其具体的 VBA 代码如下。
Private Sub cmd_排序_Click()
'定义变量
Dim db As DAO.Database
数据排序技巧

Dim rs As Recordset
Dim stsql As String
'使用未声明变量
s=1

数据查询技巧

End Sub

◎执行过程
切换至对象窗口,然后单击按钮运行代码,结果如图 1-10 所示。
数据编辑技巧

图 1-10 强制性声明变量后使用未定义变量编译错误
8
Chapter 01 Access 基础操作技巧

006 创建 Sub 过程 初 中 高
006

基础操作技巧
2003 / 2007 / 2010

创建 Sub 过程
◎过程、模块与语句:“添加过程”对话框、Sub 关键字

Sub 过程可以执行处理过程,但是不会返回值。根据程序是否与特定对

控件和对象
象的事件关联,可以分为标准程序和事件程序两类,本例仅讲解如何创建标
准的 Sub 过程。

创建标准的 Sub 过程,有两种方法可供选择,一种是在 VBA 编辑器代


码窗口打开的情况下,使用“插入/过程”命令打开“添加过程”对话框,选

对象操作技巧
中“子程序”单选按钮,设置名称即可创建 Sub 过程,如图 1-11 所示。

处理数据格式

Sub 过程

图 1-11 通过“添加过程”对话框创建 Sub 过程


数据排序技巧

另一种方法是直接在 VBA 编辑器代码窗口中输入“Sub 过程名”来创


建 Sub 过程。

◎应用实例
数据查询技巧

素材\第 1 章\创建 Sub 过程.accdb

本例通过上述的第二种方法创建一个 Sub 过程,该过程通过两个输入对


话框得到两个加数,并使用消息对话框返回这两个数的和。

◎案例操作
数据编辑技巧

01 在代码窗口创建 Sub 过程, 02 按【F5】键运行 Sub 过程,


并输入求和代码。 查看代码运行效果。

9
Access VBA 活用范例大辞典

◎过程源代码
基础操作技巧

源文件\第 1 章\创建 Sub 过程.accdb

创建 Sub 过程,编写 VBA 代码,通过输入对话框获取加数,使用消息


对话框返回求和结果,其具体的 VBA 代码如下。
'创建 Sub 过程,计算两数和
控件和对象

Sub 加()
'定义变量
Dim m As Integer
Dim n As Integer
Dim Sum2 As Integer
对象操作技巧

'获取两个加数
m = InputBox("第一个加数")
n = InputBox("第二个加数")
'求两个加数之和
Sum2 = m + n
'使用对话框输出结果
处理数据格式

MsgBox m & "+" & n & "=" & Sum2


End Sub

◎执行过程
按【F5】键,运行“加”过程,结果如图 1-12 所示。
数据排序技巧
数据查询技巧

图 1-12 创建 Sub 过程计算两数之和

007 创建 Function 程序 初 中 高
007 2003 / 2007 / 2010

创建 Function 程序
数据编辑技巧

◎过程、模块与语句:“添加过程”对话框、Function 关键字

Function 程序又称为函数,需要返回计算的结果。制作出 Function 程序

10
Chapter 01 Access 基础操作技巧

之后,可以在 Access 的查询或者窗体中使用该程序,将其当做自定义函数

基础操作技巧
使用。

与 Sub 过程相比,Function 程序过程中必须含有“程序名=返回值”这样


的代码。

创建 Function 程序,也有两种方法可供选择,一种是在 VBA 编辑器代


码窗口打开的情况下,使用“插入/过程”命令打开“添加过程”对话框,选

控件和对象
中“函数”单选按钮,设置名称即可创建 Function 程序,如图 1-13 所示。

对象操作技巧
Function 程序
处理数据格式

图 1-13 通过“添加过程”对话框创建 Function 程序

另一种方法是直接在 VBA 编辑器代码窗口中输入“Function 程序名”来


创建 Function 程序。
数据排序技巧

◎应用实例
素材\第 1 章\创建 Function 过程.accdb

本例通过上述的第二种方法创建一个 Function 程序“求积”


,该程序可
以返回两个参数的积。然后创建一个 Sub 过程,在该过程中调用“求积”程
数据查询技巧

序,并使用信息框输出求积的结果。

◎案例操作

01 在代码窗口创建 Function 程 02 在代码窗口中创建 Sub 过程


序“求积”
。 “调用求积”。
数据编辑技巧

11
Access VBA 活用范例大辞典

03 按【F5】键运行“调用求积”
基础操作技巧

过程,查看代码运行效果。

◎过程源代码
源文件\第 1 章\创建 Function 过程.accdb
控件和对象

创建 Function 程序,编写 VBA 代码,在 Sub 程序中调用 Functon 程序,


其具体的 VBA 代码如下。
'创建一个求两数之积的函数
Function 求积(m As Double, n As Double)
对象操作技巧

求积 = m * n
End Function

'创建一个 sub 过程,在该过程中调用“求积”程序


Sub 调用求积()
处理数据格式

Dim x As Double
Dim y As Double
'获取两个因数
x = InputBox("第一个因数")
y = InputBox("第二个因数")
'调用“求积”程序计算两个因数的积
数据排序技巧

MsgBox x & "×" & y & "=" & 求积(x, y)


End Sub

◎执行过程
按【F5】键运行“调用求积”过程,结果如图 1-14 所示。
数据查询技巧
数据编辑技巧

图 1-14 调用 Function 程序求积

12
Chapter 01 Access 基础操作技巧

008 定义有作用域的过程 初 中 高
008

基础操作技巧
2003 / 2007 / 2010

定义有作用域的过程
◎过程、模块与语句:Public 关键字、Private 关键字

在 VBA 程序代码中,可以通过特定的关键字定义过程的作用域。

控件和对象
如果希望过程在所有的模块中均能够使用,可以在过程的最前面添加
Public 关键字,如 1-15 左图所示。如果希望过程只在当前的模块中使用,可
以在过程的最前面添加 Private 关键字,如 1-15 右图所示。

对象操作技巧
图 1-15 通过关键字定义过程的作用域
处理数据格式

Public 关键字和 Private 关键字还可以用于定义变量、常量等的作用域,


其使用方法与上述的方法相似。

009 创建标准模块和类模块 初 中 高
009 2003 / 2007 / 2010
数据排序技巧

创建标准模块和类模块
◎过程、模块与语句:“插入”菜单、工程资源管理器

创建模块和类模块的常用方法有两种,一种是通过“插入”菜单插入,
数据查询技巧

如 1-16 左图所示;另一种是通过工程资源管理器插入,如 1-16 右图所示。


数据编辑技巧

图 1-16 插入模块和类模块的两种方法

13
Access VBA 活用范例大辞典

010 导入与导出模块 初 中 高
010
基础操作技巧

2003 / 2007 / 2010

导入与导出模块
◎过程、模块与语句:【Ctrl+E】组合键、【Ctrl+M】组合键

导出模块的常用方法有 3 种,分别为通过“文件/导出文件”命令导出模
控件和对象

块,如 1-17 左图所示;在工程资源管理器欲导出模块名称上打开右键菜单导


出文件,如 1-17 右图所示;在模块代码窗口按【Ctrl+E】组合键导出文件。
对象操作技巧

图 1-17 导出模块的方法
处理数据格式

通过上述 3 种方法均会打开“导出文件”对话框,如图 1-18 所示。然后


根据提示操作即可导出模块。
数据排序技巧
数据查询技巧

图 1-18 打开“导出文件”对话框后导出模块到我的文档

导出模块是为了在不同的数据库中使用相同的模块,从而减少代码的编
写时间。
数据编辑技巧

在数据库中使用已经导出的模块,
需要先将模块导入到当前的数据库中。

与导出模块类似,导入模块也有 3 种方法,分别为通过“文件”菜单、

14
Chapter 01 Access 基础操作技巧

工程资源管理器和组合键(【Ctrl+M】组合键)打开“导入文件”对话框,

基础操作技巧
然后导入模块,如图 1-19 所示。

控件和对象
导入的模块

图 1-19 导入模块到数据库中

对象操作技巧
导出和导入类模块的方法与导出和导入模块的方法完全相同,其中模块
的后缀名为“.bas”
,类模块的后缀名为“.csl”

011 直接删除指定模块 初 中 高
011
处理数据格式

2003 / 2007 / 2010

直接删除指定模块
◎过程、模块与语句:导航窗格、【Delete】键

删除模块是在数据库的导航窗格中进行的,首先使得导航窗格显示模块
数据排序技巧

或者所有 Access 对象,如 1-20 左图所示;然后在导航窗格中选择要删除的


模块,通过右键菜单或者【Delete】键删除,如图 1-20 右图所示。
数据查询技巧
数据编辑技巧

图 1-20 删除模块

通过上述方法可以完全从数据库中删除 Access 对象,删除之后将不能够


通过撤销删除来恢复。

15
Access VBA 活用范例大辞典

012 快速定位到某个过程 初 中 高
012
基础操作技巧

2003 / 2007 / 2010

快速定位到某个过程
◎过程、模块与语句:对象框、过程框、

当代码窗口的过程较多时,就需要通过一定的方法实现快速定位到某个
控件和对象

过程,以方便程序代码的阅读。

如果要查看一个已存在的通用过程,可以在“代码”窗口的对象框中选
择“通用”选项,然后在过程框中选择所要查看的过程,如图 1-21 所示。
对象操作技巧
处理数据格式

图 1-21 快速定位通用过程的子过程

如果要查看一个事件过程,可以在“代码”窗口的对象框中选择适当的
对象,然后在过程框中选择查看的事件,如图 1-22 所示。
数据排序技巧
数据查询技巧

图 1-22 快速定位至事件过程

如果所选的事件过程没有设置代码,则会新建一个代码为空的对应事件
数据编辑技巧

过程。

16
Chapter 01 Access 基础操作技巧

013 拆分代码窗口 初 中 高
013

基础操作技巧
2003 / 2007 / 2010

拆分代码窗口
◎过程、模块与语句:“添加过程”对话框、Function 关键字

当代码窗口的过程较多时,就需要通过一定的方法实现快速定位到某个

控件和对象
过程,以方便程序代码的阅读。

向下拖动代码窗口中垂直滚动条右上角的拆分条,可以将代码窗口拆分
为两个面板,如图 1-23 所示。

对象操作技巧
处理数据格式

图 1-23 快速定位通用过程的子过程

拆分代码窗口之后,对象框及过程框中的选项指的是拥有焦点的面板。
将焦点设置到相应面板可以快速将该面板定位至指定的过程代码中。
数据排序技巧

014 调用 Sub 过程 初 中 高
014 2003 / 2007 / 2010

调用 Sub 过程
◎过程、模块与语句:Call 关键字
数据查询技巧

Sub 过程可以在其他程序中调用,调用 Sub 过程需要使用 Call 关键字,


其具体的语法格式如下所示:
Call[Sub 过程名]
数据编辑技巧

◎应用实例
素材\第 1 章\调用 Sub 过程.accdb

本例需要在单击“F_调用测试”窗体中的按钮时,调用“信息”过程。
17
Access VBA 活用范例大辞典

◎案例操作
基础操作技巧

01 在窗体中插入“Sub 过程调 02 在代码窗口中创建 Sub 过程


用测试”按钮。 “信息”。

03 在代码窗口插入“cmd_调用 04 单击按钮运行程序,查看程
控件和对象

测试_Click”事件过程。 序运行效果。

◎过程源代码
源文件\第 1 章\调用 Sub 过程.accdb
对象操作技巧

创建 Sub 过程和按钮单击事件过程,编写 VBA 代码,其具体的 VBA 代


码如下。
'调用子过程
Private Sub cmd_调用测试_Click()
处理数据格式

Call 信息
End Sub

'创建一个 Sub 过程,该过程被执行时打开消息对话框


Sub 信息()
数据排序技巧

MsgBox "“信息”过程已被调用!"
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_调用测试”窗体的视图模式切换到窗体
视图,单击“Sub 过程调用测试”按钮,如图 1-24 所示。
数据查询技巧
数据编辑技巧

图 1-24 调用 Sub 过程测试

18
Chapter 01 Access 基础操作技巧

015 递归调用中的参数传递 初 中 高
015 2003 / 2007 / 2010

基础操作技巧
递归调用中的参数传递
◎过程、模块与语句:If…Then…Else 语句、递归调用

Function 程序在其他程序中的调用与系统内置的函数的方式相同,可参

控件和对象
考实例 007。

在程序设计中,递归调用是一种应用得比较广泛的算法,通过直接或者
间接地调用函数自身,从而方便地解决许多复杂的问题,其具体的语法格式
如下所示:

对象操作技巧
If[边界条件 1] Then
[函数名]=[边界值 1]
Elseif[边界条件 2] Then
[函数名]=[边界值 2]
处理数据格式


Else
[函数名]=[递归表达式]
End If
数据排序技巧

◎应用实例
素材\第 1 章\递归调用中的参数传递.accdb

本例需要使用递归调用来创建一个求解阶乘的函数,并调用该函数求解
阶乘。
数据查询技巧

◎案例操作

01 在窗体中插入两个文本框和 02 在代码窗口中创建 Function


“计算阶乘”按钮。 函数“阶乘”

数据编辑技巧

03 在代码窗口插入“cmd_阶乘 04 单击“计算阶乘”按钮运行
_Click”事件过程。 程序,查看程序运行效果。

19
Access VBA 活用范例大辞典

◎过程源代码
基础操作技巧

源文件\第 1 章\递归调用中的参数传递.accdb

创建 Function 程序“阶乘”和“计算阶乘”按钮的单击事件过程,编写
VBA 代码,其具体的 VBA 代码如下。
'用于求解阶乘的函数
控件和对象

Public Function 阶乘(n As Variant)


'出错时,跳转至打开信息框代码处
On Error GoTo 信息框
'判断输入的参数是否符合求解阶乘的基本条件
If Int(n) - n = 0 And n >= 0 Then
对象操作技巧

'通过递归算法求解阶乘
If n = 0 Then
'赋予阶乘边界值
阶乘 = 1
Else
'使用递归调用求解
处理数据格式

阶乘 = 阶乘(n - 1) * n
End If
Else
信息框:
MsgBox "请输入不超过 170 非负整数!"
数据排序技巧

End If
End Function

'调用 Function 程序“阶乘”求阶乘


Private Sub cmd_阶乘_Click()
txt_阶乘 = 阶乘(txt_整数)
数据查询技巧

End Sub

◎执行过程
保存编写的 VBA 代码,将“F_计算阶乘”窗体的视图模式切换到窗体
视图,在第一个文本框中输入欲求阶乘的数字,单击“计算阶乘”按钮,如
数据编辑技巧

图 1-25 所示。

20
Chapter 01 Access 基础操作技巧

基础操作技巧
图 1-25 通过递归调用求解阶乘

控件和对象
016 显示消息对话框(1) 初 中 高
016 2003 / 2007 / 2010

显示消息对话框(1)
◎内置函数:MsgBox()函数

对象操作技巧
在 VBA 程序中,如果需要程序执行到某处或者满足某个条件,打开消
息对话框进行提示,可以使用系统内置的 MsgBox()函数。

MsgBox()函数用作提示信息时的语法格式如下所示:
MsgBox"[提示内容]", , "[提示标题]"
处理数据格式

MsgBox()函数也可以设置提示信息框的按钮,但是在当做提示信息使用
时,使用默认按钮就可以了。

◎应用实例
数据排序技巧

素材\第 1 章\显示消息对话框(1)递.accdb

本例需要在单击“F_消息对话框 1”窗体中的“弹出提示信息”按钮时,
打开一个仅起提示作用的对话框。

◎案例操作
数据查询技巧

01 在窗体中插入“弹出提示信 02 在代码窗口插入“cmd_提示
息”按钮。 _Click”事件过程。
数据编辑技巧

03 在“cmd_提示_Click”事件 04 单击按钮运行程序,查看程
过程中输入代码。 序运行效果。

21
Access VBA 活用范例大辞典

◎过程源代码
基础操作技巧

源文件\第 1 章\显示消息对话框(1).accdb

在事件过程中编写 VBA 代码,打开提示消息对话框,其具体的 VBA 代


码如下。
'仅起提示作用的消息对话框示例
控件和对象

Private Sub cmd_提示_Click()


MsgBox "此处为提示信息内容", , "提示信息标题"
End Sub

◎执行过程
对象操作技巧

保存编写的 VBA 代码,将“F_消息对话框 1”窗体的视图模式切换到窗


体视图,单击“弹出提示信息”按钮,如图 1-26 所示。
处理数据格式

图 1-26 使用消息对话框作为提示信息

017 显示消息对话框(2) 初 中 高
017 2003 / 2007 / 2010
数据排序技巧

显示消息对话框(2)
◎内置函数:MsgBox()函数

在 VBA 程序中,如果在某处需要通过用户的选择来执行以后的操作,
可以使用 MsgBox()函数。
数据查询技巧

在 MsgBox()函数的第二个参数中可以设置消息对话框中显示的按钮类
别等,然后使用 If…Then…Else 语句等根据对话框中反馈的按钮信息执行不
同的操作。

使用 MsgBox()函数反馈信息的语法格式如下所示:
数据编辑技巧

[变量]=MsgBox("[提示内容]",[按钮], "[提示标题]")

22
Chapter 01 Access 基础操作技巧

◎应用实例

基础操作技巧
素材\第 1 章\显示消息对话框(2).accdb

本例需要在单击“F_消息对话框 2”窗体中的“弹出提示信息”按钮,
然后根据消息对话框中的内容选择执行相应的操作。

◎案例操作

控件和对象
01 在窗体中插入“弹出提示信 02 在代码窗口插入“cmd_提示
息”按钮。 _Click”事件过程。

对象操作技巧
03 在“cmd_提示_Click”事件 04 单击按钮运行程序,查看程
过程中输入代码。 序运行效果。

◎过程源代码
源文件\第 1 章\显示消息对话框(2).accdb
处理数据格式

在事件过程中编写 VBA 代码,打开提示消息对话框,根据对话框反馈


的结果执行相应的操作,具体的代码如下所示。
'根据消息对话框中的选择执行相应的操作
数据排序技巧

Private Sub cmd_提示_Click()


Dim chooseCMD As Integer
'打开对话框并获取选择结果
chooseCMD = MsgBox("是否执行该操作?", vbYesNo, "选择")
'根据选择结果执行不同操作
If chooseCMD = vbYes Then
数据查询技巧

'选择“是”执行的操作
MsgBox "您选择了“是”选项!"
Else
'选择“否”执行的操作
MsgBox "您选择了“否”选项!"
数据编辑技巧

End If
End Sub

23
Access VBA 活用范例大辞典

◎执行过程
基础操作技巧

保存编写的 VBA 代码,将“F_消息对话框 2”窗体的视图模式切换到窗


体视图,单击“弹出提示信息”按钮,然后选择单击“选择”对话框中的不
同按钮,执行不同的操作,如图 1-27 所示。
控件和对象
对象操作技巧

图 1-27 根据不同的选择执行不同的操作

初 中 高
018
018显示输入对话框 2003 / 2007 / 2010

显示输入对话框
处理数据格式

◎内置函数:InputBox()函数

在 VBA 程序中,如果需要在程序执行的过程中输入数据,则可以使用
InputBox()函数。
数据排序技巧

使用 InputBox()函数输入数据的语法格式如下所示:
[变量]=InputBox("[提示信息]",[标题],"[默认值]")

◎应用实例
数据查询技巧

素材\第 1 章\显示输入对话框.accdb

本例需要在单击“F_输入对话框”窗体中的“输入数据”按钮,打开输
入信息框输入数据,并将输入的数据显示在窗体的文本框中。

◎案例操作
数据编辑技巧

01 在窗体中插入文本框和“输 02 在代码窗口插入“cmd_输入
入数据”按钮。 _Click”事件过程。

24
Chapter 01 Access 基础操作技巧

03 在“cmd_输入_Click”事件 04 单击按钮运行程序,查看程

基础操作技巧
过程中输入代码。 序运行效果。

◎过程源代码
源文件\第 1 章\显示输入对话框.accdb

控件和对象
在事件过程中编写 VBA 代码,打开输入对话框,将输入数据显示在文
本框中,具体的代码如下所示。
'通过输入对话框将数据输入到文本框中
Private Sub cmd_输入_Click()

对象操作技巧
txt_数据 = InputBox("请输入数据:", "输入数据", "默认值")
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_输入对话框”窗体的视图模式切换到窗
处理数据格式

体视图,单击“输入数据”按钮,然后输入数据,如图 1-28 所示。


数据排序技巧
数据查询技巧

图 1-28 显示输入对话框

019 根据条件表达式的结果返回不同值 初 中 高
019 2003 / 2007 / 2010

根据条件表达式的结果返回不同值
数据编辑技巧

◎内置函数:IIf()函数

在 VBA 程序中,如果需要根据判断的结果返回不同的值,可以使用 IIf()

25
Access VBA 活用范例大辞典

函数。
基础操作技巧

使用 Iif()函数根据判断结果输出不同值的语法格式如下所示:
IIf([条件表达式],[条件为真时返回值],[条件为假时返回值])

◎应用实例
素材\第 1 章\根据条件表达式的结果返回不同值.accdb
控件和对象

本例需要在单击“F_判断”窗体中的“判断”按钮之后,判断文本框中
输入的数值是否为正数,并使用消息对话框返回判断结果。

◎案例操作
对象操作技巧

01 在窗体中插入文本框和“判 02 在代码窗口插入“cmd_判断
断”按钮。 _Click”事件过程。

03 在“cmd_判断_Click”事件 04 运行程序,查看程序的运行
处理数据格式

过程中输入代码。 效果。

◎过程源代码
源文件\第 1 章\根据条件表达式的结果返回不同值.accdb
数据排序技巧

在事件过程中编写 VBA 代码,判断数据是否为正数,使用消息对话框


输出判断结果,具体的代码如下所示。
'根据判断结果,返回不同的结果
Private Sub cmd_输入_Click()
数据查询技巧

Dim Str As String


'判断输入数据是否大于 0,并返回字符串表示结果
Str = IIf(txt_数据 >= 0, "您输入的数是正数", "您输入的数不是正数")
'通过消息对话框输出结果字符串
MsgBox Str
数据编辑技巧

End Sub

◎执行过程
保存编写的 VBA 代码,将“F_判断”窗体的视图模式切换到窗体视图,

26
Chapter 01 Access 基础操作技巧

在文本框输入数据,单击“判断”按钮,如图 1-29 所示。

基础操作技巧
控件和对象
对象操作技巧
图 1-29 判断输入的数据是否为正数

020 判断是否为空值 初 中 高
020 2003 / 2007 / 2010

判断是否为空值
处理数据格式

◎内置函数:IsNull()函数

在 VBA 程序中,如果需要判断某个数据的值是否为空值,可以使用
IsNull()函数。

使用 IsNull()函数判断数据是否为空值的语法格式如下所示:
数据排序技巧

IsNull([欲判断数据])

◎应用实例
素材\第 1 章\判断是否为空值.accdb
数据查询技巧

本例需要在单击“F_判断”窗体中的“判断”按钮后,判断文本框是否
为空值,并使用消息对话框返回判断结果。

◎案例操作
数据编辑技巧

01 在窗体中插入文本框和“判 02 在代码窗口插入“cmd_判断
断”按钮。 _Click”事件过程。

27
Access VBA 活用范例大辞典

03 在“cmd_判断_Click”事件 04 运行程序,查看程序的运行
基础操作技巧

过程中输入代码。 效果。

◎过程源代码
源文件\第 1 章\判断是否为空值.accdb
控件和对象

在事件过程中编写 VBA 代码,判断数据是否为空,使用消息对话框输


出判断结果,具体的代码如下所示。
'判断文本框中是否为空值
Private Sub cmd_输入_Click()
对象操作技巧

If IsNull(txt_数据) Then
MsgBox "文本框中没有输入数据"
Else
MsgBox "文本框中输入数据为:" & txt_数据
End If
处理数据格式

End Sub

◎执行过程
保存编写的 VBA 代码,将“F_判断”窗体的视图模式切换到窗体视图,
在文本框无数据和有数据时分别单击“判断”按钮,如图 1-30 所示。
数据排序技巧
数据查询技巧
数据编辑技巧

图 1-30 判断文本框中是否输入数据

28
Chapter 01 Access 基础操作技巧
初 中 高
021
021 2003 / 2007 / 2010

基础操作技巧
判断变量是否被初始化
◎内置函数:IsEmpty()函数

在 VBA 程序中,如果需要判断某个 Variant(变体型)变量是否已经初

控件和对象
始化,可以使用 IsEmpty()函数。

使用 IsEmpty()函数的语法格式如下所示:
IsEmpty([欲判断变量])

◎应用实例

对象操作技巧
素材\第 1 章\判断变量是否被初始化.accdb

本例制作一个 Sub 过程,在该过程中,需要判断其中的两个 Variant 变量


是否已经初始化,并使用消息对话框返回判断结果。 处理数据格式

◎案例操作

01 在 VBA 编辑器中插入模块 02 在模块中插入“初始化否”


“初始化判断” 。 过程。
数据排序技巧

03 运行程序,查看程序的运行
效果。

◎过程源代码
数据查询技巧

源文件\第 1 章\判断变量是否被初始化.accdb

创建 Sub 过程,判断变体型变量是否已经初始化,具体的代码如下所示。
'判断过程中的变体型变量是否初始化
Sub 初始化否()
数据编辑技巧

'定义变体型变量 a 和 b
Dim a, b
Dim Str As String
'给 a 赋值

29
Access VBA 活用范例大辞典

a=1
基础操作技巧

'判断 a 是否初始化
If IsEmpty(a) Then
Str = "变量 a 没有初始化"
Else
Str = "变量 a 已经初始化"
End If
控件和对象

'判断 b 是否初始化
If IsEmpty(b) Then
Str = Str & ";" & "变量 b 没有初始化"
Else
Str = Str & ";" & "变量 b 已经初始化"
对象操作技巧

End If
'输出判断结果
MsgBox Str
End Sub

◎执行过程
处理数据格式

保存编写的 VBA 代码,然后按【F5】键运行 Sub 过程,如图 1-31 所示。


数据排序技巧
数据查询技巧

图 1-31 判断变体型变量是否已经初始化

022 初 中 高
022 2003 / 2007 / 2010

取得字符串长度
数据编辑技巧

◎内置函数:Len()函数

在 VBA 程序中,如果需要得到字符串的长度,可以使用 Len()函数。使

30
Chapter 01 Access 基础操作技巧

用 Len()函数的语法格式如下所示:

基础操作技巧
Len([字符串])

◎应用实例
素材\第 1 章\取得字符串长度.accdb

本例在单击“F_字符串长度”窗体中的“字符串长度”按钮时,通过消

控件和对象
息对话框获取文本框中字符串的长度。

◎案例操作

01 在窗体中插入文本框和“字 02 为 窗 体 添 加 “ cmd_ 长 度

对象操作技巧
符串长度”按钮。 _Click”事件过程。

03 为“cmd_长度_Click”事件 04 运行事件过程,查看程序运
过程添加 VBA 代码。 行效果。
处理数据格式

◎过程源代码
源文件\第 1 章\取得字符串长度.accdb

在事件过程中编写 VBA 代码,打开提示消息对话框,以获取字符串长


数据排序技巧

度,其具体的 VBA 代码如下。


'获取文本框中字符串长度
Private Sub cmd_长度_Click()
On Error GoTo 空字符串
Dim strLong As Integer
数据查询技巧

strLong = Len(txt_数据)
'空字符串时的处理
If 0 Then
空字符串:
strLong = 0
数据编辑技巧

End If
MsgBox "文本框中字符串的长度为:" & strLong
End Sub

31
Access VBA 活用范例大辞典

◎执行过程
基础操作技巧

保存编写的 VBA 代码,将“F_字符串长度”窗体的视图模式切换至窗体视


图模式,在文本框中输入字符串,单击“字符串长度”按钮,如图 1-32 所示。
控件和对象

图 1-32 获取文本框中字符串的长度

023
023
初 中 高
对象操作技巧

2003 / 2007 / 2010

使用 RGB()函数设置颜色
◎内置函数:RGB()函数、Rnd()函数、Int()函数

在 VBA 程序中,如果需要为某个对象设置颜色,可以使用 RGB()函数。


处理数据格式

RGB()函数有 3 个参数,分别代表红、绿、蓝 3 种颜色,为不大于 255 的非


负整数。该函数的具体语法格式如下所示:
RGB([红色值],[绿色值],[蓝色值])

◎应用实例
数据排序技巧

素材\第 1 章\使用 RGB 函数设置颜色.accdb

本例需要在单击“F_颜色”窗体中的“改变边框颜色”按钮后,按钮的
边框颜色会随机变化。
数据查询技巧

◎案例操作

01 在窗体中插入“改变边框颜 02 为 窗 体 添 加 “ cmd_ 颜 色
色”按钮。 _Click”事件过程。
数据编辑技巧

03 为“cmd_颜色_Click”事件 04 运行事件过程,查看程序运
过程添加 VBA 代码。 行效果。

32
Chapter 01 Access 基础操作技巧

◎过程源代码

基础操作技巧
源文件\第 1 章\使用 RGB 函数设置颜色.accdb

在事件过程中编写 VBA 代码,获取 3 个不大于 255 的非负整数,为按


钮边框设置颜色,其具体的 VBA 代码如下。
'通过 3 个随机数设置按钮边框颜色

控件和对象
Private Sub cmd_颜色_Click()
Dim RColor, GColor, BColor As Integer
'获取 3 个不大于 255 的非负整数
RColor = Int(Rnd() * 255)
GColor = Int(Rnd() * 255)

对象操作技巧
BColor = Int(Rnd() * 255)
'设置按钮边框颜色
cmd_颜色.BorderColor = RGB(RColor, GColor, BColor)
End Sub

◎执行过程
处理数据格式

保存编写的 VBA 代码,将“F_颜色”窗体的视图模式切换至窗体视图


模式,单击“改变窗体颜色”按钮,如图 1-33 所示。
数据排序技巧

图 1-33 单击按钮后随机改变边框颜色

初 中 高
数据查询技巧

024 2003 / 2007 / 2010

VBA 中的命名规则
◎VBA 中的定义:命名规则(1)
数据编辑技巧

在 VBA 程序中,为过程、常数、变量等命名时,需要遵守一定的规则。

首先,第一个字符必须为英文字母,且名称中不能含有空格、运算符、
句点(.)
、感叹号(!)或@、&、$,#等在 VBA 代码中有特定作用的字符。

33
Access VBA 活用范例大辞典

其次,名称的长度不能够超过 255 个字符。


基础操作技巧

再次,不能够使用 VBA 的保留关键字来命名,也不能够使用已有的过


程名、函数名等来命名。

最后,不能够在作用范围重叠的情况下定义两个作用范围层次相同
的同名变量,但是可以定义同名的私有变量,来覆盖当前作用范围内的
更大变量。
控件和对象

还有一点需要注意的是,VBA 代码不区分英文字母大小写,所以不能通
过英文字母大小写来设置不同的变量名。

025
025让变量名更有意义
初 中 高
对象操作技巧

2003 / 2007 / 2010

让变量名更有意义
◎VBA 中的定义:命名规则(2)
处理数据格式

在 VBA 程序中定义变量时,虽然只要符合命名规则的变量名都可以使
用,但是为了代码的阅读更为方便,应该尽量让变量名更有意义。

一般来说,可以在为变量命名时,在名称中指出变量的作用,并使用前
缀或者后缀来指明变量的类型,如有必要,还可以指定变量的作用范围。
数据排序技巧

比如,要定义一个字符串类型的全局变量来存储学生姓名,可以将其定
义为“G_strName”
。其中,G 为 Global 的首字母,表示全局变量;str 为 String
的缩写,表示字符串变量;Name 为英文单词,表示变量的作用为存储姓名。

026 定义常量 初 中 高
数据查询技巧

026 2003 / 2007 / 2010

定义常量
◎VBA 中的定义:Const 语句

常量,就是被命名了的常数。比如最为著名的常量圆周率,它被命名为
数据编辑技巧

“π”
,在计算时,使用“π”与使用“3.141592653……”是等效的。VBA 中
常量的使用也是如此。

34
Chapter 01 Access 基础操作技巧

常用的常量有,系统常量和用户自定义常量两种。系统常量可以直接使

基础操作技巧
用,用户自定义常量则需要声明之后才能够使用。

使用 Const 语句可以定义常量,其具体的语法格式如下所示:
Const [常量名] As [数据类型]=[常量值]

027 定义变量 初 中 高

控件和对象
027 2003 / 2007 / 2010

定义变量
◎VBA 中的定义:Dim 语句

对象操作技巧
通常使用 Dim 语句来定义变量,可以在过程中定义变量,也可以在过程
外定义变量。

在过程中定义的变量只在当前过程有效,为过程级变量;在过程外定义
的变量,通常放置在模块的开始部分,对该模块中的所有程序都有效,为模
块级变量。
处理数据格式

使用 Dim 语句定义常量的语法格式如下所示:
Dim [变量名] As [数据类型]

028 定义数组 初 中 高
数据排序技巧

028 2003 / 2007 / 2010

定义数组
◎VBA 中的定义:Dim 语句

定义数组的方法与定义变量的方法基本相同,也可以使用 Dim 语句进


数据查询技巧

行。只是在数组的定义时,通常需要指定数组的大小。

数组大小的指定,一般是通过数组下标界限的指定来实现的。使用 Dim
语句定义数组的语法格式如下所示:
Dim [数组名([数组下标界限])] As [数据类型]
数据编辑技巧

比如需要定义一个 3 行 4 列的二维数组,可以使用下面的代码:
Dim MyArray(3,4) As Integer

35
Access VBA 活用范例大辞典

029 定义动态数组 初 中 高
029 2003 / 2007 / 2010
基础操作技巧

定义动态数组
◎VBA 中的定义:Dim 语句、ReDim 语句

如果在定义数组时,不指定数组的大小,则可以定义动态数组,其具体
控件和对象

的语法格式如下所示:
Dim[数组名()] As [数据类型]
在使用动态数组时,可以通过 ReDim 语句来设置数组动态数组的大小,
其具体的语法格式如下所示:
对象操作技巧

ReDim[动态数组名(数组下标界限)]
如果需要将动态数组设置为 3 行 4 列的二维数组,
可以使用下面的代码:
Dim MyArray() As Integer
ReDim MyArray(3,4)
处理数据格式

030 自定义数据类型 初 中 高
030 2003 / 2007 / 2010

自定义数据类型
◎VBA 中的定义:Type 语句
数据排序技巧

VBA 中提供了基本的数据类型,如果这些数据类型不能够满足使用要
求,则可以通过 Type 语句来自定义数据类型,其具体的语法格式如下所示:
Type[数据类型名]
[数据类型描述]
数据查询技巧

End Type
自定义数据类型与普通数据类型的使用方法相同。

◎应用实例
数据编辑技巧

素材\第 1 章\自定义数据类型.accdb

本例需要自定义一个包含两个值的数据类型 People,然后在示例过程中

36
Chapter 01 Access 基础操作技巧

使用该类型的数据。

基础操作技巧
◎案例操作

01 为数据库插入模块“M_示 02 在模块中插入“示例”过程,
例”
,自定义 People 数据类型。 使用 People 类型变量。

控件和对象
03 运行事件过程,查看程序运
行效果。

◎过程源代码

对象操作技巧
源文件\第 1 章\自定义数据类型.accdb

插入模块,自定义数据类型,创建 Sub 过程,然后保存 VBA 代码,具


体的 VBA 代码如下。 处理数据格式

Option Compare Database


Option Explicit
'定义一个包含姓名和年龄的数据类型
Type People
Name As String
Age As Integer
数据排序技巧

End Type

Sub 示例()
'定义一个数据类型为 People 的变量
Dim PPMe As People
数据查询技巧

'为变量赋值
PPMe.Name = "张三"
PPMe.Age = 34
'使用消息框输出结果
MsgBox PPMe.Name & "的年龄为:" & PPMe.Age
数据编辑技巧

End Sub

◎执行过程
保存编写的 VBA 代码,然后按【F5】键运行过程,如图 1-34 所示。

37
Access VBA 活用范例大辞典
基础操作技巧
控件和对象

图 1-34 运行含有自定义数据类型的过程

031 定义具有作用域的变量 初 中 高
031 2003 / 2007 / 2010
对象操作技巧

定义具有作用域的变量
◎VBA 中的定义:Dim 语句

作用域,是指变量、常量或过程在其他过程中的可用性,一般而言,有
处理数据格式

3 个级别的作用域:过程级别(仅在当前过程可用)
、私有模块级别(仅在当
前模块可用)
、公共模块级别(在当前项目均可用)

变量在定义的时候就已经决定了它的作用域。其中,过程级别的变量最
为常用,它使用 Dim 语句定义于当前过程之内。模块级别变量定义于模块的
数据排序技巧

声明部分,可以是私有或公有的,分别使用 Private 和 Public 关键字标识。其


中,Private 关键字可以缺省。

◎应用实例
素材\第 1 章\定义具有作用域的变量.accdb
数据查询技巧

本例需要分别演示不同作用域的变量的定义方法及其作用范围。

◎案例操作

01 为数据库插入模块“M_示例 02 在模块“M_示例 12”中定义


数据编辑技巧


12”和“M_示例 34” 变量,插入“示例 1”和“示
例 2”过程。

38
Chapter 01 Access 基础操作技巧

基础操作技巧
03 在模块“M_示例 34”中定义 04 分别运行各个过程,查看不
变量,插入“示例 3”和“示 同作用域的变量的作用范围。
例 4”过程。

◎过程源代码

控件和对象
源文件\第 1 章\定义具有作用域的变量.accdb

插入模块,定义不同作用域的变量,创建 Sub 过程,然后保存 VBA 代


码,具体的 VBA 代码如下。
Option Compare Database

对象操作技巧
Option Explicit
'使用 Dim 语句定义私有模块级别变量
Dim m_Name As String
'通过 Private 关键字定义私有模块级别变量
Private m_No As Integer
处理数据格式

'定义公共模块级别变量
Public p_Date As Date

'测试所有级别变量在当前过程是否可用
Sub 示例 1()
数据排序技巧

'定义过程级别变量
Dim mon As Currency
m_Name = "Access"
m_No = 12
p_Date = "2012-8-8"
mon = 2300
数据查询技巧

MsgBox m_Name & ";" & m_No & ";" & p_Date & ";" & mon
End Sub

'测试当前过程是否可用其他过程的过程级别变量
Sub 示例 2()
数据编辑技巧

mon = 2300
MsgBox mon
End Sub

39
Access VBA 活用范例大辞典

'测试其他模块定义的私有模块级别变量是否可用
基础操作技巧

Sub 示例 3()
m_Name = "Access"
m_No = 12
End Sub

'测试其他模块定义的公有模块级别变量是否可用
控件和对象

Sub 示例 4()
p_Date = "2012-8-8"
MsgBox p_Date
End Sub
对象操作技巧

◎执行过程
保存编写的 VBA 代码,再按【F5】键运行各个过程,结果如图 1-35 所示。
处理数据格式
数据排序技巧
数据查询技巧
数据编辑技巧

图 1-35 不同作用域的变量的作用范围演示

40
Chapter 01 Access 基础操作技巧

032 定义静态变量 初 中 高
032

基础操作技巧
2003 / 2007 / 2010

定义静态变量
◎VBA 中的定义:Static 语句

如果需要在程序运行过程中,某个变量一直存在,可以使用静态变量。

控件和对象
静态变量使用 Static 语句来定义,其具体的语法格式为:
Static[变量名] As[数据类型]
静态变量与一般变量的区别在于内存的使用,一般变量在程序中使用的
是动态的内存地址,每次使用的内存地址都不一样;而静态变量采用的是静

对象操作技巧
态存储方式,其在整个源程序中使用的是相同的内存地址。

◎应用实例
素材\第 1 章\定义静态变量.accdb

本例需要分别演示不同作用域的变量的定义方法及其作用范围。
处理数据格式

◎案例操作

01 在“F_静态变量”窗体插入 02 为 窗 体 添 加 “ cmd_ 测 试
“测试”按钮。 _Click”事件过程。
数据排序技巧

03 在“cmd_测试_Click”事件 04 单击“测试”按钮运行程序,
过程中输入程序代码。 查看程序效果。
数据查询技巧

◎过程源代码
源文件\第 1 章\定义静态变量.accdb

在事件过程中编写 VBA 代码,定义变量,实现累加,使用消息对话框


返回结果,具体的 VBA 代码如下。
数据编辑技巧

'演示静态变量与一般变量的区别
Private Sub cmd_测试_Click()
'定义一般变量

41
Access VBA 活用范例大辞典

Dim Num1 As Integer


基础操作技巧

'定义静态变量
Static NUm2 As Integer
'程序每运行一次,变量累加 1
Num1 = Num1 + 1
NUm2 = NUm2 + 1
MsgBox "一般变量:" & Num1 & " " & "静态变量:" & NUm2
控件和对象

End Sub

◎执行过程
保存编写的 VBA 代码,将“F_静态变量”的窗体模式切换至窗体视图
模式,单击“测试”按钮,打开对话框,关闭对话框后再次单击按钮,重复
对象操作技巧

上述操作查看结果,如图 1-36 所示。


处理数据格式

图 1-36 一般变量与静态变量的区别演示

033 使用定义的常量 初 中 高
033 2003 / 2007 / 2010

使用定义的常量
数据排序技巧

◎VBA 中的定义:Const 语句

如果程序中某一个常数(可以是任意类型的数据,不只是数值型常数)

在程序中使用较多,可以将其定义为常量(常量的定义见实例 026)

数据查询技巧

自定义的常量的使用方法与变量、常数的使用方法类似,直接使用常量
名称代替常数即可。

◎应用实例
素材\第 1 章\使用定义的常量.accdb
数据编辑技巧

本例需要在单击“F_常量”窗体中的“测试”按钮后,对输入信息框中
输入的数据减半,使用消息对话框返回减半计算的操作过程及结果。

42
Chapter 01 Access 基础操作技巧

◎案例操作

基础操作技巧
01 在“F_常量”窗体插入“测 02 为 窗 体 添 加 “ cmd_ 测 试
试”按钮。 _Click”事件过程。

03 在“cmd_测试_Click”事件 04 单击“测试”按钮运行程序,

控件和对象
过程中输入程序代码。 查看程序效果。

◎过程源代码
源文件\第 1 章\使用定义的常量.accdb

对象操作技巧
在事件过程中编写 VBA 代码,定义常量,使用消息对话框返回运算目
的、过程和结果,具体的 VBA 代码如下。
'使用定义的常量
Private Sub cmd_测试_Click()
处理数据格式

'定义字符串常量 Cut
Const Cut As String = "0.5"
Dim Num As Integer
Num = InputBox("请输入需要减半的数据:")
'使用字符串常量 Cut
MsgBox Num & "减半:" & Num & "×" & Cut & "=" & Num * Cut
数据排序技巧

End Sub

◎执行过程
保存编写的 VBA 代码,将“F_常量”
,窗体的窗体模式切换至窗体视图
模式,单击“测试”按钮,在输入对话框中输入数据,单击“确定”按钮查
数据查询技巧

看结果,如图 1-37 所示。


数据编辑技巧

图 1-37 常量的使用

43
Access VBA 活用范例大辞典

034 使用内置常量 初 中 高
034 2003 / 2007 / 2010
基础操作技巧

使用内置常量
◎VBA 中的定义:Const 语句

在 Access 中,有许多内置的常量,其前两个字母指明了定义该常量的对
控件和对象

象库。如来自 Access 库的常量以“ac”打头,来自 ADO 库的常量以“ad”


打头,而来自 Visual Basic 库的常量则以“vb”打头等。

因为内置常量所代表的值在不同版本的 Access 中可能会有所不同,所以


在程序中应该使用常量而不是常量的实际值。
对象操作技巧

◎应用实例
素材\第 1 章\使用内置常量.accdb

本例需要在单击“F_常量”窗体中的“测试”按钮后,打开对话框,然
后单击对话框中的按钮,返回所选按钮的常量的值。
处理数据格式

◎案例操作

01 在“F_常量”窗体插入“测 02 为 窗 体 添 加 “ cmd_ 测 试
试”按钮。 _Click”事件过程。
数据排序技巧

03 在“cmd_测试_Click”事件 04 单击“测试”按钮运行程序,
过程中输入程序代码。 查看程序效果。
数据查询技巧

◎过程源代码
源文件\第 1 章\使用内置常量.accdb

在事件过程中编写 VBA 代码,获取按钮值,返回按钮对应的常量值,


具体的 VBA 代码如下。
数据编辑技巧

'使用内置的常量
Private Sub cmd_测试_Click()
Dim n As Integer

44
Chapter 01 Access 基础操作技巧

'获取消息对话框的按钮值

基础操作技巧
n = MsgBox("选择是 or 否", vbYesNo)
'使用内置的常数 vbYes 和 vbNo
If n = vbYes Then
MsgBox "您选择的按钮的值为:" & vbYes
Else
MsgBox "您选择的按钮的值为:" & vbNo

控件和对象
End If
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_常量”窗体的窗体模式切换至窗体视图模式,

对象操作技巧
单击“测试”按钮,在打开的对话框中单击不同的按钮,结果如图 1-38 所示。

处理数据格式

图 1-38 Access 内置常量的使用


数据排序技巧

035 直线流程结构 初 中 高
035 2003 / 2007 / 2010

直线流程结构
◎流程语句:直线流程
数据查询技巧

直线流程结构,是最为简单的程序结构,它只有一条执行路径。在程序
执行时,按照代码的先后顺序依次执行。

◎应用实例
数据编辑技巧

素材\第 1 章\直线流程结构.accdb

本例需要在“M_直线流程”模块中创建 Sub 过程,通过每一行代码执行

45
Access VBA 活用范例大辞典

时打开的对话框来示例直线流程结构程序的执行效果。
基础操作技巧

◎案例操作

01 在“M_直线流程”窗体插入 02 为“直线流程示例”过程输
“直线流程示例”过程。 入程序代码。
控件和对象

03 运行过程代码,查看程序运
行效果。

◎过程源代码
对象操作技巧

源文件\第 1 章\直线流程结构.accdb

编写 VBA 代码,打开标识当前代码行数的对话框,具体的 VBA 代码如


下。
处理数据格式

'直线流程结构程序执行示例
Sub 直线流程示例()
'每一行代码执行时打开一个标识对话框
MsgBox "第 1 行代码执行"
MsgBox "第 2 行代码执行"
MsgBox "第 3 行代码执行"
数据排序技巧

End Sub

◎执行过程
保存编写的 VBA 代码,然后按【F5】键运行“直线流程示例”过程,
结果如图 1-39 所示。
数据查询技巧
数据编辑技巧

图 1-39 直线流程结构的程序的执行效果

46
Chapter 01 Access 基础操作技巧

036 简单条件分支结构 初 中 高
036

基础操作技巧
2003 / 2007 / 2010

简单条件分支结构
◎流程语句:If…Then…Else 语句

Access VBA 中,使用 If…Then…Else 语句可以控制在某条件可以做什么

控件和对象
或不可以做什么,其具体的语法格式如下所示:
If[条件] Then
[条件成立时执行代码]
Else

对象操作技巧
[条件不成立时执行代码]
End If
其中 Else 及其之后条件不成立时执行的代码可以缺省。

◎应用实例
处理数据格式

素材\第 1 章\简单条件分支结构.accdb

本例需要在模块“M_简单条件分支”中创建 Sub 过程,通过判断通过输


入对话框输入的整数是否大于 0,返回不同的消息对话框。
数据排序技巧

◎案例操作

01 在“M_简单条件分支”窗体 02 为“简单条件分支”过程输
插入“简单条件分支”过程。 入程序代码。
数据查询技巧

03 运行过程代码,查看程序运
行效果。

◎过程源代码
数据编辑技巧

源文件\第 1 章\简单条件分支结构.accdb

编写 VBA 代码,通过输入对话框输入数据,判断数据是否大于 0,之后


再根据判断结果打开对话框,具体的 VBA 代码如下。

47
Access VBA 活用范例大辞典

'简单条件分支结构程序执行示例
基础操作技巧

Sub 简单条件分支()
Dim NumIn As Integer
'通过输入对话框输入数据
NumIn = InputBox("请输入数据:")
'判断输入的数据是否大于 0
If NumIn > 0 Then
控件和对象

'输入数据大于 0 时打开下面的对话框
MsgBox "输入的数据" & NumIn & "大于 0"
Else
'输入对话框小于等于 0 时打开下面的对话框
MsgBox "输入的数据" & NumIn & "小于等于 0"
对象操作技巧

End If
End Sub

◎执行过程
保存编写的 VBA 代码,然后按【F5】键运行“简单条件分支”过程,
处理数据格式

结果如图 1-40 所示。


数据排序技巧
数据查询技巧

图 1-40 简单条件分支结构程序的执行效果

037 多条件分支结构(1) 初 中 高
037 2003 / 2007 / 2010

多条件分支结构(1)
数据编辑技巧

◎流程语句:If…Then…Else 语句

Access VBA 中,还可以使用 If…Then…Else 语句实现多条件分支结构的

48
Chapter 01 Access 基础操作技巧

控制,其具体的语法格式如下所示:

基础操作技巧
If[条件 1] Then
[条件 1 成立时执行代码]
ElseIf[条件 2] then
[条件 1 不成立条件 2 成立时执行代码]
……

控件和对象
Else
[以上条件均不成立时执行代码]
End If
其中,Else If 可以根据需要多次使用,Else 可以缺省。使用该语句时,

对象操作技巧
最终只会执行第一个成立的条件对应的代码,其余的代码则不会执行。

◎应用实例
素材\第 1 章\多条件分支结构(1).accdb
处理数据格式

本例需要在“M_多条件分支”模块中创建 Sub 过程,通过判断通过输入


对话框输入的数据所处的范围,返回不同的消息对话框。

◎案例操作
数据排序技巧

01 在“M_多条件分支”窗体插 02 为“多条件分支”过程输入
入“多条件分支”过程。 程序代码。

03 运行过程代码,查看程序运
数据查询技巧

行效果。

◎过程源代码
源文件\第 1 章\多条件分支结构(1).accdb
数据编辑技巧

编写 VBA 代码,通过输入对话框输入数据,判断数据所处的范围,然
后再根据判断结果打开对话框,具体的 VBA 代码如下。

49
Access VBA 活用范例大辞典

'多条件分支结构程序执行示例
基础操作技巧

Sub 多条件分支()
Dim NumIn As Integer
NumIn = InputBox("请输入数据:")
'判断输入的数据是否大于 100
If NumIn > 100 Then
'输入数据大于 100 时打开下面的对话框
控件和对象

MsgBox "输入的数据" & NumIn & ":大于 100"


ElseIf NumIn > 10 Then
'输入数据大于 10 小于等于 100 时打开下面的对话框
MsgBox "输入的数据" & NumIn & ":介于 10 到 100(含)之间"
ElseIf NumIn > 0 Then
对象操作技巧

'输入数据大于 0 小于等于 10 时打开下面的对话框


MsgBox "输入的数据" & NumIn & ":介于 0 到 10(含)之间"
ElseIf NumIn = 0 Then
'输入数据等于 0 时打开下面的对话框
MsgBox "输入的数据" & NumIn & ":等于 0"
Else
处理数据格式

'以上条件均不成立时打开的对话框
MsgBox "输入的数据" & NumIn & ":小于 0"
End If
End Sub

◎执行过程
数据排序技巧

保存编写的 VBA 代码,然后按【F5】键运行“多条件分支”过程,结


果如图 1-41 所示。
数据查询技巧
数据编辑技巧

图 1-41 多条件分支结构程序的执行效果

50
Chapter 01 Access 基础操作技巧

038 多条件分支结构(2) 初 中 高
038 2003 / 2007 / 2010

基础操作技巧
多条件分支结构(2)
◎流程语句:Select Case 语句

Access VBA 中,还可以使用 Select Case 语句实现多条件分支结构的控

控件和对象
制,其具体的语法格式如下所示:
Select Case [需要满足条件的数据]
Case Is[数据满足的条件 1]
[条件 1 成立时执行代码]

对象操作技巧

Case Else
[以上条件均不成立时执行代码]
End Select 处理数据格式

其中,Case Is 和 Case 可以根据情况选用,Case 后面没有 Is 表示数据等


于该值,其他情况需要使用 Is Select Case 语句对多条件的处理与 If…Then…
Else 语句相同。

◎应用实例
数据排序技巧

素材\第 1 章\多条件分支结构(2).accdb

本例需要在“M_多条件分支”模块中创建 Sub 过程,通过判断通过输入


对话框输入的数据所处的范围 ,返回不同的消息对话框。

◎案例操作
数据查询技巧

01 在“M_多条件分支”窗体插 02 为“多条件分支”过程输入
入“多条件分支”过程。 程序代码。
数据编辑技巧

03 运行过程代码,查看程序运
行效果。

51
Access VBA 活用范例大辞典

◎过程源代码
基础操作技巧

源文件\第 1 章\多条件分支结构(2).accdb

编写 VBA 代码,通过输入对话框输入数据,判断数据是否大于 0,根据


判断结果打开对话框,具体的 VBA 代码如下。
'多条件分支结构程序执行示例
控件和对象

Sub 多条件分支()
Dim NumIn As Single
NumIn = InputBox("请输入数据:")
'指定要进行判断的数据
Select Case NumIn
对象操作技巧

'数据大于 100 的情况


Case Is > 100
MsgBox "输入了大于 100 的数据"
'数据大于 0 的情况
Case Is > 0
MsgBox "输入了大于 0 的数据"
处理数据格式

Case 0
MsgBox "输入的数据为 0" '数据等于 0 的情况
Case Else
MsgBox "输入了负数" '以上条件之外的情况
End Select
数据排序技巧

End Sub

◎执行过程
保存编写的 VBA 代码,然后按【F5】键运行过程,结果如图 1-42 所示。
数据查询技巧
数据编辑技巧

图 1-42 多条件分支结构程序的执行效果

52
Chapter 01 Access 基础操作技巧

039 具有包含关系的条件分支结构 初 中 高
039

基础操作技巧
2003 / 2007 / 2010

具有包含关系的条件分支结构
◎流程语句:If…Then…Else 语句、IsNull()函数

Access VBA 中,如果在使用 If…Then…Else 语句进行条件判断之后,还

控件和对象
需要判断是否满足其他的条件时,可以使用具有包含关系的条件分支结构,
即在 If…Then…Else 语句的条件成立时执行的代码中再次使用 If…Then…
Else 语句,其具体的语法格式如下所示:
If[条件 1] Then

对象操作技巧
[ If…Then…Else 语句]
ElseIf[条件 2] then
[条件 1 不成立条件 2 成立时执行代码]
……
Else
处理数据格式

[以上条件均不成立时执行代码]
End If

◎应用实例
数据排序技巧

素材\第 1 章\具有包含关系的条件分支结构.accdb

本例需要在“F_登录”窗体中模拟登录窗口,单击“登录”按钮后,判
断用户名和密码是否输入和输入正确,如果没有输入正确的用户名和密码,
则打开相应的提示,均输入正确则打开“登录成功”提示。
数据查询技巧

◎案例操作

01 在“F_登录”窗体插入两个 02 为 窗 体 添 加 “ cmd_ 登 录
文本框和“登录”按钮。 _Click”事件过程。
数据编辑技巧

03 在“cmd_登录_Click”事件 04 运行过程代码,查看程序运
过程中输入 VBA 代码。 行效果。

53
Access VBA 活用范例大辞典

◎过程源代码
基础操作技巧

源文件\第 1 章\具有包含关系的条件分支结构.accdb

编写 VBA 代码,判断用户名是否输入及输入正确,没有输入或输入错
误会打开相应提示;用户名输入正确后,判断密码是否输入及输入正确,没
有输入或输入错误也会打开相应的提示;用户名和密码均输入正确后,则打
开登录成功的提示,具体的 VBA 代码如下。
控件和对象

'使用具有包含关系的条件分支结构模拟登录窗口
Private Sub cmd_登录_Click()
'判断用户名是否为空
If IsNull(txt_用户名) Then
对象操作技巧

MsgBox "请输入用户名!", , "用户名"


'判断用户名是否正确
ElseIf txt_用户名 <> "yhm123" Then
MsgBox "用户名错误!", , "用户名"
'用户名正确之后
处理数据格式

Else
'判断密码是否为空
If IsNull(txt_密码) Then
MsgBox "请输入密码!", , "密码"
'判断密码是否正确
ElseIf txt_密码 <> "123456" Then
数据排序技巧

MsgBox "密码错误!", , "密码"


'用户名和密码均正确
Else
MsgBox "登录成功!", ,"成功"
End If
数据查询技巧

End If
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_登录”窗体的视图模式切换至窗体视图,
在“用户名”和“密码”文本框中输入用户名和密码,单击“登录”按钮查
数据编辑技巧

看登录结果,如图 1-43 所示。

54
Chapter 01 Access 基础操作技巧

基础操作技巧
图 1-43 模拟登录窗口的效果

控件和对象
040 进行循环判断 初 中 高
040 2003 / 2007 / 2010

进行循环判断
◎流程语句:Do…Loop Until 语句

对象操作技巧
如果知道所得结果所要满足的条件,可以使用 Do…Loop Until 语句来进
行循环判断,从而得到所需结果,其具体的语法格式如下所示:
Do
[循环体]
处理数据格式

Loop Until[结束循环的条件]
使用 Do…Loop Until 语句,会执行一次循环体中的代码,再判断是否满
足指定的条件,循环体至少执行一次。

◎应用实例
数据排序技巧

素材\第 1 章\进行循环判断.accdb

本例需要得到方程 z=x+y2,x 和 y 为不大于 100 的正整数时,z 大于等


于 9850 的一个随机解。
数据查询技巧

◎案例操作

01 在“M_循环判断”模块中创 02 在“随机解”
过程中编写 VBA
建“随机解”过程。 代码。
数据编辑技巧

03 运行过程代码,查看程序运
行效果。

55
Access VBA 活用范例大辞典

◎过程源代码
基础操作技巧

源文件\第 1 章\进行循环判断.accdb

编写 VBA 代码,赋予 x 和 y 不大于 100 的随机整数,计算 z 值,判断 z


是否大于等于 9850,具体的 VBA 代码如下。
'求不等式的随机整数解
控件和对象

Sub 随机解()
Dim x As Double
Dim y As Double
Dim z As Double
Dim n As Double
对象操作技巧

'获取可能的解,再判断解是否满足条件
Do
x = Int(Rnd * 100)
y = Int(Rnd * 100)
z=x+y^2
n=n+1
处理数据格式

Loop Until z >= 9850


'通过对话框返回计算结果及计算次数
MsgBox "x=" & x & vbCrLf & "y=" & y & vbCrLf _
& "z=" & z & vbCrLf & "运算次数:" & n
End Sub
数据排序技巧

◎执行过程
保存编写的 VBA 代码,然后按【F5】键运行“随机解”过程,结果如
图 1-44 所示。
数据查询技巧
数据编辑技巧

图 1-44 通过循环判断求解方程的随机解

56
Chapter 01 Access 基础操作技巧

041 进行判断循环(1) 初 中 高
041 2003 / 2007 / 2010

基础操作技巧
进行判断循环(1)
◎流程语句:Do Until…Loop 语句

如果需要在条件不成立时执行循环体,在条件成立时结束循环,可以使

控件和对象
用 Do Until…Loop 语句,其具体的语法格式如下所示:
Do Until[结束循环的条件]
[循环体]
Loop

对象操作技巧
使用 Do Until…Loop 语句,会先判断是否不满足指定的条件,然后执行
循环体,即循环体可能一次也不执行。

◎应用实例
素材\第 1 章\进行判断循环(1).accdb
处理数据格式

本例中,需要在过程运行时,输入两个正整数,并计算其最小公倍数。

◎案例操作

01 在“M_判断循环”模块中创 02 在“最小公倍数”过程中编
数据排序技巧

建“最小公倍数”过程。 写 VBA 代码。

03 运行过程代码,查看程序运
行效果。
数据查询技巧

◎过程源代码
源文件\第 1 章\进行判断循环(1).accdb

编写 VBA 代码,获取两个正整数,并获取其最大值,通过判断循环计
数据编辑技巧

算最小公倍数,具体的 VBA 代码如下。


'求两正整数的最小公倍数
Sub 最小公倍数()

57
Access VBA 活用范例大辞典

Dim Num1 As Integer


基础操作技巧

Dim Num2 As Integer


Dim Num As Integer
Dim n As Integer
'获取两整数
Num1 = InputBox("请输入第一个正整数:")
Num2 = InputBox("请输入第二个正整数:")
控件和对象

'获取输入两整数的最大值
If Num1 > Num2 Then
Num = Num1
Else
Num = Num2
对象操作技巧

End If
'通过判断循环求两正整数的最小公倍数
Do Until Int(Num / Num1) = Num / Num1 And Int(Num / Num2) = Num / Num2
Num = Num + 1
n=n+1
Loop
处理数据格式

MsgBox Num1 & "与" & Num2 & "的最小公倍数为:" _


& Num & vbCrLf & "循环次数:" & n
End Sub

◎执行过程
数据排序技巧

保存编写的 VBA 代码,然后按【F5】键运行“最小公倍数”过程,两次运


行该过程的结果如图 1-45 所示,其中第 2 次运行时,执行循环的次数为 0。
数据查询技巧
数据编辑技巧

图 1-45 计算两个正整数的最小公倍数

58
Chapter 01 Access 基础操作技巧

042 进行判断循环(2) 初 中 高
042

基础操作技巧
2003 / 2007 / 2010

进行判断循环(2)
◎流程语句:While…Wend 语句

进行判断循环,除了使用 Do Until…Loop 语句外,还可以使用 While…

控件和对象
Wend 语句,其具体的语法格式如下所示:
While[执行循环的条件]
[循环体]
Wend

对象操作技巧
使用 While…Wend 语句,会先判断是否满足指定的条件,然后执行循环
体,循环体可能一次也不执行。

◎应用实例
素材\第 1 章\进行判断循环(2).accdb
处理数据格式

本例需要在过程运行时,输入两个正整数,并计算其最小公倍数。

◎案例操作

01 在“M_判断循环”模块中创 02 在“最小公倍数”过程中编
数据排序技巧

建“最小公倍数”过程。 写 VBA 代码。

03 运行过程代码,查看程序运
行效果。
数据查询技巧

◎过程源代码
源文件\第 1 章\进行判断循环(2).accdb

编写 VBA 代码,获取两个正整数,并获取其最大值,通过判断循环计
数据编辑技巧

算最小公倍数,具体的 VBA 代码如下。


'通过判断循环求最小公倍数
Sub 最小公倍数()

59
Access VBA 活用范例大辞典

Dim Num1 As Integer


基础操作技巧

Dim Num2 As Integer


Dim Num As Integer
Dim n As Integer
'获取两个正整数
Num1 = InputBox("请输入第一个正整数:")
Num2 = InputBox("请输入第二个正整数:")
控件和对象

'获取两个正整数的最大值
If Num1 > Num2 Then
Num = Num1
Else
Num = Num2
对象操作技巧

End If
'计算最小公倍数以及循环次数
While Int(Num / Num1) <> Num / Num1 Or Int(Num / Num2) <> Num / Num2
Num = Num + 1
n=n+1
Wend
处理数据格式

MsgBox Num1 & "与" & Num2 & "的最小公倍数为:" _


& Num & vbCrLf & "循环次数为:" & n
End Sub

◎执行过程
数据排序技巧

保存编写的 VBA 代码,然后按【F5】键运行“最小公倍数”过程,两次运


行该过程的结果,其中第 2 次运行时如图 1-46 所示,执行循环的次数为 0。
数据查询技巧
数据编辑技巧

图 1-46 计算两个正整数的最小公倍数

60
Chapter 01 Access 基础操作技巧

043 进行计次循环 初 中 高
043

基础操作技巧
2003 / 2007 / 2010

进行计次循环
◎流程语句:For…Next 语句

如果需要按照指定的次数进行循环,可以使用 For…Next 语句按照指定

控件和对象
循环和步长进行循环,其具体的语法格式如下所示:
For[计数变量]=[计数初值] to [计数终值] Step [步长]
[循环体]
Next[计数变量]

对象操作技巧
其中,步长表示每次循环计数变量增加的值,可以缺省,默认为 1。

◎应用实例
素材\第 1 章\进行计次循环.accdb

本例需要计算输入的不大于 170 的正整数的阶乘,以及从 1 到该正整数


处理数据格式

之间所有正整数的乘积。

◎案例操作

01 在“M_计次循环”模块中创 02 在“阶乘”过程中编写 VBA


数据排序技巧

建“阶乘”过程。 代码。

03 运行过程代码,查看程序运
行效果。
数据查询技巧

◎过程源代码
源文件\第 1 章\进行计次循环.accdb

编写 VBA 代码,获取求阶乘的正整数,通过计次循环求该正整数的阶
数据编辑技巧

乘,具体的 VBA 代码如下。

61
Access VBA 活用范例大辞典

'求输入正整数的阶乘
基础操作技巧

Sub 阶乘()
Dim Num1 As Double
Dim Num2 As Double
Dim i As Integer
'获取正整数
Num1 = InputBox("请输入一个正整数(不大于 170):")
控件和对象

Num2 = 1
'通过计次循环计算阶乘
For i = 1 To Num1
Num2 = Num2 * i
Next i
对象操作技巧

MsgBox Num1 & "的阶乘为:" & Num2


End Sub

◎执行过程
保存编写的 VBA 代码,然后按【F5】键运行“阶乘”过程,如图 1-47 所示。
处理数据格式

图 1-47 计算整数的阶乘
数据排序技巧

044 强制跳出循环 初 中 高
044 2003 / 2007 / 2010

强制跳出循环
◎流程语句:Exit For 语句、Exit Do 语句
数据查询技巧

如果需要在 For 循环或者 Do 循环执行时强制退出循环,可以使用 Exit


For 语句或 Exit Do 语句。使用时还可以在循环过程中设置循环结束的条件,
其具体的语法格式如下所示:
数据编辑技巧

Exit For
Exit Do

62
Chapter 01 Access 基础操作技巧

◎应用实例

基础操作技巧
素材\第 1 章\强制跳出循环.accdb

本例需要模拟连续投掷骰子的过程,程序运行时,会返回一个 1 到 6 之
间的随机数,并询问是否继续。

◎案例操作

控件和对象
01 在“M_跳出循环”模块中创 02 在“骰子”过程中编写 VBA
建“骰子”过程。 代码。

对象操作技巧
03 运行过程代码,查看程序运
行效果。

◎过程源代码
源文件\第 1 章\强制跳出循环.accdb
处理数据格式

编写 VBA 代码,获取随机数,使用消息对话框输出随机数,并询问是
否继续,根据反馈结果判断是否跳出循环,具体的 VBA 代码如下。
'通过 Exit 强制退出循环
Sub 骰子()
数据排序技巧

Dim Num As Integer


Dim Cmd As Integer
'Do 循环,取随机数,选择是否继续循环
Do
Num = Int(Rnd * 6) + 1
数据查询技巧

Cmd = MsgBox("骰子结果:" & Num & vbCrLf & vbCrLf _


& "是否继续?", vbYesNo)
If Cmd = vbNo Then
'退出循环
Exit Do
数据编辑技巧

End If
Loop
MsgBox "已跳出循环,投掷骰子结束!"
End Sub

63
Access VBA 活用范例大辞典

◎执行过程
基础操作技巧

保存编写的 VBA 代码,然后按【F5】键运行“骰子”过程,如图 1-48


所示。
控件和对象

图 1-48 模拟连续投掷骰子过程

初 中 高
045
045使用 On Error GoTo 处理错误 2003 / 2007 / 2010
对象操作技巧

使用 On Error GoTo 处理错误


◎错误处理及工程安全:On Error GoTo 语句

在 VBA 代码中,可以通过设置行标签的方式来指定特定的代码中特定
的位置,设置行标签的具体语法为:
处理数据格式

[行标签名]:
在程序执行过程中,如果希望代码运行错误后跳转至指定代码处,可以
使用 On Error GoTo 语句,其具体的语法为:
数据排序技巧

On Error GoTo[行号或者行标签]

◎应用实例
素材\第 1 章\使用 On Error GoTo 处理错误.accdb

在输入对话框中输入数据,并将输入的数据赋值给一个整数型变量,如
数据查询技巧

果输入的数据不是整数也不可以转换为整数,则会出错。本例需要通过 On
Error GoTo 语句将出错时的运行代码跳转至指定代码处。

◎案例操作
数据编辑技巧

01 在“M_错误处理”模块中创 02 在“错误跳转”过程中编写
建“错误跳转”过程。 VBA 代码。

64
Chapter 01 Access 基础操作技巧

03 运行过程代码,查看程序运

基础操作技巧
行效果。

◎过程源代码
源文件\第 1 章\使用 On Error GoTo 处理错误.accdb

控件和对象
编写 VBA 代码,获取输入数据,输出结果,输入数据不是整数或不能
够转换为整数型时,跳转至打开“请输入整数”消息对话框的代码处,具体
的 VBA 代码如下。
'错误跳转示例

对象操作技巧
Sub 错误跳转()
'出错时跳转至“行标签”标签
On Error GoTo 行标签
Dim Num As Integer
Num = InputBox("请输入数据:")
MsgBox "输入数据为:" & Num
处理数据格式

Exit Sub
'设置行标签
行标签:
MsgBox "请输入整数!"
End Sub
数据排序技巧

◎执行过程
保存编写的 VBA 代码,然后按【F5】键运行“错误跳转”过程,如图 1-49
所示。
数据查询技巧
数据编辑技巧

图 1-49 错误跳转示例

65
Access VBA 活用范例大辞典

046 获取程序的具体错误信息(1) 初 中 高
046
基础操作技巧

2003 / 2007 / 2010

获取程序的具体错误信息(1)
◎错误处理及工程安全:Err 对象、Number 属性、Description 属性

在程序执行过程中,如果希望程序在出错时,打开提示对话框返回错误
控件和对象

的编号和错误的描述,可以使用 Err 对象的 Number 属性和 Description 属性,


其具体的语法为:
Err.Number
Err.Description
对象操作技巧

◎应用实例
素材\第 1 章\获取程序的具体错误信息(1).accdb

本例需要返回在为整数型变量赋值字符串时的错误编号和错误描述。
处理数据格式

◎案例操作

01 在“M_错误信息”模块中创 02 在“错误信息”过程中编写
建“错误信息”过程。 VBA 代码。
数据排序技巧

03 运行过程代码,查看程序运
行效果。

◎过程源代码
数据查询技巧

源文件\第 1 章\获取程序的具体错误信息(1).accdb

编写 VBA 代码,获取输入数据,输出结果,输入数据不是整数或不能
够转换为整数型时,则跳转至打开“您出错了!
”消息对话框的代码处,具体
的 VBA 代码如下。
数据编辑技巧

'显示错误信息
Sub 错误信息()
'出错时跳转至“行标签”标签

66
Chapter 01 Access 基础操作技巧

On Error GoTo 行标签

基础操作技巧
Dim Num As Integer
Num = InputBox("请输入数据:")
MsgBox "输入数据为:" & Num
Exit Sub
'设置行标签
行标签:

控件和对象
'出错时输出错误描述信息
MsgBox "错误编号:" & Err.Number & vbCrLf & "错误描述:" _
& Err.Description, , "您出错了!"
End Sub

◎执行过程

对象操作技巧
保存编写的 VBA 代码,然后按【F5】键运行“错误信息”过程,如
图 1-50 所示。
处理数据格式
数据排序技巧

图 1-50 错误编号和错误描述

047 获取程序的具体错误信息(2) 初 中 高
数据查询技巧

047 2003 / 2007 / 2010

获取程序的具体错误信息(2)
◎错误处理及工程安全:Error()函数

如果想要根据错误编号获取错误描述,可以使用 Error()函数,该函数返
数据编辑技巧

回的结果相当于 Err 对象的 Description 属性,其具体语法格式如下所示:


Error([错误编号])

67
Access VBA 活用范例大辞典

如果省略错误编号,就会返回与最近一次运行时错误对应的错误描述,
基础操作技巧

所以可以通过该函数得到程序运行错误时的错误描述。

◎应用实例
素材\第 1 章\获取程序的具体错误信息(2).accdb

本例需要返回在为整数型变量赋值字符串时的错误描述。
控件和对象

◎案例操作

01 在“M_错误信息”模块中创 02 在“错误信息”过程中编写
建“错误信息”过程。 VBA 代码。
对象操作技巧

03 运行过程代码,查看程序运
行效果。
处理数据格式

◎过程源代码
源文件\第 1 章\获取程序的具体错误信息(2).accdb

编写 VBA 代码,获取输入数据,输出结果,输入数据不是整数或不能
够转换为整数型时,则跳转至打开“您出错了!
”消息对话框的代码处,具体
数据排序技巧

的 VBA 代码如下。
'显示错误信息
Sub 错误信息()
'出错时跳转至“行标签”标签
On Error GoTo 行标签
数据查询技巧

Dim Num As Integer


Num = InputBox("请输入数据:")
MsgBox "输入数据为:" & Num
Exit Sub
'设置行标签
数据编辑技巧

行标签:
'出错时输出错误编号及错误描述信息
MsgBox "错误描述:" & Error()
End Sub

68
Chapter 01 Access 基础操作技巧

◎执行过程

基础操作技巧
保存编写的 VBA 代码,然后按【F5】键运行“错误信息”过程,如图 1-51
所示。

控件和对象
对象操作技巧
图 1-51 通过 Error 函数返回错误描述

048 如何提示是否执行宏操作 初 中 高
048 2003 / 2007 / 2010
处理数据格式

如何提示是否执行宏操作
◎错误处理及工程安全:宏安全级别设置

如果想要在打开 Access 数据库文件时,询问是否执行宏操作,需要执行


“文件/选项/信任中心/信任中心设置/宏设置”命令,选中“禁用所有宏,并
数据排序技巧

发出通知”单选按钮,如图 1-52 所示。


数据查询技巧
数据编辑技巧

图 1-52 设置宏的安全级别

69
Access VBA 活用范例大辞典

设置如图 1-52 所示的宏安全级别之后,打开 Access 数据库文件,可以


基础操作技巧

得到如图 1-53 所示的安全警告。


控件和对象

图 1-53 是否执行宏操作提示
对象操作技巧

049 创建数字证书 初 中 高
049 2003 / 2007 / 2010

创建数字证书
◎错误处理及工程安全:“VBA 项目的数字证书”工具
处理数据格式

数字证书,是为了提高文件安全性使用的。使用数字证书,可以有效避
免宏病毒对文件的感染。

数字证书一般有 3 种获得方式,从商业认证授权机构获得,从内部专业
人员处获得和自己创建。
数据排序技巧

自己创建 VBA 数字证书,可以使用“Microsoft Office 工具”中的“VBA


项目的数字证书”工具创建,如图 1-54 所示。
数据查询技巧
数据编辑技巧

图 1-54 创建数字凭证 Junho

70
Chapter 01 Access 基础操作技巧

050 为数据库应用数字证书 初 中 高
050 2003 / 2007 / 2010

基础操作技巧
为数据库应用数字证书
◎错误处理及工程安全:签署证书

如果需要将已有的数字证书应用到 Access 中,可以执行“文件/保存并

控件和对象
发布/打包并签署”命令,然后根据提示操作即可。

051 保护 VBA 代码 初 中 高
051 2003 / 2007 / 2010

保护 VBA 代码

对象操作技巧
◎错误处理及工程安全:设置 VBA 工程属性

如果需要保护 VBA 代码,可以在 VBA 编辑器中执行“工具/Database”


命令,在打开对话框中的“保护”选项卡中进行密码设置(比如 123)
。设置
好密码后,重启数据库,进入 VBA 编辑器时要求输入密码,如图 1-55 所示。
处理数据格式
数据排序技巧
数据查询技巧

图 1-55 设置密码保护 VBA 代码


数据编辑技巧

71
Chapter 02
控件和对象的使用技巧

Access 中的表、查询、关系、文本框、组合框、选项按钮等
是使用 VBA 代码操作数据库时的常见对象和控件。掌握使用
VBA 代码操作这些对象或控件的技巧,是熟练使用 Access VBA
的前提条件之一。
本章将以具体的实例展示常见的控件和对象的使用技巧。

▼主要内容
◎获取控件中的数据
通过组合框名获取数据、通过列表框名获取数据、Column 属性……
◎数据库对象的引用
OpenRecordset 方法、Fields 属性、RecordsetClone 属性、OpenForm 方法……
◎数据库对象的创建与编辑
CreateRelation 方法、Name 属性、Delete 方法、CreateQueryDef 方法……

▼涉及案例
◎使用 Me 快速引用当前窗体上的控件
◎指定一个控件能否被编辑
◎获得焦点及失去焦点时字段变更颜色
◎获取多列列表框中某列的数据(1)
◎获取多列列表框中某列的数据(2)
◎创建数据表并新增字段
◎在数据表中删除指定字段
◎在数据表中设置主键
……
Chapter 02 控件和对象的使用技巧

052 向窗体添加控件 初 中 高
052

基础操作技巧
2003 / 2007 / 2010

向窗体添加控件
◎在窗体上操作控件:布局视图、设计视图

向窗体中添加控件,需要在窗体的布局视图或者设计视图中进行。进入

控件和对象
窗体的布局视图或者设计视图之后,在“窗体布局工具 设计”选项卡中选择
需要的控件,然后单击窗体的相应按钮即可。

需要注意的是,如果在选择控件之前,在“控件”组的下拉列表框中选
择“使用控件向导”选项,如图 2-1 所示,可以在插入控件之后,通过向导

对象操作技巧
插入设置控件的一些基本属性(不是所有控件都有向导对话框)

处理数据格式

图 2-1 选择“使用控件向导”选项

控件的格式和属性的调整,可以在布局视图或者设计视图模式下,直接
数据排序技巧

在窗体中调整,也可以通过属性表进行调整,按【F4】键即可打开当前窗体
的属性表,在其中可以对窗体主体及其中的控件属性进行详细的设置。

053 第一次为控件添加代码 初 中 高
053
数据查询技巧

2003 / 2007 / 2010

第一次为控件添加代码
◎在窗体上操作控件:设计视图、属性菜单、事件生成器

第一次为控件添加代码,需要在窗体的设计视图模式下进行。进入设计
数据编辑技巧

视图模式之后,可以通过控件右键菜单的“事件生成器”命令或者属性表中
相应控件“事件”选项卡下的对应事件进入 VBA 编辑器为控件添加事件过
程的代码。

73
Access VBA 活用范例大辞典

◎应用实例
基础操作技巧

素材\第 2 章\第一次为控件添加代码.accdb

本例需要通过属性菜单为“按钮”控件添加单击事件过程。

◎案例操作
控件和对象

01 将“F_控件”窗体的窗体模 02 打开属性表,单击“事件”
式切换至“设计视图”模式。 选项卡中的“单击”选项。

03 在“选择生成器”对话框中 04 添加代码,切换至窗体视图,
对象操作技巧

选择“代码生成器”选项。 单击按钮查看效果。

◎过程源代码
源文件\第 2 章\第一次为控件添加代码.accdb
处理数据格式

在自动生成的 Click 事件过程中用 MsgBox()函数输出提示信息,具体的


VBA 代码如下。
Private Sub cmd_按钮_Click()
MsgBox "您单击了按钮!"
End Sub
数据排序技巧

◎执行过程
切换窗体的视图模式至窗体视图模式,单击“按钮”按钮查看程序运行
效果,如图 2-2 所示,程序自动打开提示对话框,并显示“您单击了按钮”
的信息。
数据查询技巧
数据编辑技巧

图 2-2 单击“按钮”按钮代码运行效果

74
Chapter 02 控件和对象的使用技巧

054 在代码中对窗体控件的引用 初 中 高
054

基础操作技巧
2003 / 2007 / 2010

在代码中对窗体控件的引用
◎在窗体上操作控件:通过控件的名称(Name)引用控件

在 VBA 代码中,对窗体控件的引用是通过控件的名称属性(Name 属性)

控件和对象
来实现的。在属性表中,一般的控件都会有名称(Name)和标题(Caption)
这两个属性。

其中,标题属性是显示在控件上的内容,一般用于标识控件的用途等;
名称属性则是在 VBA 代码中用来实现对控件的引用,该名称在同类控件中

对象操作技巧
应具有唯一性,且不能够在程序中使用代码更改控件的该属性。

◎应用实例
素材\第 2 章\在代码中对窗体控件的引用.accdb

本例中通过引用窗体中的按钮控件,更改按钮的标题,记录并显示按钮
处理数据格式

被单击的次数。

◎案例操作

01 在“F_控件”窗体中添加“按 02 为 窗 体 添 加 “ cmd_ 按 钮
数据排序技巧

钮”按钮。 _Click”事件过程。

03 在 事 件 过 程 中 编 写 对 应 的 04 切换至窗体视图模式,单击
VBA 代码。 按钮查看代码运行效果。
数据查询技巧

◎过程源代码
源文件\第 2 章\在代码中对窗体控件的引用.accdb

定义静态变量,累加单击次数,更改按钮的标题(Caption)属性为被单
数据编辑技巧

击的次数,具体的 VBA 代码如下。


'引用窗体中的控件示例
Private Sub cmd_按钮_Click()

75
Access VBA 活用范例大辞典

'定义静态变量
基础操作技巧

Static n As Integer
n=n+1
'引用按钮控件,更改其标题属性为被单击的次数
cmd_按钮.Caption = "被单击" & n & "次"
End Sub

◎执行过程
控件和对象

切换窗体的视图模式至设计视图模式,连续单击其中的按钮查看程序运
行效果,如图 2-3 所示。
对象操作技巧

图 2-3 引用窗体中的按钮并更改其标题
处理数据格式

055 使用 ME 关键字快速引用当前窗体上的控件 初 中 高
055 2003 / 2007 / 2010

使用 Me 关键字快速引用当前窗体上的控件
◎在窗体上操作控件:Me 关键字
数据排序技巧

使用 Me 关键字可以实现对代码正在执行的对象的引用,比如当前的窗
体。当数据库中使用的窗体等较多时,在引用窗体中的控件的时候,就需要
使用如下所示的方式来引用控件:
[对象集名]![对象名]![控件名]
数据查询技巧

如果引用的是当前代码的控件,则可以使用 Me 关键字进行简化,其具
体的语法格式如下所示:
Me![控件名]
使用 Me 关键字还可以快速引用代码执行到的对象,然后修改或引用该
数据编辑技巧

对象的属性,比如查询和窗体的记录集(RecordSet)

76
Chapter 02 控件和对象的使用技巧

◎应用实例

基础操作技巧
素材\第 2 章\使用 Me 快速引用当前窗体上的控件.accdb

本例通过 Me 关键字实现对窗体中的控件的引用,从而在文本框这个内
输出当前窗体中按钮的名称。

◎案例操作

控件和对象
01 在“F_控件”窗体中添加“按 02 为 窗 体 添 加 “ cmd_ 按 钮
钮”按钮。 _Click”事件过程。

对象操作技巧
03 在 事 件 过 程 中 编 写 对 应 的 04 切换至窗体视图模式,单击
VBA 代码。 按钮查看代码运行效果。

◎过程源代码
源文件\第 2 章\使用 Me 快速引用当前窗体上的控件.accdb
处理数据格式

通过 Me 关键字快速引用当前窗体中的文本框和按钮,将按钮的标题显
示在文本框中,其具体的 VBA 代码如下。
'使用 Me 关键字示例
数据排序技巧

Private Sub cmd_按钮_Click()


'通过 Me 关键字快速引用当前窗体中的控件
Me!txt_按钮 = Me!cmd_按钮.Caption
End Sub

◎执行过程
数据查询技巧

切换“F_控件”窗体的视图模式至窗体视图模式,单击“按钮”按钮,
结果如图 2-4 所示。
数据编辑技巧

图 2-4 通过 Me 关键字快速引用当前窗体中的控件

77
Access VBA 活用范例大辞典

056 快速获取表、查询、窗体或报表的名称列表 初 中 高
056
基础操作技巧

2003 / 2007 / 2010

快速获取表、查询、窗体或报表的名称列表
◎在窗体上操作控件:TableDefs 对象集合、Count 方法、Name 属性

表和查询的名称列表可以分别通过 TableDefs 和 QueryDefs 对象集合来获


控件和对象

取,首先可以使用 Count 方法获取数据库中的表或查询的数量,其具体的语


法格式如下所示:
CurrentDb.TableDefs.Count
CurrentDb.QueryDefs.Count
对象操作技巧

然后使用 For 循环依次获取每个表或者查询的名称。获取表或者查询的


名称,可以使用对象集合中某个对象的 Name 属性,其具体的语法格式如下
所示:
CurrentDb.TableDefs([对象序号]).Name
CurrentDb.QueryDefs([对象序号]).Name
处理数据格式

其中,对象序号表示该对象集合中的第几个对象,其编号从 0 开始。

需要注意的是,使用罗列出的表和查询的名称可能会多于 Access 对象浏


览器中罗列出的表和查询的名称,这是因为该方法将连接表、暂时性查询也
计算在内了。
数据排序技巧

罗列窗体和报表名称的方法与罗列表和查询的方法是不相同的,需要使
用 Containers 和 Documents 对象集合。首先使用 Count 方法获取当前数据的
窗体和报表的个数,其具体的语法格式如下所示:
CurrentDb.Containers("Forms").Documents.Count
数据查询技巧

CurrentDb.Containers("Reports").Documents.Count
然后使用 For 循环获取每个窗体或者报表的名称。获取窗体或者报表的
名称可以使用 Name 属性,其具体的语法格式如下所示:
CurrentDb.Containers("Forms").Documents([对象序号]).Name
数据编辑技巧

CurrentDb.Containers("Forms").Documents([对象序号]).Name

78
Chapter 02 控件和对象的使用技巧

◎应用实例

基础操作技巧
素材\第 2 章\快速获取表、查询、窗体和报表的名称列表.accdb

在本例中,需要在“F_罗列”窗体中单击“罗列”按钮,然后在对应的
文本框中罗列出当前数据库的所有表、查询、窗体和报表,并且为其编上序
号以便浏览。

控件和对象
◎案例操作

01 在“F_罗列”窗体中插入 4 02 为 窗 体 创 建 “ cmd_ 罗 列
个文本框和“罗列”按钮。 _Click”事件过程。

对象操作技巧
03 在 事 件 过 程 中 编 写 对 应 的 04 切换至窗体视图模式,单击
VBA 代码。 按钮查看代码运行效果。

◎过程源代码
处理数据格式

源文件\第 2 章\快速获取表、查询、窗体和报表的名称列表.accdb

获取对象的数量,通过 For 循环罗列出所有的对象名称,其具体的 VBA


代码如下。
数据排序技巧

'罗列当前数据库中所有的表、查询、窗体和报表
Private Sub cmd_罗列_Click()
Dim i As Integer
'在“表”文本框中输出所有的表的名称
For i = 0 To CurrentDb.TableDefs.Count - 1
'在文本框中输入第 i 个表的名称
数据查询技巧

txt_表 = txt_表 & i + 1 & ":" & CurrentDb.TableDefs(i).Name


'换行
txt_表 = txt_表 & vbCrLf
Next i
'在“查询”文本框中输出所有查询的名称
数据编辑技巧

For i = 0 To CurrentDb.QueryDefs.Count - 1
txt_查询 = txt_查询 & i + 1 & ":" & CurrentDb.QueryDefs(i).Name
txt_查询 = txt_查询 & vbCrLf
Next i

79
Access VBA 活用范例大辞典

'在“窗体”文本框中输出所有的窗体的名称
基础操作技巧

For i = 0 To CurrentDb.Containers("forms").Documents.Count - 1
txt_窗体 = txt_窗体 & i + 1 & ":" & CurrentDb.Containers _
("forms").Documents(i).Name
txt_窗体 = txt_窗体 & vbCrLf
Next i
'在“报表”文本框中输出所有的报表的名称
控件和对象

For i = 0 To CurrentDb.Containers("Reports").Documents.Count - 1
txt_报表 = txt_报表 & i + 1 & ":" & CurrentDb.Containers _
("Reports").Documents(i).Name
txt_报表 = txt_报表 & vbCrLf
Next i
对象操作技巧

End Sub

◎执行过程
切换“F_罗列”窗体的视图模式至窗体视图模式,单击“罗列”按钮,
结果如图 2-5 所示。
处理数据格式
数据排序技巧

图 2-5 罗列窗体中的所有表、查询、窗体和报表

057 设置控件的可见性 初 中 高
数据查询技巧

057 2003 / 2007 / 2010

设置控件的可见性
◎在窗体上操作控件:Visible 属性

控件的可视属性,可以使用 Visible 属性进行设置。其具体的语法格式如


数据编辑技巧

下所示:
[控件名].Visible=[逻辑值]

80
Chapter 02 控件和对象的使用技巧

其中,当逻辑值为 True 时,控件可见;当逻辑值为 False 时,控件不可

基础操作技巧
见。因此,如果需要隐藏控件,只需将控件的可视属性设置为 False 即可。

◎应用实例
素材\第 2 章\设置控件的可见性.accdb

本例需要在通过一个按钮控制图像控件“Img_竹”的可见性,单击按钮

控件和对象
隐藏,再次单击按钮显示,再单击按钮又隐藏,如此循环。

◎案例操作

01 在“F_可见性”窗体中插入 02 为 窗 体 创 建 “ cmd_ 可 见

对象操作技巧
图像控件和“隐藏”按钮。 _Click”事件过程。

03 在 事 件 过 程 中 编 写 对 应 的 04 切换至窗体视图模式,单击
VBA 代码。 按钮查看代码运行效果。
处理数据格式

◎过程源代码
源文件\第 2 章\设置控件的可见性.accdb

定义静态变量,通过静态变量的值控制“图像”控件的可见性和按钮的
数据排序技巧

标题,其具体的 VBA 代码如下。


'设置“图像”控件的可见性
Private Sub cmd_可见_Click()
'定义静态变量,通过静态变量的奇偶控制图片的显示和隐藏
Static n As Integer
数据查询技巧

n=n+1
If n Mod 2 Then
'“图像”控件不可见,按钮为“显示”按钮
Img_竹.Visible = False
cmd_可见.Caption = "显示"
数据编辑技巧

Else
'“图像”控件可见,按钮为“隐藏”按钮
Img_竹.Visible = True
cmd_可见.Caption = "隐藏"

81
Access VBA 活用范例大辞典

End If
基础操作技巧

End Sub

◎执行过程
切换“F_可见性”窗体的视图模式至窗体视图模式,单击“隐藏”按钮,
图片隐藏,按钮变为“显示”按钮,单击“显示”按钮,窗体又变回启动时
的状态,结果如图 2-6 所示。
控件和对象
对象操作技巧

图 2-6 通过按钮控制“图像”控件的可见性
处理数据格式

提示:直接通过 Visible 属性实现本例效果


本例中,还可以通过判断 Visible 属性的值是否为 True 来设置控件的可见性,具
体的 VBA 代码如下所示( 源文件\第 2 章\设置控件的可见性 1.accdb)

数据排序技巧

'设置“图像”控件的可见性
Private Sub cmd_可见_Click()
'通过判断当前“图像”控件的可见性选择下一步执行的操作
If Img_竹.Visible = True Then
'“图像”控件不可见,按钮为“显示”按钮
数据查询技巧

Img_竹.Visible = False
cmd_可见.Caption = "显示"
Else
'“图像”控件可见,按钮为“隐藏”按钮
Img_竹.Visible = True
数据编辑技巧

cmd_可见.Caption = "隐藏"
End If
End Sub

82
Chapter 02 控件和对象的使用技巧

058 指定控件是否可以接受焦点 初 中 高
058

基础操作技巧
2003 / 2007 / 2010

指定控件是否可以接受焦点
◎在窗体上操作控件:Enabled 属性

通过控件的 Enabled 属性,可以设置控件是否可以接受焦点,当控件的

控件和对象
Enabled 属性值为 True 时可以接受焦点,为 False 时不可以接受焦点。其具体
的语法格式如下所示。
[控件名].Enabled=[逻辑值]

◎应用实例

对象操作技巧
素材\第 2 章\指定控件是否可以接受焦点.accdb

本例需要模拟一个信息录入窗口,在该窗口中,只有输入姓名之后,其
余 3 个文本框才可用,否则不可用。 处理数据格式

◎案例操作

01 在“F_焦点”窗体中插入 4 02 为“F_焦点”窗体添加“txt_
个文本框,将后面 3 个文本框 姓名_AfterUpdate”事件过程,
的“可用”属性设置为“否” 。 在事件过程中编写 VBA 代码。
数据排序技巧

03 运行程序代码,查看程序运
行效果。
数据查询技巧

◎过程源代码
源文件\第 2 章\指定控件是否可以接受焦点.accdb

创建“姓名”文本框的更新后事件过程,判断姓名文本框是否为空,设
置后 3 个文本框的 Enabled 属性,其具体的 VBA 代码如下。
数据编辑技巧

'在“姓名”文本框中设置其余 3 个文本框可否获取焦点
Private Sub txt_姓名_AfterUpdate()
'当“姓名”文本框为空时,其余 3 个文本框不可获取焦点
If IsNull(Me!txt_姓名) Then
83
Access VBA 活用范例大辞典

Me!txt_性别.Enabled = False
基础操作技巧

Me!txt_年龄.Enabled = False
Me!txt_职务.Enabled = False
'当“姓名”文本框为空时,其余 3 个文本框可以获取焦点
Else
Me!txt_性别.Enabled = True
Me!txt_年龄.Enabled = True
控件和对象

Me!txt_职务.Enabled = True
End If
End Sub

◎执行过程
对象操作技巧

保存编写的 VBA 代码,将“F_焦点”窗体的视图模式切换到窗体视图


模式,在“姓名”文本框中输入文本,按【Enter】键,不可用的 3 个文本框
变为可用,如图 2-7 所示。
处理数据格式

图 2-7 设置文本框是否可以获取焦点
数据排序技巧

059 指定一个控件能否被编辑 初 中 高
059 2003 / 2007 / 2010

指定一个控件能否被编辑
◎在窗体上操作控件:Locked 属性
数据查询技巧

通过控件的 Locked 属性可以指定一个控件是否能够被编辑,


其具体的语
法格式如下所示:
[控件名].Locked=[逻辑值]
数据编辑技巧

其中,当逻辑值为 True 时,控件被锁定,则不能够被编辑;当逻辑值为


False 时,控件没有被锁定,则可以进行编辑。

84
Chapter 02 控件和对象的使用技巧

◎应用实例

基础操作技巧
素材\第 2 章\指定一个控件能否被编辑.accdb

本例中需要对文本框中输入的参数进行某种计算,计算出来的结果输出
到第 3 个文本框中,要求计算结果不可以在文本框中直接进行修改。

◎案例操作

控件和对象
01 在“F_锁定”窗体中插入 3 02 为 窗 体 添 加 “ cmd_ 计 算
个文本框和“计算”按钮。 _Click”事件过程。

对象操作技巧
03 在 事 件 过 程 中 编 写 对 应 的 04 切换至窗体视图模式,单击
VBA 代码。 按钮查看代码运行效果。

◎过程源代码
源文件\第 2 章\指定一个控件能否被编辑.accdb
处理数据格式

将第 1 个文本框数值的两倍与第 2 个数值的 5 倍求和,并将结果保存至


第 3 个文本框中,锁定第 3 个文本框,其具体的 VBA 代码如下。
'锁定计算结果所在单元格
数据排序技巧

Private Sub cmd_计算_Click()


txt_12 = txt_1 * 2 + txt_2 * 5
txt_12.Locked = True
End Sub

◎执行过程
数据查询技巧

将“F_锁定”窗体的视图模式切换到窗体视图,输入参数,进行计算,可
以发现“计算结果”文本框中的数据能被选中,但是不能够编辑,如图 2-8 所示。
数据编辑技巧

图 2-8 锁定计算结果

85
Access VBA 活用范例大辞典

060 定位控件 初 中 高
060
基础操作技巧

2003 / 2007 / 2010

定位控件
◎在窗体上操作控件:Top 属性、Left 属性

定位窗体中的控件,是通过控件的上边距和左边距实现的,需要使用到
控件和对象

控件的 Top 和 Left 属性,其具体的语法格式如下所示:


[控件名].Top=[上边距值]
[控件名].Left=[左边距值]
其中,边距默认的单位为缇,1 厘米等于 567 缇。所以在编写代码的时
对象操作技巧

候,可以根据实际需要转换为常用的长度单位。

◎应用实例
素材\第 2 章\定位控件.accdb

本例需要在单击“F_定位”窗体中的“定位”按钮时,打开输入对话框
处理数据格式

以毫米为单位设置图像控件的上边距和左边距。

◎案例操作

01 在“F_定位”窗体中插入图 02 为 窗 体 添 加 “ cmd_ 定 位
数据排序技巧

像控件和“定位”按钮。 _Click”事件过程。

03 在 事 件 过 程 中 编 写 对 应 的 02 切换至窗体视图模式,单击
VBA 代码。 按钮设置图像边距,查看效果。
数据查询技巧

◎过程源代码
源文件\第 2 章\定位控件.accdb

通过输入对话框设置“图像”控件边距,其具体的 VBA 代码如下。


数据编辑技巧

'定位“图像”控件
Private Sub cmd_定位_Click()
Dim TopY As Double

86
Chapter 02 控件和对象的使用技巧

Dim LeftX As Double

基础操作技巧
'获取输入对话框中输入的数值
TopY = InputBox("请输入图片的上边距(单位:mm):", "上边距", 0)
:", "左边距", 0)
LeftX = InputBox("请输入图片的左边距(单位:mm)
'设置“图像”控件的上边距和左边距
Img_竹.Top = TopY * 56.7
Img_竹.Left = LeftX * 56.7

控件和对象
End Sub

◎执行过程
将“F_定位”窗体的视图模式切换到窗体视图,单击“定位”按钮,设
置上边距和左边距,如图 2-9 所示。

对象操作技巧
处理数据格式
数据排序技巧

图 2-9 定位“图像”控件
数据查询技巧

061 设置控件大小 初 中 高
061 2003 / 2007 / 2010

设置控件大小
◎在窗体上操作控件:Height 属性、Width 属性、ImageHeight 属性
数据编辑技巧

调整控件的大小,可以使用控件的 Height 属性和 Width 属性,其具体的


语法格式如下所示:
[控件名].Height=[高度]
87
Access VBA 活用范例大辞典

[控件名].Width=[宽度]
基础操作技巧

其中,高度值和宽度值的单位为缇(Twip)。直接设置控件的大小时,
高度值和宽度值设置为具体的数值即可。

使用控件的 Height 属性和 Width 属性不仅可以设置控件的高度和宽度,


还可以获取控件的高度和宽度。

若要在当前控件的基础上,对控件的大小进行缩放,可以使用 Heitht 和
控件和对象

Width 属性获取当前控件的高度和宽度,在将其乘以缩放比例并重新设置到
控件的高度和宽度属性中,此时就需要使用 ImageHeight 属性和 ImageWidth
属性,其具体的语法格式如下所示:
对象操作技巧

[控件名].Height=[控件名].Height
[控件名].Width=[控件名].Width*[宽度]
也可以将其他控件或者对象的大小设置为控件的大小,其方法与一般的
设置相同。比如,为了使“图像”控件与其中的图片紧密集合,可以将“图
像”控件的大小设置为图片的大小,其具体的语法格式如下所示:
处理数据格式

[图像控件名].Height=[图像控件名].ImageHeight
[图像控件名].Width=[图像控件名].ImageWidth

◎应用实例
数据排序技巧

素材\第 2 章\设置控件大小.accdb

本例需要在单击“F_控件大小”窗体中的“调整大小”按钮后,可以选
择指定高度和宽度调整图片大小,或者按照指定比例在图片原始大小上进行
调整,并且调整过程中随时可以终止图片大小的调整。
数据查询技巧

◎案例操作

01 在“F_控件大小”窗体插入“图 02 为 窗 体 添 加 “ cmd_ 大 小
像”控件和“调整大小”按钮。 _Click”事件过程。
数据编辑技巧

03 在 事 件 过 程 中 编 写 对 应 的 04 切换至窗体视图模式,单击
VBA 代码。 按钮设置图像边距,查看效果。

88
Chapter 02 控件和对象的使用技巧

◎过程源代码

基础操作技巧
源文件\第 2 章\设置控件大小.accdb

选择调整图片大小的方式,实现按照指定大小或比例调整图片大小,其
具体的 VBA 代码如下。
'设置“图像”控件大小

控件和对象
Private Sub cmd_大小_Click()
On Error GoTo 结束
Dim HeightY As Double
Dim WidthX As Double
Dim PerC As Single

对象操作技巧
Dim CmdC As Integer
CmdC = MsgBox("指定大小请单击“是”按钮,按比例缩放请单击“否”按
钮",vbYesNoCancel)
If CmdC = vbYes Then
'设置图片缩放模式为拉伸
Img_竹.SizeMode = acOLESizeStretch
处理数据格式

'获取设置的“图像”控件的高度和宽度
HeightY = InputBox("请输入图片的高度(单位:mm) :", _
"高度", Int(Img_竹.ImageHeight / 56.7))
WidthX = InputBox("请输入图片的宽度(单位:mm) :", _
"宽度", Int(Img_竹.ImageWidth / 56.7))
数据排序技巧

'设置“图像”控件的高度和宽度
Img_竹.Height = HeightY * 56.7
Img_竹.Width = WidthX * 56.7
ElseIf CmdC = vbNo Then
'获取设置的“图像”控件的高度和宽度
PerC = InputBox("请输入图片缩放比例", "缩放", 1)
数据查询技巧

'设置图片缩放模式为缩放
Img_竹.SizeMode = acOLESizeZoom
'在图片大小的基础上进行缩放
Img_竹.Height = Img_竹.ImageHeight * PerC
Img_竹.Width = Img_竹.ImageWidth * PerC
数据编辑技巧

Else
MsgBox "您取消了调整图片的大小!": End If
结束:
End Sub

89
Access VBA 活用范例大辞典

◎执行过程
基础操作技巧

将“F_控件大小”窗体的视图模式切换至窗体视图,单击“调整大小”
按钮,根据提示操作即可调整图片大小,如图 2-10 和图 2-11 所示。
控件和对象
对象操作技巧
处理数据格式

图 2-10 单击“否”按钮按比例缩放
数据排序技巧
数据查询技巧
数据编辑技巧

图 2-11 单击“是”按钮直接设置空间的大小

90
Chapter 02 控件和对象的使用技巧

062 设置控件边框 初 中 高
062

基础操作技巧
2003 / 2007 / 2010

设置控件边框
◎在窗体上操作控件:BorderStyle 属性、BorderWidth 属性

通过控件的 BorderStyle 属性、BorderWidth 属性和 BorderColor 属性,可

控件和对象
以对控件边框的线性、宽度和颜色进行设置,其具体的语法格式如下所示:
[控件名].BorderStyle=[线条常数]
[控件名].BorderWidth=[宽度常数]
[控件名].BorderColor=[颜色]

对象操作技巧
其中,线条常数和宽度常数均为系统内置的常数,值为 0~8 的整数。颜
色为系统允许使用的颜色设置方式,比如使用数字表示颜色,或者使用 RGB()
函数表示颜色等。

◎应用实例
处理数据格式

素材\第 2 章\设置控件边框.accdb

本例需要在单击“边框”按钮后,随机为“图像”控件设置一个边框,
其中的线条、颜色和宽度都是使用随机函数 Rnd()设置的。
数据排序技巧

◎案例操作

01 在“F_边框”窗体插入图像 02 为 窗 体 添 加 “ cmd_ 边 框
控件和“边框”按钮。 _Click”事件过程。
数据查询技巧

03 在 事 件 过 程 中 编 写 对 应 的 04 切换至窗体视图模式,单击
VBA 代码。 按钮设置图像边距,查看效果。

◎过程源代码
数据编辑技巧

源文件\第 2 章\设置控件边框.accdb

将“图像”控件的边框线条、颜色和宽度均设置为允许范围内的随机常
量,其具体的 VBA 代码如下。

91
Access VBA 活用范例大辞典

'为“图像”控件随机设置边框
基础操作技巧

Private Sub cmd_边框_Click()


'设置随机的边框线条
Img_梅.BorderStyle = Int(Rnd() * 8)
'设置随机的边框颜色
Img_梅.BorderColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255)
'设置随机的边框宽度
控件和对象

Img_梅.BorderWidth = Int(Rnd * 8)
End Sub

◎执行过程
将“F_边框”窗体的视图模式切换至窗体视图,单击“边框”按钮,即
对象操作技巧

可为“图像”控件添加上随机的边框,如图 2-12 所示。


处理数据格式
数据排序技巧

图 2-12 为“图像”控件添加随机边框

063 指定控件是否透明 初 中 高
063
数据查询技巧

2003 / 2007 / 2010

指定控件是否透明
◎在窗体上操作控件:BorderStyle 属性、BorderWidth 属性

通过控件的 BackStyle 属性,可以设置控件是否透明,其具体的语法格


数据编辑技巧

式如下所示:
[控件名].BackStyle=[逻辑值]
其中,当 BackStyle 属性值为 True 时,控件不透明;当 BackStyle 属性

92
Chapter 02 控件和对象的使用技巧

值为 False 时,控件透明。

基础操作技巧
◎应用实例
素材\第 2 章\指定控件是否透明.accdb

本例需要在单击“F_透明”窗体中的标签后,标签的透明状态发生变化。

控件和对象
◎案例操作

01 在“F_透明”窗体插入标签, 02 为 窗 体 添 加 “ lab_ 透 明
为标签设置背景色。 _Click”事件过程。

对象操作技巧
03 在 事 件 过 程 中 编 写 对 应 的 04 切换至窗体视图模式,单击
VBA 代码。 标签,查看效果。

◎过程源代码
处理数据格式

源文件\第 2 章\指定控件是否透明.accdb

判断标签透明效果,更改标签透明效果,其具体的 VBA 代码如下。


'单击标签时,标签改变透明状态
Private Sub lab_透明_Click()
数据排序技巧

'透明时变为不透明
If lab_透明.BackStyle = 0 Then
lab_透明.BackStyle = 1
'不透明时变为透明
Else
数据查询技巧

lab_透明.BackStyle = 0
End If
End Sub

◎执行过程
将“F_标签”窗体的视图模式切换至窗体视图,单击标签,即可改变标
数据编辑技巧

签的透明效果,如图 2-13 所示。

93
Access VBA 活用范例大辞典
基础操作技巧
控件和对象

图 2-13 单击标签可改变标签的透明效果
对象操作技巧

064 设置控件中的字体的属性 初 中 高
064 2003 / 2007 / 2010

设置控件中的字体的属性
◎在窗体上操作控件:BorderStyle 属性、BorderWidth 属性
处理数据格式

在控件的属性列表中,以“Font”开始的属性均是字体属性,通过这些
属性可以设置控件中显示出来的文字的格式,主要包括字体的名称、粗细、
颜色、大小和斜体等,其具体的语法格式如下所示:
[控件名].[字体属性]=[属性值]
数据排序技巧

◎应用实例
素材\第 2 章\设置控件中的字体的属性.accdb

本例中,需要在加载“F_字体”窗体时,为“F_字体”窗体中标签中的
文字设置字体属性。
数据查询技巧

◎案例操作

01 为“F_字体”窗体添加“Form 02 在 事 件 过 程 中 编 写 对 应 的
_Load”事件过程。 VBA 代码。
数据编辑技巧

03 切换至窗体视图模式,查看
程序运行效果。

94
Chapter 02 控件和对象的使用技巧

◎过程源代码

基础操作技巧
源文件\第 2 章\设置控件中的字体的属性.accdb

设置窗体中标签的字体格式,其具体的 VBA 代码如下。


'在窗体加载时,设置窗体中标签的文字字体
Private Sub Form_Load()

控件和对象
Me.lab_透明.FontName = "汉仪柏青体繁"
Me.lab_透明.FontWeight = 600
Me.lab_透明.FontSize = 36
Me.lab_透明.FontItalic = True
End Sub

对象操作技巧
◎执行过程
将“F_字体”窗体的视图模式切换至窗体视图,窗体中的标签文本格式
自动改变,如图 2-14 所示。
处理数据格式
数据排序技巧

图 2-14 加载窗体时设置的文字效果

065 使标签具有闪烁效果 初 中 高
065 2003 / 2007 / 2010
数据查询技巧

使标签具有闪烁效果
◎在窗体上操作控件:TimerInterval 属性、DblClick 事件

标签的闪烁效果,可以在窗体的计时器触发事件中进行设置。使用计时
器触发事件,首先需要将 TimerInterval 属性设置为正数,然后在窗体的
数据编辑技巧

Form_Timer 事件中设置每隔 TimerInterval 属性值执行操作。TimerInterval 属


性值的单位为 s/1000。

95
Access VBA 活用范例大辞典

◎应用实例
基础操作技巧

素材\第 2 章\使标签具有闪烁效果.accdb

本例中,需要在双击标签后,标签进行闪烁,再次双击后,闪烁停止。

◎案例操作
控件和对象

01 为“F_停电通知”窗体添加 02 为 窗 体 添 加 “ lab_ 闪 烁
“Form_Timer”事件过程。 _DblClick”事件过程。

03 切换至窗体视图模式,双击
对象操作技巧

标签,查看程序运行效果。

◎过程源代码
源文件\第 2 章\使标签具有闪烁效果.accdb
处理数据格式

设置计时器出发时执行的操作和标签被双击时执行的操作,其具体的
VBA 代码如下。
'计时器触发事件,标签闪烁,字体颜色更改
Private Sub Form_Timer ()
Me.lab_闪烁.Visible = Not Me.lab_闪烁.Visible
数据排序技巧

Me.lab_闪烁.ForeColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255)


End Sub

'双击标签时,更改计时器间隔属性,从而控制计时器触发事件的执行与否
Private Sub lab_闪烁_DblClick(Cancel As Integer)
数据查询技巧

If Me.TimerInterval Then
Me.TimerInterval = 0
Else
Me.TimerInterval = 500
End If
数据编辑技巧

End Sub

◎执行过程
将“F_停电通知”窗体的视图模式切换至窗体视图,双击标签,标签开

96
Chapter 02 控件和对象的使用技巧

始闪烁,再次双击,标签停止闪烁,同时,每闪烁一次,标签更改一次字体

基础操作技巧
颜色,图 2-15 所示为标签某次闪烁时的效果。

控件和对象
对象操作技巧
图 2-15 标签某次闪烁时的效果

066 获得焦点及失去焦点时字段变更颜色 初 中 高
067 2003 / 2007 / 2010

获得焦点及失去焦点时字段变更颜色
处理数据格式

◎在窗体上操作控件:TimerInterval 属性、DblClick 事件

控件在获得焦点或者失去焦点时执行的操作,需要将该操作设置到控件
的 GotFocus 事件过程或者 LostFocus 事件过程中,其具体的语法格式为:
数据排序技巧

Private Sub t[控件名]_GotFocus()


[获得焦点时执行代码]
End Sub
Private Sub [控件名]_LostFocus()
数据查询技巧

[失去焦点时执行代码]
End Sub
一般情况下,窗体中只能够有一个控件获得焦点,其余的控件均处于失
去焦点的状态,所以控件获得或失去焦点的事件在一定程度上可以使用其中
一个替代另外一个。
数据编辑技巧

97
Access VBA 活用范例大辞典

◎应用实例
基础操作技巧

素材\第 2 章\获得焦点及失去焦点时字段变更颜色.accdb

本例中,窗体中有两个文本框,当某个文本框获得焦点时,其中的文字
以红色 22 磅字体显示,另一个文本框中的字以蓝色 11 磅字体显示。

◎案例操作
控件和对象

01 为“F_焦点”窗体添加“txt_ 02 为窗体添加“txt_焦点 1_
焦点 1_GotFocus”事件过程。 LostFocus”事件过程。
对象操作技巧

03 切换至窗体视图模式,改变
鼠标光标位置,查看运行效果。

◎过程源代码
源文件\第 2 章\获得焦点及失去焦点时字段变更颜色.accdb
处理数据格式

设置文本框 1 获得焦点和失去焦点时执行的操作,其具体的 VBA 代码


如下。
'第一个文本框获取焦点时执行操作
数据排序技巧

Private Sub txt_焦点 1_GotFocus()


'红色 22 磅字体显示文本框 1 的文字
Me.txt_焦点 1.FontSize = 22
Me.txt_焦点 1.ForeColor = vbRed
'蓝色 11 磅字体显示文本框 2 的文字
Me.txt_焦点 2.FontSize = 11
数据查询技巧

Me.txt_焦点 2.ForeColor = vbBlue


End Sub
'第一个文本框失去焦点时执行的操作
Private Sub txt_焦点 1_LostFocus()
'红色 22 磅字体显示文本框 2 的文字
数据编辑技巧

Me.txt_焦点 2.FontSize = 22
Me.txt_焦点 2.ForeColor = vbRed
'蓝色 11 磅字体显示文本框 1 的文字
Me.txt_焦点 1.FontSize = 11

98
Chapter 02 控件和对象的使用技巧

Me.txt_焦点 1.ForeColor = vbBlue

基础操作技巧
End Sub

◎执行过程
将“F_焦点”窗体的视图模式切换至窗体视图,分别将焦点置于文本框 1
和文本框 2 中,获得焦点的文本框字体变大变红,失去焦点的文本框字体变
小变蓝,如图 2-16 所示。

图 2-16 获取焦点和失去焦点时的效果 控件和对象


对象操作技巧
处理数据格式

067 获取文本框中的数据 初 中 高
067 2003 / 2007 / 2010

获取文本框中的数据
◎获取控件的数据:通过文本框名称获取数据
数据排序技巧

在 VBA 代码中,使用文本框名称可以直接获取文本框中的数据。

◎应用实例
素材\第 2 章\获取文本框中的数据.accdb
数据查询技巧

本例中,需要使用消息对话框返回文本框中的数据。

◎案例操作

01 在“F_文本框”窗体中插入 02 为窗体添加“cmd_文本数据
数据编辑技巧

文本框和“反馈”按钮。 _Click”事件过程。

99
Access VBA 活用范例大辞典

03 切换至窗体视图模式,单击
基础操作技巧

按钮,查看程序运行效果。

◎过程源代码
源文件\第 2 章\获取文本框中的数据.accdb
控件和对象

通过消息对话框返回使用文本框名称引用的文本框中的数据,其具体的
VBA 代码如下。
'通过消息对话框返回文本框中的数据
Private Sub cmd_文本数据_Click()
对象操作技巧

'通过文本框名称直接引用文本框中的数据
MsgBox "文本框中的数据为:" & vbCrLf & txt_文本
End Sub

◎执行过程
处理数据格式

将“F_文本框”窗体的视图模式切换至窗体视图,在文本框中输入数据,
单击“反馈”按钮,结果如图 2-17 所示。
数据排序技巧

图 2-17 反馈文本框中输入的数据
数据查询技巧

068 获取组合框中的数据 初 中 高
068 2003 / 2007 / 2010

获取组合框中的数据
◎获取控件的数据:通过组合框名称获取数据
数据编辑技巧

在 VBA 代码中,获取组合框中的选择的选项内容与获取文本框中的数
据的方法相同,也是通过控件的名称来引用的。

100
Chapter 02 控件和对象的使用技巧

◎应用实例

基础操作技巧
素材\第 2 章\获取组合框中的数据.accdb

本例中,需要使用消息对话框返回组合框中的数据。

◎案例操作

控件和对象
01 在“F_组合框”窗体中插入 02 为 窗 体 添 加 “ cmd_ 组 合
组合框和“反馈”按钮。 _Click”事件过程。

03 切换至窗体视图模式,单击

对象操作技巧
按钮,查看程序运行效果。

◎过程源代码
源文件\第 2 章\获取组合框中的数据.accdb
处理数据格式

使用消息对话框返回组合框中选择的选项,其具体的 VBA 代码如下。


'通过消息对话框返回组合框中的数据
Private Sub cmd_组合_Click()
'通过组合框名称直接引用组合框中的数据
MsgBox "组合框中的数据为:" & vbCrLf & cmb_数据
数据排序技巧

End Sub

◎执行过程
将“F_组合框”窗体的视图模式切换至窗体视图,在组合框中选择选项,
单击“反馈”按钮,结果如图 2-18 所示。
数据查询技巧
数据编辑技巧

图 2-18 反馈组合框中选择的选项

101
Access VBA 活用范例大辞典

069 获取列表框中的数据 初 中 高
069
基础操作技巧

2003 / 2007 / 2010

获取列表框中的数据
◎获取控件的数据:通过列表框名称获取数据

在 VBA 代码中,可以通过列表框的名称获取当前选择列表框中的选项。
控件和对象

◎应用实例
素材\第 2 章\获取列表框中的数据.accdb

本例中,需要使用消息对话框返回列表框当前选择的选项。
对象操作技巧

◎案例操作

01 在“F_列表框”窗体中插入 02 为 窗 体 添 加 “ cmd_ 列 表
列表框和“反馈”按钮。 _Click”事件过程。
处理数据格式

03 切换至窗体视图模式,单击
按钮,查看程序运行效果。

◎过程源代码
数据排序技巧

源文件\第 2 章\获取列表框中的数据.accdb

使用消息对话框返回列表框中选择的选项,其具体的 VBA 代码如下。


'通过消息对话框返回列表框中的数据
Private Sub cmd_列表_Click()
数据查询技巧

'通过列表框名称直接引用列表框中的数据
MsgBox "列表框中的数据为:" & vbCrLf & lst_数据
End Sub

◎执行过程
数据编辑技巧

将“F_列表框”窗体的视图模式切换至窗体视图,在列表框中选择选项,
单击“反馈”按钮,结果如图 2-19 所示。

102
Chapter 02 控件和对象的使用技巧

基础操作技巧
图 2-19 反馈列表框中选择的选项

控件和对象
070 获取多列列表框某列中的数据(1) 初 中 高
070 2003 / 2007 / 2010

获取多列列表框某列中的数据(1)
◎获取控件的数据:Column 属性

对象操作技巧
在 VBA 代码中,如果列表框中的数据为多列,则使用列表框名称只能
够实现对其中的数据源主键或者第一列的数据进行引用。

如果需要对列表框某一列中选择的选项进行引用,需要使用列表框的
处理数据格式

Column 属性,其具体的语法格式为:
[列表框名].Column([列数])

◎应用实例
素材\第 2 章\获取多列列表框中某列的数据(1).accdb
数据排序技巧

本例中,需要引用多列列表框中某列选项的值,并以消息对话框的形式
返回结果。

◎案例操作
数据查询技巧

01 在“F_列表框”窗体中插入 02 为 窗 体 添 加 “ cmd_ 列 表
多列列表框和“反馈”按钮。 _Click”事件过程。

03 切换至窗体视图模式,单击
数据编辑技巧

按钮,查看程序运行效果。

103
Access VBA 活用范例大辞典

◎过程源代码
基础操作技巧

源文件\第 2 章\获取多列列表框某列中的数据(1).accdb

使用消息对话框返回多列列表框中某列选项的值,其具体的 VBA 代码
如下。
'引用多列列表框某列中的数据
控件和对象

Private Sub cmd_列表_Click()


'通过 Column 属性引用某列的值
MsgBox lst_员工.Column(1) & "所在部门为:" & lst_员工.Column(3)
End Sub

◎执行过程
对象操作技巧

将“F_列表框”窗体的视图模式切换至窗体视图,在列表框中选择选项,
单击“反馈”按钮,结果如图 2-20 所示。
处理数据格式

图 2-20 获取多列列表框某列中的数据
数据排序技巧

071 获取多列列表框某列中的数据(2) 初 中 高
071 2003 / 2007 / 2010

获取多列列表框某列中的数据(2)
◎获取控件的数据:Column 属性
数据查询技巧

在 VBA 代码中,如果需要引用多列列表框中指定位置的数据,可以通
过在列表框中的 Column 属性中设置所引用数据所在的行和列,其具体的语
法格式如下所示:
数据编辑技巧

[列表框名].Column([列数],[行数])
需要特别注意的是,Column 属性中计算列数和行数不是从 1 开始的,而
是从 0 开始的。如果列表框的数据源为表或者查询,且隐藏了主键,主键会

104
Chapter 02 控件和对象的使用技巧

占用起始的列序号,比如隐藏一个主键,则列表框中的数据列编号从 1 开始。

基础操作技巧
Column 属性的两个参数中,第 1 个参数表示列数,第 2 个参数表示行数,
这与一般需要使用行数和列数为参数的属性、方法和函数中的行数在前、列
数在后是不相同的。

◎应用实例

控件和对象
素材\第 2 章\获取多列列表框某列中的数据(2).accdb

本例中,需要引用列表框第 2 行第 1 列和第 3 列的数据,并以消息对话


框的形式返回。

对象操作技巧
◎案例操作

01 在“F_列表框”窗体中插入 02 为 窗 体 添 加 “ cmd_ 列 表
多列列表框和“反馈”按钮。 _Click”事件过程。 处理数据格式

03 切换至窗体视图模式,单击
按钮,查看程序运行效果。

◎过程源代码
数据排序技巧

源文件\第 2 章\获取多列列表框中某列的数据(2).accdb

使用消息对话框返回列表框第 2 行第 1 列和第 3 列的数据,


其具体的 VBA
代码如下。
'引用多列列表框某列中的数据
数据查询技巧

Private Sub cmd_列表_Click()


'通过 Column 属性引用第 2 行第 1 列和第 2 行第 3 列的数据
MsgBox lst_员工.Column(1, 1) & "所在部门为:" & lst_员工.Column(3, 1)
End Sub

◎执行过程
数据编辑技巧

将“F_列表框”窗体的视图模式切换至窗体视图,单击“反馈”按钮,
如图 2-21 所示。

105
Access VBA 活用范例大辞典
基础操作技巧

图 2-21 获取多列列表框某列中的数据
控件和对象

072 获取选项控件中的数据 初 中 高
072 2003 / 2007 / 2010

获取选项控件中的数据
◎获取控件的数据:通过选项组值获取单选按钮标签名称
对象操作技巧

与文本框、列表框和组合框这 3 个简单的控件不同,选项控件的使用方
法要复杂许多。

首先,选项控件由单选按钮和标签两部分组成;其次,选项控件需要分
处理数据格式

组使用,否则可能出现单选按钮可复选等情况;再次,每个单选按钮需要赋
予整数值;最后,选项控件一般都需要结合 Select…Case 语句等条件判断语
句使用。

为窗体中添加选项控件,
最好通过设计模式下为窗体添加选项组来实现。
数据排序技巧

选项组的值即为所选中的单选按钮的值。

◎应用实例
素材\第 2 章\获取选项控件的数据.accdb

本例中,需要在选项组中选中某个选项后,单击“反馈”按钮,可以返
数据查询技巧

回选中的选项按钮的标签的名称。

◎案例操作

01 在“F_选项控件”窗体中插 02 为 窗 体 添 加 “ cmd_ 部 门
数据编辑技巧

入选项组和“反馈”按钮。 _Click”事件过程。

106
Chapter 02 控件和对象的使用技巧

03 切换至窗体视图模式,单击

基础操作技巧
按钮,查看程序运行效果。

◎过程源代码
源文件\第 2 章\获取选项控件的数据.accdb

控件和对象
根据“部门”选项组的值,返回选中单选按钮的标签的名称,其具体的
VBA 代码如下。
'返回选项控件的标签的名称
Private Sub cmd_部门_Click()

对象操作技巧
Dim Str As String
'根据选项组的值,返回选项控件标签的名称
Select Case Frm_部门
Case 1: Str = lab1.Caption
Case 2: Str = lab2.Caption
处理数据格式

Case 3: Str = lab3.Caption


Case 4: Str = lab4.Caption
End Select
'输出选中的单选按钮的标签
MsgBox "您选择部门为:" & Str
End Sub
数据排序技巧

◎执行过程
将“F_选项控件”窗体的视图模式切换至窗体视图,选中某个单选按钮,
单击“反馈”按钮,结果如图 2-22 所示。
数据查询技巧
数据编辑技巧

图 2-22 获取选项控件的标签的名称

107
Access VBA 活用范例大辞典

073 引用当前数据库 初 中 高
073
基础操作技巧

2003 / 2007 / 2010

引用当前数据库
◎数据库对象的引用:Set 语句、CurrentDb 方法、Name 属性

DAO 是一个数据库访问接口,通过它可以访问数据库。在 Access 2010


控件和对象

中,
如果要使用 DAO,
首先需要引用支持 DAO 方法的支持库,
比如“Microsoft
Office 14.0 Access database engine Objiect Library”支持库或者“Microsoft Dao
3.6 Objiect Library”支持库,然后才能够使用 DAO 方法访问数据库。

引用支持库的方法为,进入 VBA 编辑器,执行“工具/引用”命令,然


对象操作技巧

后选中所需的支持库名称前面的复选框,单击“确定”按钮即可。
处理数据格式
数据排序技巧

图 2-23 获取当期数据库的路径

引用了支持 DAO 方法的支持库之后,就可以使用 DAO 方法访问数据库


了。比如,访问当前的数据库,首先需要定义一个 DAO 数据库对象变量,
然后使用 Set 语句和 CurrentDb 方法将其赋值为当前的数据库,其具体的语
数据查询技巧

法格式为:
Dim [变量名] As DAO.Database
Set [变量名] = CurrentDb()
获取了当前的数据库之后,
就可以获取其中的各种数据和进行各种设置。
数据编辑技巧

比如,需要获取数据库的完整路径,可以使用数据库对象的 Name 属性,其


具体的语法格式为:
[数据库变量名].Name

108
Chapter 02 控件和对象的使用技巧

在使用完数据库对象变量后,需要关闭数据库并释放数据库变量,其具

基础操作技巧
体的语法格式为:
[变量名].Close
Set [变量名]=Nothing

◎应用实例

控件和对象
素材\第 2 章\引用当前数据库.accdb

本例中,需要使用 DAO 方法引用当前数据库,并获取其具体的路径。

◎案例操作

对象操作技巧
01 在“F_数据库信息”窗体中 02 为窗体添加“cmd_ 数据库
插入“当前数据库”按钮。 _Click”事件过程。

03 切换至窗体视图模式,单击
处理数据格式

按钮,查看程序运行效果。

◎过程源代码
源文件\第 2 章\引用当前数据库.accdb
数据排序技巧

定义 DAO 数据库对象,获取当前数据库,输出当前数据库路径,关闭
数据库,释放变量,其具体的 VBA 代码如下。
'获取当前数据库的路径
Private Sub cmd_数据库_Click()
数据查询技巧

'定义 DAO 数据库对象变量


Dim db As DAO.Database
'将当前数据库赋值给变量
Set db = CurrentDb()
'输出当前数据库的路径
MsgBox db.Name
数据编辑技巧

'关闭数据库,释放数据库对象变量
db.Close: Set db = Nothing
End Sub

109
Access VBA 活用范例大辞典

◎执行过程
基础操作技巧

将“F_数据库信息”窗体的视图模式切换至窗体视图,单击“当前数据
库”按钮,结果如图 2-24 所示。
控件和对象

图 2-24 获取当期数据库的路径

074 引用指定路径的数据库 初 中 高
074 2003 / 2007 / 2010
对象操作技巧

引用指定路径的数据库
◎数据库对象的引用:OpenDatabase 方法、Containers 属性

通过 DAO 方法中的 OpenDatabase 可以打开指定位置的数据库,该方法


实际上并不在 Access 窗口中打开第二个数据库,而是返回一个表示第二个数
处理数据格式

据库的 Database 变量,其具体的语法格式为:


OpenDatabase([打开文件完整路径])
如果需要获取数据库中的窗体或者报表,需要使用数据库对象的
Containers 属性,其具体的语法格式为:
数据排序技巧

Containers([容器类型])
其中,窗体的容器类型为 Forms,报表的容器类型为 Reports。

◎应用实例
数据查询技巧

素材\第 2 章\引用指定路径的数据库\

本例中,需要使用 DAO 方法打开 D 盘的数据库“示例.accdb”


,然后输
出该数据库中包含的窗体个数。

◎案例操作
数据编辑技巧

01 在“F_数据库信息”窗体中 02 为窗体添加“cmd_ 数据库


插入“数据库”按钮。 _Click”事件过程。

110
Chapter 02 控件和对象的使用技巧

03 切换至窗体视图模式,单击

基础操作技巧
按钮,查看程序运行效果。

◎过程源代码
源文件\第 2 章\引用指定路径的数据库\

控件和对象
定义 DAO 数据库对象,获取指定位置数据库,输出数据库的名称及其
包含的窗体的个数,关闭数据库,释放变量,其具体的 VBA 代码如下。
'获取当前数据库的路径
Private Sub cmd_数据库_Click()

对象操作技巧
On Error GoTo 没有文件
'定义 DAO 数据库对象变量
Dim db As DAO.Database
'将打开的数据库赋值给变量
Set db = OpenDatabase("D:/示例.accdb")
处理数据格式

'输出打开的数据库的路径及其包含窗体个数
MsgBox db.Name & " 包含窗体个数为:" & db.Containers _
("Forms").Documents.Count
'关闭数据库,释放数据库对象变量
db.Close: Set db = Nothing
If 0 Then
数据排序技巧

没有文件:
MsgBox "指定文件不存在!"
End If
End Sub

◎执行过程
数据查询技巧

将“F_数据库信息”窗体的视图模式切换至窗体视图,单击“数据库”
按钮,结果如图 2-25 所示。
数据编辑技巧

图 2-25 获取指定位置数据库的路径和窗体数量

111
Access VBA 活用范例大辞典

075 引用数据库中的表 初 中 高
075
基础操作技巧

2003 / 2007 / 2010

引用数据库中的表
◎数据库对象的引用:OpenRecordset 方法、Fields 属性

通过 DAO 方法中的 OpenRecordset 方法,可以获得数据库中的表或者查


控件和对象

询中的记录集,其具体的语法格式为:
[数据库对象].OpenRecordset([表或查询名],[打开方式])
其中,获取表的记录集的打开方式为 dbOpenTable。

如果需要获取记录集中的字段,可以记录集的使用 Fields 属性,其具体


对象操作技巧

的语法格式为:
[记录集].Fields([字段序号])
其中,字段序号表示的是记录集中的第几个字段,其起始值为 0。

◎应用实例
处理数据格式

素材\第 2 章\引用数据库中的指定表.accdb

本例中,需要获取当前数据库中“T_员工档案”表的字段列表。

◎案例操作
数据排序技巧

01 在“F_表”窗体中插入“表 02 为窗体添加“cmd_表_Click”
的字段列表”按钮。 事件过程。

03 切换至窗体视图模式,单击
数据查询技巧

按钮,查看程序运行效果。

◎过程源代码
源文件\第 2 章\引用数据库中的指定表.accdb
数据编辑技巧

定义 DAO 数据库对象,获取当前数据库中“T_员工档案”表的记录集
中的字段名,并输出字段列表,其具体的 VBA 代码如下。

112
Chapter 02 控件和对象的使用技巧

'获取当前数据库指定表的字段列表

基础操作技巧
Private Sub cmd_表_Click()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim n As Integer
Dim StrName As String
'引用当前数据库

控件和对象
Set db = CurrentDb()
'引用数据库中的指定表
Set rs = db.OpenRecordset("T_员工档案", dbOpenTable)
'获取所有的字段名
For n = 1 To rs.Fields.Count

对象操作技巧
StrName = StrName + vbCrLf + rs.Fields(n - 1).Name
Next n
'输出字段列表
MsgBox rs.Name & " 的字段列表:" & StrName, , "字段列表"
End Sub 处理数据格式

◎执行过程
将“F_表”窗体的视图模式切换至窗体视图,单击“表的字段列表”按
钮,结果如图 2-26 所示。
数据排序技巧
数据查询技巧

图 2-26 获取“T_员工档案”表的字段列表

076 通过编写 SQL 来引用指定记录集 初 中 高


076 2003 / 2007 / 2010

通过编写 SQL 来引用指定记录集


数据编辑技巧

◎数据库对象的引用:OpenRecordset 方法、MoveNext 方法

在数据库中,使用 SQL 语句可以十分方便地操作数据库中的数据,在

113
Access VBA 活用范例大辞典

Access VBA 中,也可以使用 SQL 语句来实现一些对数据库中数据的操作,


基础操作技巧

比如使用 Select…From 语句获取记录的某些字段等。

如果在 DAO 中打开使用 SQL 选择的数据作为记录集,需要使用动态集


(Dynaset)的方式打开,其具体的语法格式为:
[数据库].OpenRecordset([SQL 语句],dbOpenDynaset)
在 DAO 引用的记录集中进行跳转,需要使用记录集以“Move”打头的
控件和对象

方法,比如跳转到下一条记录,可以使用 MoveNext 方法,其具体的语法格


式为:
[记录集].MoveNext
对象操作技巧

在跳转时,
还需要判断是否跳出记录集的第一条记录或者最后一条记录,
这需要使用记录集的 BOF 属性和 EOF 属性。

比如跳转至下一条记录时,需要判断是否超出最后一条记录,需要使用
下面的代码:
处理数据格式

If [记录集].EOF=True Then
[超出最后一条记录时执行的代码]
End If
其中,EOF 属性的值为 True 时,表示已经跳转到超过记录集最后一条记
录的位置。
数据排序技巧

◎应用实例
素材\第 2 章\通过编写 SQL 来引用指定记录集.accdb

本例中,需要在文本框中输出“T_员工档案”表中“部门”字段为“销
数据查询技巧

售部”的记录的“姓名”
、“专业”和“部门”数据。

◎案例操作

01 在“F_记录”窗体中插入“销 02 为“F_记录”窗体添加“cmd_
数据编辑技巧

售部”按钮和文本框。 销售_Click”事件过程。

114
Chapter 02 控件和对象的使用技巧

03 切换至窗体视图模式,单击

基础操作技巧
按钮,查看程序运行效果。

◎过程源代码
源文件\第 2 章\通过编写 SQL 来引用指定记录集.accdb

控件和对象
在获取当前数据库的“T_员工档案”表中通过 SQL 选择的记录,并在
文本框中输出记录,其具体的 VBA 代码如下。
'在文本框中输出“T_员工档案”表中的销售部员工的姓名、专业和部门
Private Sub cmd_销售_Click()

对象操作技巧
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim StrSQL As String
Dim i As Integer
'设置 SQL 语句获取销售部员工的姓名、专业和部门
StrSQL = "select 姓名,专业,部门 from T_员工档案 where 部门 = '销售部';"
处理数据格式

'引用当前数据库
Set db = CurrentDb()
'使用动态集的方式打开 SQL 筛选的结果作为记录集
Set rs = db.OpenRecordset(StrSQL, dbOpenDynaset)
txt_资料 = "" '清空文本框
数据排序技巧

'通过判断循环输出记录集中的每条记录
Do Until rs.EOF = True
'通过计次循环输出每条记录的所有字段
For i = 0 To 2
txt_资料 = txt_资料 & rs.Fields(i) & " "
数据查询技巧

Next i
rs.MoveNext '移动至下一条记录
txt_资料 = txt_资料 + vbCrLf '换行
Loop
End Sub
数据编辑技巧

◎执行过程
将“F_记录”窗体的视图模式切换至窗体视图,单击“销售部”按钮,
文本框中输出销售部记录的姓名、专业和部门,如图 2-27 所示。

115
Access VBA 活用范例大辞典
基础操作技巧
控件和对象

图 2-27 通过 SQL 语句获取销售部记录的某些字段

077 引用窗体或报表中的记录集 初 中 高
077 2003 / 2007 / 2010

引用窗体或报表中的记录集
对象操作技巧

◎数据库对象的引用:RecordsetClone 属性、OpenForm 方法

如果引用的记录集位于窗体或者报表中,而不在表或者查询中的时候,
就不能够使用 OpenRecordset 方法来引用,而是需要使用 RecordsetClone 属
处理数据格式

性来复制窗体或者报表中的记录集,其具体的语法格式如下所示:
Set [变量]=[对象集合]![对象].RecordsetClone
使用该属性与使用 OpenRecordset 方法不同,需要预先打开对应的对象,
否则会出现找不到对象的错误。
数据排序技巧

如果要引用窗体中的记录集,可以使用 DoCmd 属性的 OpenForm 方法


打开窗体,其具体的语法格式为:
DoCmd.OpenForm [窗体名]
如果需要获取记录集中的记录数,可以使用记录集的 RecordsetCount 属
数据查询技巧

性,其具体的语法格式为:
[记录集].RecordsetCount

◎应用实例
素材\第 2 章\引用窗体或报表中的记录集.accdb
数据编辑技巧

本例中,需要创建一个过程,运行该过程时,可以打开“F_员工方案”

并获取其中的记录集的记录数。

116
Chapter 02 控件和对象的使用技巧

◎案例操作

基础操作技巧
01 为数据库插入“M_记录数” 02 为“记录数”过程添加 VBA
模块,创建“记录数”过程。 代码。

03 按【F5】键运行程序,查看

控件和对象
程序运行效果。

◎过程源代码
源文件\第 2 章\引用窗体或报表中的记录集.accdb

对象操作技巧
定义 DAO 数据库对象,打开窗体,复制窗体中的记录集,返回记录集
的记录数,其具体的 VBA 代码如下。
'复制窗体记录集,返回其记录数
Sub 记录数()
处理数据格式

Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb()
'打开窗体"F_员工工资"
DoCmd.OpenForm "F_员工档案"
Set rs = Forms!F_员工档案.RecordsetClone '复制窗体的记录集
数据排序技巧

'输出窗体中的记录集的记录数
MsgBox "F_员工档案中的记录数为:" & rs.RecordCount
End Sub

◎执行过程
数据查询技巧

保存编写的 VBA 代码,然后按【F5】键运行程序,结果如图 2-28 所示。


数据编辑技巧

图 2-28 引用窗体中的记录集并返回其记录数
117
Access VBA 活用范例大辞典

078 连接到当前数据库 初 中 高
078 2003 / 2007 / 2010
基础操作技巧

连接到当前数据库
◎数据库对象的引用:Connection 属性、Close 方法

使用 ADO 方法可以操作数据库。在使用 ADO 方法之前,需要连接至欲


控件和对象

操作的数据库。首先需要定义一个 ADODB 的 Connection 对象变量,并使用


该对象变量连接至指定的数据库。比如连接至当前的数据库,可以使用以下
的代码:
Dim [变量] As ADODB.Connection
对象操作技巧

Set [变量]=CurrentProject.Connection
如果需要断开数据库连接,可以使用 Close 方法,其具体的语法格式如
下所示:
[数据库连接对象].Close
处理数据格式

◎应用实例
素材\第 2 章\连接到当前数据库.accdb

本例中,需要连接至当前的数据库,并返回其连接状态,然后断开连接,
再次返回其连接状态。
数据排序技巧

◎案例操作

01 在数据库“M_记录数”模块 02 为“连接状态”
过程添加 VBA
中创建“连接状态”过程。 代码。
数据查询技巧

03 按【F5】键运行程序,查看
程序运行效果。

◎过程源代码
数据编辑技巧

源文件\第 2 章\连接到当前数据库.accdb

本例直接新建一个“连接状态”的 Sub 过程,在该过程中首先定义一个

118
Chapter 02 控件和对象的使用技巧

ADODB 连接对象,连接至当前的数据库,返回连接状态,断开连接,返回

基础操作技巧
连接状态。

在本例中,对于连接状态,可通过 Select…Case 语句来进行判断,并使


用 MsgBox()函数打开输出对话框来控制显示效果,其具体的 VBA 代码如下。
'连接至当前数据库,返回其连接状态
Sub 连接状态()

控件和对象
Dim cmdYN As Integer
'连接至当前的数据库
Dim cn As ADODB.Connection
Set cn = CurrentProject.Connection
状态:

对象操作技巧
'判断并返回当前数据库的连接状态
Select Case cn.State
Case 0
MsgBox "连接已断开!"
Exit Sub
处理数据格式

Case 1: MsgBox "连接已打开!"


Case 2: MsgBox "正在连接……"
Case 4: MsgBox "正在执行命令……"
Case 8: MsgBox "正在检索……"
End Select
cmdYN = MsgBox("是否断开连接?", vbYesNo)
数据排序技巧

If cmdYN = vbNo Then


MsgBox "没有断开连接!"
Exit Sub
End If
'断开数据库连接,再次返回数据库连接状态
数据查询技巧

cn.Close
GoTo 状态
End Sub

◎执行过程
数据编辑技巧

保存编写的 VBA 代码,然后按【F5】键运行程序,连接至当前的数据


库,判断结果为“连接已打开!
”,选择是否断开连接,根据选择进行操作,
并在此返回执行操作的结果,如图 2-29 所示。

119
Access VBA 活用范例大辞典
基础操作技巧
控件和对象

图 2-29 连接至当前的数据库并判断连接状态
初 中 高
079
079 获取已连接数据库指定表的记集 2003 / 2007 / 2010

获取已连接数据库指定表的记录集
对象操作技巧

◎数据库对象的引用:Recordset 属性、Source 属性

在 ADO 中获取记录集前,需要先连接到一个数据库,并定义一个
ADODB 的记录集变量,然后通过连接获取指定表的记录集,其具体的语法
格式如下所示:
处理数据格式

Dim [变量] As New ADODB.Recordset


[变量].Open [表或查询名],[数据库连接]
如果需要获取记录集来源的信息,可以使用记录集的 Source 属性,其具
体的语法格式如下所示:
数据排序技巧

[记录集].Source

◎应用实例
素材\第 2 章\获取已连接数据库指定表的记录集.accdb
数据查询技巧

本例中,需要连接至当前的数据库,获取“T_员工档案”表中的记录集,
并通过消息对话框返回记录集中的所有记录。

◎案例操作
数据编辑技巧

01 在“F_记录集”窗体中插入 02 为窗体添加“cmd_连接_
“记录集”按钮。 Click”事件过程。

120
Chapter 02 控件和对象的使用技巧

03 单击按钮运行事件过程,查

基础操作技巧
看程序运行效果。

◎过程源代码
源文件\第 2 章\获取已连接数据库指定表的记录集.accdb

控件和对象
定义 ADODB 连接对象和记录集,连接至当前的数据库,获取“T_员工
档案”表的记录集,返回记录集中的记录,其具体的 VBA 代码如下。
'连接至当前数据库,并在消息对话框中输出其中的所有记录
Private Sub cmd_连接_Click()

对象操作技巧
Dim i As Integer
Dim Rcd As String
'定义 ADODB 连接对象和记录集对象
Dim cn As ADODB.Connection
Dim rs As New ADODB.Recordset
'连接至当前数据库
处理数据格式

Set cn = CurrentProject.Connection
'引用当前连接的数据库中的“T_员工档案”表中的记录集
rs.Open "T_员工档案", cn
'获取记录集中的所有记录
Do Until rs.EOF = True
数据排序技巧

For i = 0 To rs.Fields.Count - 1
Rcd = Rcd & rs.Fields(i) & " "
Next i
rs.MoveNext
Rcd = Rcd & Chr(10)
Loop
数据查询技巧

'在消息对话框中输出所有的记录集
MsgBox Rcd, , rs.Source & " 的记录集"
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
End Sub
数据编辑技巧

◎执行过程
将“F_记录集”窗体的视图模式切换至窗体视图,单击“记录集”按钮,
结果如图 2-30 所示。
121
Access VBA 活用范例大辞典
基础操作技巧
控件和对象

图 2-30 返回连接数据库指定表的记录集中的所有记录

080 创建数据库 初 中 高
080 2003 / 2007 / 2010

创建数据库
对象操作技巧

◎数据库对象的创建与编辑:CreateDatabase 方法、Path 属性

在 DAO 中,可以通过 CreatDatabase 方法创建新的数据库文件,其具体


的语法格式如下所示:
处理数据格式

Dim [变量] As DAO.Database


Set [变量]= CreateDatabase([路径],[语言环境])
其中,语言环境使用数据库内置的常量,比如设置语言环境为简体中文,
应该使用 dbLangChineseSimplified 常量。
数据排序技巧

在指定路径时,需要指定完整的路径。如果需要在当前文件夹中新建数
据库文件,可以使用 CurrentProject 对象的 Path 属性来获取当前文件夹的路
径,其具体的语法格式如下所示:
CurrentProject.Path
数据查询技巧

在获取了当前文件夹的保存路径后,只需要在保存路径之后连接上“\”
以及数据库文件的名称及后缀名即可。

◎应用实例
素材\第 2 章\创建数据库\
数据编辑技巧

本例中,需要创建一个 Sub 过程,在运行该过程时,会在当前文件夹创


建一个指定名称的数据库文件。

122
Chapter 02 控件和对象的使用技巧

◎案例操作

基础操作技巧
01 在“M_创建”模块中插入“创 02 为“创建”Sub 过程添加 VBA
建”Sub 过程。 代码。

03 按【F5】键运行程序,查看

控件和对象
程序运行的效果。

◎过程源代码
源文件\第 2 章\创建数据库\

对象操作技巧
编写 VBA 代码,建立数据库文件,其具体的 VBA 代码如下。
'在当前数据库新建数据库文件
Sub 创建()
Dim db As DAO.Database
处理数据格式

Dim strFile As String


'获取新建数据的文件名
strFile = InputBox("请输入新建的数据库名:", "新建文件名")
'在当前位置新建指定名称的数据库文件
Set db = CreateDatabase(CurrentProject.Path & "\" & strFile _
& ".accdb", dbLangChineseSimplified)
数据排序技巧

db.Close: Set db = Nothing


End Sub

◎执行过程
保存编写的 VBA 代码,然后按【F5】键运行“创建”Sub 过程,在输入
数据查询技巧

对话框中输入欲创建的数据库文件的名字,然后单击“确定”按钮创建,最
后打开当前数据库所在文件夹,查看结果,如图 2-31 所示。
数据编辑技巧

图 2-31 创建数据库

123
Access VBA 活用范例大辞典

081 创建数据表并新增字段 初 中 高
081 2003 / 2007 / 2010
基础操作技巧

创建数据表并新增字段
◎数据库对象的创建与编辑:CreateTableDef 方法、Append 方法

在 DAO 中,可以通过 CreateTableDef 方法在数据库中创建新的数据表,


控件和对象

其具体的语法格式如下所示:
Set [表对象变量]= [数据库对象].CreateTableDef([表名])
在为数据库添加了指定名称的表后,还需要将其添加到表对象集合中,
才能够真正实现将表添加到数据库中,具体的语法格式如下所示:
对象操作技巧

[数据库].TableDefs.Append [表]
如果需要为表中新增字段,则需要使用下面的语句来实现:
[表].Fields.Append [表].CreateField([字段名],[数据类型],[长度限制])
其中,字段类型为 Access 数据类型常量,字段长度限制单位为字节,表
处理数据格式

示该字段允许的多长的数据输入。

◎应用实例
素材\第 2 章\创建数据表并新增字段.accdb
数据排序技巧

本例中,需要在当前数据库中创建一个名为“T_示例表”的资料表,然
后为该表添加上所需的字段。

◎案例操作

01 在“F_创建数据表”窗体中 02 为窗体添加“cmd_表_Click”
数据查询技巧

插入“创建数据表”按钮。 事件过程。

03 在“cmd_表_Click”事件过 04 单击按钮运行程序,查看程
程中添加 VBA 代码。 序运行效果。
数据编辑技巧

124
Chapter 02 控件和对象的使用技巧

◎过程源代码

基础操作技巧
源文件\第 2 章\创建数据表并新增字段.accdb

创建数据表,为数据表添加字段,将数据表添加到标记和对象中,其具
体的 VBA 代码如下。
'在当前数据库中创建指定字段的表

控件和对象
Private Sub cmd_表_Click()
On Error GoTo 存在
Dim db As DAO.Database
Dim Tb As DAO.TableDef
'在当前数据库中创建名为“T_示例表”的资料表

对象操作技巧
Set db = CurrentDb
Set Tb = db.CreateTableDef("T_示例表")
'为资料表添加字段
Tb.Fields.Append Tb.CreateField("ID", dbInteger)
Tb.Fields.Append Tb.CreateField("姓名", dbText)
Tb.Fields.Append Tb.CreateField("身份证号码", dbText, 18)
处理数据格式

Tb.Fields.Append Tb.CreateField("工资", dbCurrency)


'将资料表添加到对象集合之中
db.TableDefs.Append Tb
Set Tb = Nothing
db.Close: Set db = Nothing
数据排序技巧

Exit Sub
存在:
MsgBox "您正在创建的资料表已经存在!"
End Sub

◎执行过程
数据查询技巧

将“F_创建数据表”窗体的视图模式切换至窗体视图模式,单击 “创
建数据表”按钮,如图 2-32 所示,其中右图为创建的数据表。
数据编辑技巧

图 2-32 创建数据表

125
Access VBA 活用范例大辞典

082 删除指定数据表 初 中 高
082 2003 / 2007 / 2010
基础操作技巧

删除指定数据表
◎数据库对象的创建与编辑:TableDefs 对象集合、Delete 方法

在 DAO 中,可以使用表对象集合的 Delete 方法删除指定的数据表,其


控件和对象

具体的语法格式如下所示:
[数据库].TableDefs.Delete [表名]

◎应用实例
素材\第 2 章\删除指定数据表.accdb
对象操作技巧

本例中,需要删除数据库中名为“T_示例”的数据表。

◎案例操作

01 在“F_删除数据表”窗体中 02 为 窗 体 添 加 “ cmd_ 删 表
处理数据格式

插入“删除数据表 1”按钮。 _Click”事件过程。

03 在“cmd_删表_Click”事件 04 单击按钮运行程序,查看程
过程中添加 VBA 代码。 序运行效果。
数据排序技巧

◎过程源代码
源文件\第 2 章\删除指定数据表.accdb

获取当前的数据库,从表对象集合中删除“T_示例”表,其具体的 VBA
数据查询技巧

代码如下。
'删除“T_示例”表
Private Sub cmd_删表_Click()
On Error GoTo 不存在
数据编辑技巧

Dim db As DAO.Database
Set db = CurrentDb
'删除指定的表
db.TableDefs.Delete "T_示例"

126
Chapter 02 控件和对象的使用技巧

db.Close: Set db = Nothing

基础操作技巧
Exit Sub
不存在:
MsgBox "“T_示例”表不存在或者已删除!"
End Sub

◎执行过程

控件和对象
将“F_删除数据表”窗体的视图模式切换至窗体视图模式,单击“删除
数据表 1”按钮,如图 2-33 所示。

对象操作技巧
处理数据格式

图 2-33 删除指定资料表前后 Access 对象浏览器的变化

提示:使用 DoCmd 对象删除数据数据表


使用 DoCmd 对象中的方法,可以实现许多常用的操作。该对象中集合了许多系
统中的常用命令,比如打开文件、保存文件和排序等。本例中删除数据表页可以
数据排序技巧

使用该对象中的方法进行,其具体的代码如下所示( 源文件\第 2 章\删除指


定数据表.accdb)。

'删除“T_示例”数据表
Private Sub cmd_删除_Click()
数据查询技巧

On Error GoTo 不存在


'执行删除操作
DoCmd.DeleteObject acTable, "T_示例"
Exit Sub
不存在:
数据编辑技巧

MsgBox "“T_示例”表不存在或者已删除!"
End Sub

127
Access VBA 活用范例大辞典

083 在数据表中删除指定字段 初 中 高
083
基础操作技巧

2003 / 2007 / 2010

在数据表中删除指定字段
◎数据库对象的创建与编辑:Delete 方法

在 DAO 中,如果需要删除指定表的某个字段,可以使用表的字段集合
控件和对象

的 Delete 方法,其具体的语法格式如下所示:
[表名].Fields.Delete([字段名])

◎应用实例
素材\第 2 章\在数据表中删除指定字段.accdb
对象操作技巧

本例中,需要删除数据库中“T_员工档案”表中的“示例字段”字段。

◎案例操作

01 在“F_删除字段”窗体中插 02 为窗体添加“cmd_ 删字段


处理数据格式

入“删除字段”按钮。 _Click”事件过程。

03 在“cmd_删字段_Click”事 04 单击按钮运行程序,查看程
件过程中添加 VBA 代码。 序运行效果。
数据排序技巧

◎过程源代码
源文件\第 2 章\在数据表中删除指定字段.accdb

获取当前的数据库中的“T_员工档案”表,删除表中的“示例字段”字
数据查询技巧

段,其具体的 VBA 代码如下。


'删除“T_员工档案”表中的“示例字段”字段
Private Sub cmd_删字段_Click()
On Error GoTo 不存在
数据编辑技巧

Dim db As DAO.Database
Dim tb As DAO.TableDef
'引用“T_员工档案”表
Set db = CurrentDb

128
Chapter 02 控件和对象的使用技巧

Set tb = db.TableDefs("T_员工档案")

基础操作技巧
'删除表中的“示例字段”字段
tb.Fields.Delete ("示例字段")
Set tb = Nothing
db.Close: Set db = Nothing
Exit Sub
不存在:

控件和对象
MsgBox "您正在删除的字段不存在或已删除!"
End Sub

◎执行过程
将“F_删除字段”窗体的视图模式切换至窗体视图模式,单击“删除字

对象操作技巧
段”按钮,结果如图 2-34 所示。

处理数据格式

图 2-34 删除当前数据库指定表中的字段
数据排序技巧

084 创建自动编号字段 初 中 高
084 2003 / 2007 / 2010

创建自动编号字段
数据查询技巧

◎数据库对象的创建与编辑:Attributes 属性、Append 方法

在 DAO 中,需要为某个字段设置字段特征,可以使用字段的 Attributes


属性,其具体的语法格式如下所示:
[字段].Attributes [字段特征常量]
数据编辑技巧

其中,字段特征常量为数据库内置的常量,用于表示字段的特征,比如
用于表示不可更改的自动编号的常量 dbAutoIncrField。

129
Access VBA 活用范例大辞典

在新增了字段之后,还需要将新增字段添加到字段集合之中去,其具体
基础操作技巧

的语法格式如下所示:
[表名].Fields.Append [新增字段名]

◎应用实例
素材\第 2 章\创建自动编号字段.accdb
控件和对象

本例中,需要为数据库中的“T_示例”表中新增一个不可更改的自动编
号字段。

◎案例操作
对象操作技巧

01 在“F_编号字段”窗体中插 02 为窗体添加“cmd_编号字段
入“编号字段”按钮。 _Click”事件过程。

03 在“cmd_编号字段_Click” 04 单击按钮运行程序,查看程
处理数据格式

事件过程中添加 VBA 代码。 序运行效果。

◎过程源代码
源文件\第 2 章\创建自动编号字段.accdb
数据排序技巧

获取当前的数据库中的“T_示例”表,为表中新增自动编号的字段,其
具体的 VBA 代码如下。
'为“T_示例”表新增自动编号的字段
Private Sub cmd_编号字段_Click()
On Error GoTo 出错
数据查询技巧

Dim db As DAO.Database
Dim tb As DAO.TableDef
Dim fld As DAO.Field
'获取“T_示例”表
Set db = CurrentDb
数据编辑技巧

Set tb = db.TableDefs("T_示例")
'为工作表新增字段
Set fld = tb.CreateField("自动编号", dbLong)
'设置新增字段特征为自动编号

130
Chapter 02 控件和对象的使用技巧

fld.Attributes = dbAutoIncrField

基础操作技巧
'将新增字段添加到表的字段集合之中
tb.Fields.Append fld
Set fld = Nothing
Set tb = Nothing
db.Close: Set db = Nothing
Exit Sub

控件和对象
出错:
MsgBox Err.Description, , "出错啦!"
End Sub

◎执行过程

对象操作技巧
将“F_编号字段”窗体的视图模式切换至窗体视图模式,单击“编号字
段”按钮,结果如图 2-35 所示。

处理数据格式

图 2-35 删除当前数据库指定表中的字段
数据排序技巧

提示:关于自动编号
在每一张数据表中,只允许存在一个自动编号的字段。一般情况下,数据表中均
含有一个默认的自动编号字段“ID”
,这时不能够再为数据表添加自动编号字段。
数据查询技巧

085 创建与删除索引 初 中 高
085 2003 / 2007 / 2010

创建与删除索引
◎数据库对象的创建与编辑:CreateIndex 属性、Delete 方法
数据编辑技巧

在 DAO 中,如果需要为数据表创建索引,首先需要使用数据表的
CreateIndex 方法创建一个新的索引,然后使用 CreateField 方法添加字段,其
131
Access VBA 活用范例大辞典

具体的语法格式如下所示:
基础操作技巧

[表名].CreateIndex([索引名])
[索引名].Fields.Append [索引名].CreateField([字段名])
其中,字段名必须为创建索引的表中的某个字段名。

如果需要删除某个索引,需要在表的索引集合对象中使用 Delete 方法即


控件和对象

可,其具体的语法格式如下所示:
[表名].Indexes.Delete [索引名]

◎应用实例
素材\第 2 章\创建与删除索引.accdb
对象操作技巧

本例中,需要为数据库中“T_员工档案”表创建名为“索引”的索引,
并可以通过单击“删除索引”按钮删除该索引。

◎案例操作
处理数据格式

01 在“F_索引”窗体中插入“创 02 为窗体添加“cmd_ 建索引


建索引”按钮和“删除索引” _Click”和“cmd_删索引”事
按钮。 件过程。
数据排序技巧

03 在两个事件过程中分别添加 04 单击按钮运行程序,查看程
VBA 代码。 序运行效果。

◎过程源代码
数据查询技巧

源文件\第 2 章\创建与删除索引.accdb

在本例中,创建索引和删索引的事件过程,编写 VBA 代码,其具体的


VBA 代码如下。
'创建“索引”索引
数据编辑技巧

Private Sub cmd_建索引_Click()


On Error GoTo 出错
Dim db As DAO.Database
Dim tb As DAO.TableDef

132
Chapter 02 控件和对象的使用技巧

Dim ind As DAO.Index

基础操作技巧
'获取“T_员工档案”表
Set db = CurrentDb
Set tb = db.TableDefs("T_员工档案")
'创建索引
Set ind = tb.CreateIndex("索引")
'为索引添加字段

控件和对象
ind.Fields.Append ind.CreateField("部门")
'将新建的索引添加到索引对象集合中去
tb.Indexes.Append ind
MsgBox "恭喜,索引创建成功!", , "创建成功"
Exit Sub

对象操作技巧
出错:
MsgBox Err.Description, , "您出错了!"
End Sub

'删除“索引”索引
处理数据格式

Private Sub cmd_删索引_Click()


On Error GoTo 出错
Dim db As DAO.Database
Dim tb As DAO.TableDef
'获取“T_员工档案”表
Set db = CurrentDb
数据排序技巧

Set tb = db.TableDefs("T_员工档案")
'删除索引
tb.Indexes.Delete "索引"
MsgBox "恭喜,索引删除成功!", , "删除成功"
Exit Sub
数据查询技巧

出错:
MsgBox Err.Description, , "您出错了!"
End Sub

◎执行过程
将“F_索引”窗体的视图模式切换至窗体视图模式,单击“创建索引”
数据编辑技巧

按钮,通过“T_员工档案”表的设计视图打开索引查看创建前后效果,如
图 2-36 所示。

133
Access VBA 活用范例大辞典
基础操作技巧
控件和对象

图 2-36 新建索引(左图)及其前后效果(右图)

单击“删除索引”按钮,通过“T_员工档案”表的设计视图打开索引,
对象操作技巧

查看删除索引前后效果,如图 2-37 所示。


处理数据格式
数据排序技巧

图 2-37 删除索引(左图)及其前后效果(右图)

086 在数据表中设置主键 初 中 高
086 2003 / 2007 / 2010

在数据表中设置主键
数据查询技巧

◎数据库对象的创建与编辑:Primary 属性

在 DAO 中,需要为数据表创建主键,应该先为数据表添加一个主键字
段的索引,然后将该索引的 Primary 属性设置为 True 即可,其具体的语法格
数据编辑技巧

式如下所示:

134
Chapter 02 控件和对象的使用技巧

[索引名].Primary=True

基础操作技巧
如果数据表已经存在主键,由于一张数据表只能够存在一个主键,所以
设置是不会成功的。如果需要设置的字段不符合称为主键的条件,设置同样
不会成功。

◎应用实例

控件和对象
素材\第 2 章\在数据表中设置主键.accdb

本例中,需要在数据库中,将组合框中的字段设置为“T_员工档案”表
的主键。

◎案例操作

对象操作技巧
01 在“F_主键”窗体中插入“设 02 为 窗 体 添 加 “ cmd_ 主 键
置主键”按钮和“字段列表” _Click”事件过程,在事件过程
组合框。 中添加设置主键的 VBA 代码。
处理数据格式

03 单击按钮运行程序,查看程
序运行效果。

◎过程源代码
数据排序技巧

源文件\第 2 章\在数据表中设置主键.accdb

创建字段索引,然后将其设置为主键,其具体的 VBA 代码如下。


'设置主键
数据查询技巧

Private Sub cmd_主键_Click()


On Error GoTo 出错
Dim db As DAO.Database
Dim tb As DAO.TableDef
Dim ind As DAO.Index
'获取"T_员工档案"表
数据编辑技巧

Set db = CurrentDb
Set tb = db.TableDefs("T_员工档案")

135
Access VBA 活用范例大辞典

'创建主键索引
基础操作技巧

Set ind = tb.CreateIndex("主键")


'为索引添加主键字段
ind.Fields.Append ind.CreateField(txt_字段)
'设置索引的 Primary 属性为 True
ind.Primary = True
'将新建的索引添加到索引对象集合中去
控件和对象

tb.Indexes.Append ind
MsgBox "恭喜,主键创建成功!", , "创建成功"
Exit Sub
出错:
MsgBox Err.Description, , "您出错了!"
对象操作技巧

End Sub

◎执行过程
将“F_索引”窗体的视图模式切换至窗体视图模式,单击“创建索引”按钮,
通过“T_员工档案”表的设计视图打开索引查看创建前后效果,如图 2-38 所示。
处理数据格式
数据排序技巧
数据查询技巧

图 2-38 设置主键(左图)及其前后效果(右图)

087 创建与删除关系 初 中 高
087 2003 / 2007 / 2010

创建与删除关系
数据编辑技巧

◎数据库对象的创建与编辑:CreateRelation 方法、Name 属性

在 DAO 中,创建关系主要包括对关系名称、涉及的数据表、关联字段

136
Chapter 02 控件和对象的使用技巧

这 3 方面的设置。创建关系可以使用 CreateRelation 方法,其具体的语法格式

基础操作技巧
如下所示:
[数据库].CreateRelation
设置关系的名称需要使用 Name 属性,其具体的语法格式如下所示:
[关系变量].Name=[关系名]

控件和对象
设置一对多关系一端的数据表,需要使用关系的 Table 属性,其具体的
语法格式如下所示:
[关系变量].Table=[表名]
设置一对多关系多端的数据表,需要使用关系的 ForeignTable 属性,其

对象操作技巧
具体的语法格式如下所示:
[关系变量].ForeignTabl=[表名]
设置一对多关系一端的数据表的关联字段和多端外键,需要使用关系的
CreateField 方法和一端数据表关联字段的 ForeignName 属性,其具体的语法
处理数据格式

格式如下所示:
[关系变量].CreateField=[字段名]
[一端关联字段]. ForeignName=[外键名]
在设置完关系的名称、数据表和关联字段后,还需要分别将关联字段保
存至关系字段对象集合中,然后将新建关系保存至数据库关系集合中,其具
数据排序技巧

体的语法格式如下所示:
[关系变量].Fields.Append=[关联字段]
[数据库].Relations.Append=[新建关系]
数据查询技巧

◎应用实例
素材\第 2 章\创建与删除关系.accdb

本例中,需要在数据库中创建“T_员工信息”表和“T_员工工资”表的
关系,并且可以通过单击“删除关系”按钮删除该关系。
数据编辑技巧

137
Access VBA 活用范例大辞典

◎案例操作
基础操作技巧

01 在“F_关系”窗体中插入“创 02 为窗体添加“cmd_ 建关系


建关系”按钮和“删除关系” _Click”和“cmd_删关系_Click”
按钮。 事件过程。
控件和对象

03 在两个事件过程中分别添加 04 单击按钮运行程序,查看程
VBA 代码。 序运行效果。

◎过程源代码
对象操作技巧

源文件\第 2 章\创建与删除关系.accdb

创建新的关系,设置关系的参数,通过关系名称在关系对象集合中删除
关系,其具体的 VBA 代码如下。
'创建一对多的关系
处理数据格式

Private Sub cmd_建关系_Click()


On Error GoTo 出错
Dim db As DAO.Database
Dim fld As DAO.Field
Dim rl As DAO.Relation
'在当前数据库中创建关系
数据排序技巧

Set db = CurrentDb
Set rl = db.CreateRelation
'设置关系的名称
rl.Name = "工资信息"
'设置一对多关系的一端数据表
数据查询技巧

rl.Table = "T_员工资料"
'设置一对多关系的多端
rl.ForeignTable = "T_员工工资"
'设置一端的关联字段
Set fld = rl.CreateField("员工编号")
'设置多端的关联字段
数据编辑技巧

fld.ForeignName = "员工编号"
'将关联字段保存至关系的字段对象集合中

138
Chapter 02 控件和对象的使用技巧

rl.Fields.Append fld

基础操作技巧
'将关系保存至数据库的关系对象集合中
db.Relations.Append rl
Set fld = Nothing
Set rl = Nothing
db.Close: Set db = Nothing
MsgBox "已经创建“工资信息”关系!"

控件和对象
Exit Sub
出错:
MsgBox Err.Description, , "您出错了!"
End Sub

对象操作技巧
'删除关系
Private Sub cmd_删关系_Click()
On Error GoTo 出错
Dim db As DAO.Database
Set db = CurrentDb
处理数据格式

'删除“工资信息”关系
db.Relations.Delete "工资信息"
MsgBox "已经删除“工资信息”关系!"
Exit Sub
出错:
MsgBox Err.Description, , "您出错了!"
数据排序技巧

End Sub

◎执行过程
将“F_关系”窗体的视图模式切换至窗体视图模式,单击“创建关系”
按钮,通过“数据库工具”选项卡“工具”按钮查看关系,如图 2-39 所示。
数据查询技巧
数据编辑技巧

图 2-39 创建关系(左图)及其结果(右图)

139
Access VBA 活用范例大辞典

单击“删除关系”按钮,然后查看关系,如图 2-40 所示。


基础操作技巧
控件和对象

图 2-40 删除关系(左图)及其结果(右图)

初 中 高
088创建与删除查询
088 2003 / 2007 / 2010

创建与删除查询
对象操作技巧

◎数据库对象的创建与编辑:CreateQueryDef 方法

在 DAO 中,可以通过数据库的 CreateQueryDef 方法创建查询,其具体


的语法格式如下所示:
处理数据格式

[数据库].CreateQueryDef([查询名],[SQL 查询语句])
删除查询可直接在查询对象集合中通过查询名删除,其具体的语法格式
如下所示:
[数据库].QueryDefs.Delete [查询名]
数据排序技巧

◎应用实例
素材\第 2 章\创建与删除关系.accdb

本例中,需要在数据库中根据“T_员工信息”表创建“Q_财务部”查询,
数据查询技巧

并且可以通过单击“删除查询”按钮删除该查询。

◎案例操作

01 在“F_查询”窗体中插入“创 02 为窗体添加“cmd_ 建查询


数据编辑技巧

建查询”按钮和“删除查询” _Click”和“cmd_删查询_Click”
按钮。 事件过程。

140
Chapter 02 控件和对象的使用技巧

03 在两个事件过程中分别添加 04 单击按钮运行程序,查看程

基础操作技巧
VBA 代码。 序运行效果。

◎过程源代码
源文件\第 2 章\创建与删除关系.accdb

控件和对象
设置 SQL 语句在“Cmd_建查询_Click”和“Cmd_删查询_Click”事件
过程中创建查询,删除查询,具体 VBA 代码如下。
'创建“Q_财务部”查询
Private Sub cmd_建查询_Click()

对象操作技巧
On Error GoTo 错误
Dim db As DAO.Database
Dim qr As DAO.QueryDef
Dim strSQL As String
Set db = CurrentDb
'设置用于创建查询的 SQL 语句
处理数据格式

strSQL = "Select * from T_员工资料 where 部门='财务部'"


Set qr = db.CreateQueryDef("Q_财务部", strSQL) '创建查询
MsgBox "成功创建“Q_财务部”查询", , "创建成功"
db.Close: Set db = Nothing: Exit Sub
错误: MsgBox Err.Description, , "您出错啦!"
数据排序技巧

End Sub

'删除“Q_财务部”查询
Private Sub cmd_删查询_Click()
On Error GoTo 错误
数据查询技巧

Dim db As DAO.Database
Set db = CurrentDb
db.QueryDefs.Delete "Q_财务部" '删除查询
MsgBox "成功删除“Q_财务部”查询", , "删除成功"
db.Close: Set db = Nothing: Exit Sub
错误: MsgBox Err.Description, , "您出错啦!"
数据编辑技巧

End Sub

141
Access VBA 活用范例大辞典

◎执行过程
基础操作技巧

将“F_查询”窗体的视图模式切换至窗体视图模式,单击“创建查询”
按钮,从数据库对象浏览器可以查询创建查询的效果,如图 2-41 所示。
控件和对象

图 2-41 创建查询(左图)及其结果(右图)
对象操作技巧

单击“删除查询”按钮,在对象浏览器中查看结果,如图 2-42 所示。


处理数据格式

图 2-42 删除查询(左图)及其结果(右图)
数据排序技巧
数据查询技巧
数据编辑技巧

142
Chapter 03
掌握 Access 中的对象操作技巧

通过 VBA 代码操作 Access 中的各种对象,是 Access VBA


代码的主要用途之一。主要包括打开和关闭对象、显示和隐藏对
象、启动和退出对象以及对象的属性设置等。
本章将通过具体的例子,展示 Access 中常见对象的操作技
巧,包括应用程序和窗体的操作技巧。

▼主要内容
◎应用程序的操作技巧
Shell()函数、Quit 方法、DoCmd 对象、Open*方法……
◎窗体的操作
Caption 属性、InsideHeight 属性、InsideWidth 属性、CreateForm 方法……

▼涉及案例
◎启动与退出 Access
◎Access 界面操作
◎判断窗体是否已加载
◎设置窗体的标题
◎导航按钮的显示和隐藏
◎设置窗体中控件的数据源(1)
◎关闭所有打开的窗体
◎引用窗体中的控件
……
Access VBA 活用范例大辞典

089 启动与退出 Access 初 中 高


089
基础操作技巧

2003 / 2007 / 2010

启动与退出 Access
◎应用程序的操作技巧:Shell()函数、Quit 方法

通过 VBA 代码可以实现 Access 应用程序的启动与退出,


其中启动 Access
控件和对象

应用程序可以使用 Shell()函数来实现(该函数可以打开各种类型的应用程序),
其具体的语法格式为:
Shell([应用程序完整路径],[打开方式])
退出 Access 应用程序,可以使用 Quit 方法来实现,其具体的语法格式为:
对象操作技巧

Application.Quit [退出方式]

◎应用实例
素材\第 3 章\启动与退出 Access.accdb

本例中,需要在单击“F_Access 操作”窗体中的“启动”按钮时,启动
处理数据格式

Access;单击“退出”按钮时,退出当前的 Access 应用程序。

◎案例操作

01 在“F_Access 操作”窗体中 02 为 窗 体 添 加 “ cmd_ 启 动


数据排序技巧

插入“启动”按钮和“退出” _Click”和“cmd_退出_Click”
按钮。 事件过程。

03 在两个事件过程中编写对应 04 单击对应按钮查看程序运行
数据查询技巧

的 VBA 代码。 效果。

◎过程源代码
源文件\第 3 章\启动与退出 Access.accdb
数据编辑技巧

通过 VBA 代码启动与退出 Access 应用程序,具体的 VBA 代码如下。


'启动 Access 应用程序
Private Sub cmd_启动_Click()

144
Chapter 03 掌握 Access 中的对象操作技巧

Dim AccOn As Variant

基础操作技巧
AccOn = Shell("D:\Program Files\Microsoft Office\" _
& "Office14\MSACCESS.EXE", vbNormalFocus)
End Sub

'关闭当前的 Access 应用程序


Private Sub cmd_退出_Click()

控件和对象
Application.Quit acQuitSaveAll
End Sub

◎执行过程
将“F_Access 操作”窗体的视图模式切换至窗体视图模式,单击“启动”

对象操作技巧
按钮或者“退出”按钮即可启动或者退出 Access 数据库。

090 Access 界面操作 初 中 高


090 2003 / 2007 / 2010

Access 界面操作
处理数据格式

◎应用程序的操作技巧:DoCmd 对象、RunCommand 方法

Access 界面操作是指 Access 应用程序界面的最大化、最小化和还原操


作。这些操作可以通过 DoCmd 对象的 RunCommand 方法来实现,其具体的
数据排序技巧

语法格式为:
DoCmd.RunCommand [命令常量]
其中,最大化操作所对应的命令常量为 acCmdAppMaximize,最小化操
作所对应的命令常量为 acCmdAppMinimize,还原操作所对应的命令常量为
数据查询技巧

acCmdAppRestore。

◎应用实例
素材\第 3 章\Access 界面操作.accdb

本例中,需要单击按钮实现应用程序的最大化、最小化和还原。
数据编辑技巧

145
Access VBA 活用范例大辞典

◎案例操作
基础操作技巧

01 在“F_Access 操作”窗体中 02 给窗体中的按钮添加“cmd_


插入“最大化”、“最小化”和 大_Click”
、“cmd_小_Click”和
“还原”按钮。 “cmd_还原_Click”事件过程。
控件和对象

03 在 3 个事件过程中编写对应 04 单击对应按钮查看程序运行
的 VBA 代码。 效果。

◎过程源代码
对象操作技巧

源文件\第 3 章\Access 界面操作.accdb

通过 VBA 代码操作 Access 应用程序的界面,具体的 VBA 代码如下。


'应用程序最大化
Private Sub cmd_大_Click()
处理数据格式

DoCmd.RunCommand acCmdAppMaximize
End Sub

'应用程序最小化
Private Sub cmd_小_Click()
数据排序技巧

DoCmd.RunCommand acCmdAppMinimize
End Sub

'应用程序还原
Private Sub cmd_还原_Click()
DoCmd.RunCommand acCmdAppRestore
数据查询技巧

End Sub

◎执行过程
将“F_Access 操作”窗体的视图模式切换至窗体视图模式,单击相应的
按钮即可对窗口进行最大化、最小化和还原操作。
数据编辑技巧

146
Chapter 03 掌握 Access 中的对象操作技巧

091 打开指定对象 初 中 高
091 2003 / 2007 / 2010

基础操作技巧
打开指定对象
◎应用程序的操作技巧:DoCmd 对象、Open*方法

通过 DoCmd 对象可以打开 Access 中的各种对象,比如表、查询、窗体、

控件和对象
报表和模块等,其具体的语法格式为:
Domd.Open* [对象名],[打开方式]
其中,Open*方法中的“*”一般为对象的英文名,比如 OpenTable、
OpenForm 等。打开方式一般为视图模式,只有在打开模块时,该参数为模

对象操作技巧
块中的某个过程或函数的名称。

在打开不同的对象的时候,可能会有不同的视图模式常量,这时应该尽
量利用系统的自动完成关键字功能(使用【Ctrl+Space】或者【Ctrl+J】组合
键)
,打开常量列表,在其中选择所需的视图模式常量。
处理数据格式

◎应用实例
素材\第 3 章\打开指定对象.accdb

本例中,需要在“F_打开对象”窗体中单击对应的按钮后,打开指定类
型的对象。
数据排序技巧

◎案例操作

01 在“F_打开对象”窗体中添 02 为窗体中的按钮添加对应的
加“表”
、“查询”、
“窗体”、
“报 单击事件过程。
表”和“模块”按钮。
数据查询技巧

03 在 事 件 过 程 中 编 写 对 应 的 04 切换至窗体视图模式,单击
VBA 代码。 按钮查看代码运行效果。
数据编辑技巧

147
Access VBA 活用范例大辞典

◎过程源代码
基础操作技巧

源文件\第 3 章\打开指定对象.accdb

通过 DoCmd 对象的 Open*方法打开对应的 Access 对象,具体的 VBA


代码如下。
'普通视图模式打开表
控件和对象

Private Sub cmd_表_Click()


DoCmd.OpenTable "T_员工资料", acViewNormal
End Sub

'设计视图模式打开查询
对象操作技巧

Private Sub cmd_查询_Click()


DoCmd.OpenQuery "Q_员工工资", acViewDesign
End Sub

'数据表视图模式打开窗体
处理数据格式

Private Sub cmd_窗体_Click()


DoCmd.OpenForm "F_员工工资", acFormDS
End Sub

'报表视图模式打开报表
Private Sub cmd_报表_Click()
数据排序技巧

DoCmd.OpenReport "R_员工工资", acViewReport


End Sub

'打开模块并指定到其中的某个子程序
Private Sub cmd_模块_Click()
数据查询技巧

DoCmd.OpenModule "M_示例", "示例"


End Sub

◎执行过程
将“F_打开对象”窗体的视图模式切换至窗体视图模式,单击不同的按
数据编辑技巧

钮可以按相应的视图模式打开指定的对象。

148
Chapter 03 掌握 Access 中的对象操作技巧

092 对象界面大小操作 初 中 高
092

基础操作技巧
2003 / 2007 / 2010

对象界面大小操作
◎应用程序的操作技巧:DoCmd 对象、Open*方法

打开对象后,可以通过 DoCmd 对象调整当前获取焦点对象的大小,其

控件和对象
具体的语法格式为:
DoCmd.[调整大小的方法]
其中,常用的调整对象大小的方法有 Maximize(最大化)
、Minimize(最
小化)、Restore(还原)和 MoveSize(调整至指定大小)。其中,MoveSize

对象操作技巧
方法需要通过参数指定调整后的对象的位置
(距离编辑区的左边距和上边距)
和对象的大小(对象的宽度和高度)
,其具体的语法格式如下:
DoCmd.MoveSize [左边距],[上边距],[宽度],[高度]

◎应用实例
处理数据格式

素材\第 3 章\对象界面大小调整.accdb

本例中,需要通过单击“F_对象界面”窗体中的界面调整按钮,以指定
的大小打开指定的窗体。

◎案例操作
数据排序技巧

01 在“F_对象界面”窗体中添 02 为窗体中的按钮添加对应的
加对象大小调整按钮。 单击事件过程。
数据查询技巧

03 在 事 件 过 程 中 编 写 对 应 的 04 切换至窗体视图模式,单击
VBA 代码。 按钮查看代码运行效果。

◎过程源代码
数据编辑技巧

源文件\第 3 章\对象界面大小调整.accdb

通过 DoCmd 对象的大小调整方法,
调整打开的窗体的大小,
具体的 VBA
代码如下。

149
Access VBA 活用范例大辞典

'最大化指定窗体
基础操作技巧

Private Sub cmd_大_Click()


DoCmd.OpenForm "F_员工工资"
DoCmd.Maximize
End Sub

'最小化指定窗体
控件和对象

Private Sub cmd_小_Click()


DoCmd.OpenForm "F_员工工资"
DoCmd.Minimize
End Sub
对象操作技巧

'还原指定窗体
Private Sub cmd_还原_Click()
DoCmd.OpenForm "F_员工工资"
DoCmd.Restore
End Sub
处理数据格式

'指定大小打开窗体
Private Sub cmd_大小_Click()
DoCmd.OpenForm "F_员工工资"
'调整打开的窗体的大小为长和宽为 2000 缇
'位置为距离编辑区顶部和左边均为 500 缇
数据排序技巧

DoCmd.MoveSize 500, 500, 2000, 2000


End Sub

◎执行过程
将“F_打开对象”窗体的视图模式切换至窗体视图模式,单击其中的“最大
数据查询技巧

化”
、“最小化”
、“还原”或“指定大小”按钮,可以按指定大小打开对应的对象。

093 判断窗体是否已加载 初 中 高
093 2003 / 2007 / 2010

判断窗体是否已加载
数据编辑技巧

◎窗体的操作:AllForms 属性、IsLoaded 属性

如果需要判断当前数据库中的某个窗体是否加载,可以先通过 AllForms

150
Chapter 03 掌握 Access 中的对象操作技巧

属性指定对应的窗体,然后使用 IsLoaded 属性判断该窗体是否已经加载,其

基础操作技巧
具体的语法格式为:
CurrentProject.AllForms([窗体名]).IsLoaded

◎应用实例
素材\第 3 章\判断窗体是否已加载.accdb

控件和对象
本例需要通过单击“F_判断窗体是否加载”窗体中的“判断”按钮,判
断“F_员工工资”窗体是否已经加载。

◎案例操作

对象操作技巧
01 在“F_判断窗体是否加载” 02 为 窗 体 添 加 “ cmd_ 判 断
窗体中添加“判断”按钮。 _Click”事件过程。

03 在 事 件 过 程 中 编 写 对 应 的 02 切换至窗体视图模式,单击
处理数据格式

VBA 代码。 按钮查看代码运行效果。

◎过程源代码
源文件\第 3 章\判断窗体是否已加载.accdb
数据排序技巧

判断指定的窗体是否已经加载,通过信息对话框返回判断结果,其具体
的 VBA 代码如下。
'判断“F_员工工资”窗体是否已经加载
Private Sub cmd_判断_Click()
If CurrentProject.AllForms("F_员工工资").IsLoaded Then
数据查询技巧

MsgBox "“F_员工工资”窗体已加载!"
Else
MsgBox "“F_员工工资”窗体没有加载!"
End If
End Sub
数据编辑技巧

◎执行过程
切换“F_判断窗体是否加载”窗体的视图模式至窗体视图,单击“判断”
按钮,结果如图 3-1 所示。
151
Access VBA 活用范例大辞典
基础操作技巧

图 3-1 判断窗体是否已加载并返回判断结果
控件和对象

094 设置窗体的标题 初 中 高
094 2003 / 2007 / 2010

设置窗体的标题
对象操作技巧

◎窗体的操作:Caption 属性

如果需要设置当前窗体的标题,可以使用窗体的 Caption 属性,并且可


结合 Me 关键字指代当前的窗体,其具体的语法格式如下所示:
Me.Caption=[窗体名]
处理数据格式

◎应用实例
素材\第 3 章\设置窗体的标题.accdb

本例中,需要在窗体加载时,通过输入对话框修改窗体的名称。
数据排序技巧

◎案例操作

01 在 “ F_ 示 例 ” 窗 体 中 添 加 02 为“Form_Open”事件过程
“Form_Open”事件过程。 添加 VBA 代码。
数据查询技巧

03 重新打开窗体,查看窗体打
开事件过程的运行效果。

◎过程源代码
数据编辑技巧

源文件\第 3 章\设置窗体的标题.accdb

通过打开的输入对话框输入欲设置的窗体名称,通过窗体的 Caption 属

152
Chapter 03 掌握 Access 中的对象操作技巧

性设置窗体的标题,其具体的 VBA 代码如下。

基础操作技巧
'修改窗体的标题
Private Sub Form_Open(Cancel As Integer)
Dim setTitle As String
setTitle = InputBox("请输入欲设置的窗体名称:")
'设置窗体的标题
Me.Caption = setTitle

控件和对象
End Sub

◎执行过程
重新打开“F_示例”窗体,输入欲设置的窗体名称,结果如图 3-2 所示。

对象操作技巧
处理数据格式

图 3-2 设置窗体的标题

095 设置窗体的高度和宽度 初 中 高
095
数据排序技巧

2003 / 2007 / 2010

设置窗体的高度和宽度
◎窗体的操作:InsideHeight 属性、InsideWidth 属性

如果需要设置当前窗体的高度和宽度,可以使用窗体的 InsideHeight 属
数据查询技巧

性和 InsideWidth 属性,其具体的语法格式如下所示:
Me.InsideHeight=[高度]
Me.InsideWidth=[宽度]

◎应用实例
数据编辑技巧

素材\第 3 章\快速调整窗体的大小尺寸.accdb

本例中,需要在窗体加载时,通过输入对话框修改窗体的高度和宽度。

153
Access VBA 活用范例大辞典

◎案例操作
基础操作技巧

01 在 “ F_ 示 例 ” 窗 体 中 添 加 02 为“Form_Current”事件过程
“Form_Current”事件过程。 添加 VBA 代码。

03 查看窗体成为当前窗体的事
控件和对象

件过程的运行效果。

◎过程源代码
源文件\第 3 章\快速调整窗体的大小尺寸.accdb
对象操作技巧

通过打开输入对话框设置窗体的高度和宽度,具体的 VBA 代码如下。


'设置打开窗体的高度和宽度
Private Sub Form_Current()
'以毫米为单位设置窗体高度
处理数据格式

Me.InsideHeight = InputBox("高度(单位:mm)") * 56.7


'以毫米为单位设置窗体宽度
Me.InsideWidth = InputBox("宽度(单位:mm)") * 56.7
End Sub

◎执行过程
数据排序技巧

重新打开“F_示例”窗体,输入欲设置的窗体的高度和宽度,结果如图
3-3 所示。
数据查询技巧
数据编辑技巧

图 3-3 设置窗体的高度和宽度

154
Chapter 03 掌握 Access 中的对象操作技巧

096 导航按钮的显示和隐藏 初 中 高
096 2003 / 2007 / 2010

基础操作技巧
导航按钮的显示和隐藏
◎窗体的操作:NavigationButtons 属性

在许多的窗体中,导航按钮是没有必要存在的,这个时候就可以将其隐

控件和对象
藏。如果确实需要使用导航按钮,再将其显示出来,这需要使用窗体的
NavigationButtons 属性来完成,其具体的语法格式如下所示:
[窗体名].NavigationButtons=[逻辑值]
其中,NavigationButtons 属性值为 True 时,导航按钮显示(默认状态)

对象操作技巧
值为 False 时,导航按钮处于隐藏状态。

◎应用实例
素材\第 3 章\导航按钮的显示和隐藏.accdb

本例中,需要通过单击窗体中的按钮切换导航按钮的显示状态,并相应
处理数据格式

的更改按钮的标题。

◎案例操作

01 在“F_员工资料”窗体中添 02 在窗体中添加“cmd_切换栏
数据排序技巧

加“导航按钮”按钮。 _Click”事件过程。

03 单击按钮运行事件过程,查
看过程运行效果。
数据查询技巧

◎过程源代码
源文件\第 3 章\导航按钮的显示和隐藏.accdb

更改窗体的 NavigationButtons 值,切换窗体中导航按钮的显示效果,更


数据编辑技巧

改按钮的标题,具体的 VBA 代码如下。


'显示和隐藏导航按钮
Private Sub cmd_切换栏_Click()

155
Access VBA 活用范例大辞典

If Me.NavigationButtons = True Then


基础操作技巧

Me.NavigationButtons = False '隐藏导航按钮


cmd_切换栏.Caption = "显示导航按钮"
Else
Me.NavigationButtons = True '显示导航按钮
cmd_切换栏.Caption = "隐藏导航按钮"
End If
控件和对象

End Sub

◎执行过程
将“F_员工资料”窗体的视图模式切换至窗体视图模式,单击按钮,查
看效果,结果如图 3-4 所示。
对象操作技巧
处理数据格式

图 3-4 导航按钮的显示和隐藏
数据排序技巧

097 记录选择器的显示和隐藏 初 中 高
097 2003 / 2007 / 2010

记录选择器的显示和隐藏
◎窗体的操作:RecordSelectors 属性
数据查询技巧

默认创建的窗体中,窗体的左侧通常有一个黑色三角形的记录选择器,
但是在许多窗体中,这个记录选择器是没有必要存在的。可以通过窗体的
RecordSelectors 属性隐藏记录选择器,其具体的语法格式如下所示:
[窗体名].RecordSelectors=[逻辑值]
数据编辑技巧

其中,RecordSelectors 属性值为 True 时,记录选择器显示(默认状态)



值为 False 时,记录选择器处于隐藏状态。

156
Chapter 03 掌握 Access 中的对象操作技巧

◎应用实例

基础操作技巧
素材\第 3 章\记录选择器的显示和隐藏.accdb

本例中,需要在“F_员工资料”窗体中单击“记录选择器”按钮的时候,
使得窗体中的记录选择器在隐藏和显示状态之间切换。

◎案例操作

控件和对象
01 在“F_员工资料”窗体中添 02 在窗体中添加“cmd_选择器
加“记录选择器”按钮。 _Click”事件过程。

对象操作技巧
03 单击按钮运行事件过程,查
看过程运行效果。

◎过程源代码
源文件\第 3 章\记录选择器的显示和隐藏.accdb
处理数据格式

更改窗体的 RecordSelectors 值,切换窗体中记录选择器的显示效果,具


体的 VBA 代码如下。
'显示和隐藏记录选择器
Private Sub cmd_选择器_Click()
数据排序技巧

Me.RecordSelectors = Not Me.RecordSelectors


End Sub

◎执行过程
将“F_员工资料”窗体的视图模式切换至窗体视图模式,单击“记录选
数据查询技巧

择器”按钮,查看效果,结果如图 3-5 所示。


数据编辑技巧

图 3-5 记录选择器的显示和隐藏
157
Access VBA 活用范例大辞典

098 设置窗体的数据源 初 中 高
098
基础操作技巧

2003 / 2007 / 2010

设置窗体的数据源
◎窗体的操作:RecordSource 属性

如果需要更改或为窗体设置新的数据源,可以使用窗体的 RecordSource
控件和对象

属性,其具体的语法格式如下所示:
[窗体名].RecordSource=[数据源]
RecordSource 属性值可以为数据库中的表或者查询的名称,也可以为其
他可以作为数据源的数据,比如其他窗体的数据源等。
对象操作技巧

◎应用实例
素材\第 3 章\设置窗体的数据源.accdb

本例中,需要在单击窗体中的“数据源”按钮时,每单击一次按钮,就
可以为窗体更换一个新的数据源。
处理数据格式

◎案例操作

01 在“F_非绑定窗体”窗体中 02 在窗体中添加“cmd_数据源
添加“数据源”按钮。 _Click”事件过程。
数据排序技巧

03 单击按钮运行事件过程,查
看过程运行效果。
数据查询技巧

◎过程源代码
源文件\第 3 章\设置窗体的数据源.accdb

通过静态变量记录单击按钮的次数,单击按钮的次数对 3 取余数,根据
余数选择窗体的数据源,具体的 VBA 代码如下。
数据编辑技巧

158
Chapter 03 掌握 Access 中的对象操作技巧

'为窗体设置不同的数据源

基础操作技巧
Private Sub cmd_数据源_Click()
Static Num As Integer
Dim n As Integer
'单击一次按钮静态变量加 1
Num = Num + 1
n = Num Mod 3

控件和对象
'单击一次按钮更换一次窗体的数据源
Select Case n
Case 0
Me.RecordSource = "T_员工工资"
Case 1

对象操作技巧
Me.RecordSource = "T_员工资料"
Case 2
Me.RecordSource = "Q_员工工资"
End Select
End Sub 处理数据格式

◎执行过程
将“F_非绑定窗体”窗体切换至窗体视图模式,单击“数据源”按钮,
每单击一次按钮,窗体的数据源更换一次,结果如图 3-6 所示。
数据排序技巧
数据查询技巧
数据编辑技巧

图 3-6 单击按钮更换窗体的数据源

159
Access VBA 活用范例大辞典

099 设置窗体中控件的数据源(1) 初 中 高
099 2003 / 2007 / 2010
基础操作技巧

设置窗体中控件的数据源(1)
◎窗体的操作:ControlSource 属性

在 DAO 中,如果需要将某个记录集设置为当前窗体的记录集,首先需
控件和对象

要将当前窗体的记录集设置为指定的记录集,然后将需要在窗体中显示记录
集中数据控件的数据来源设置为指定记录集的字段。

将窗体中控件的数据源设置为指定记录集中的字段,需要使用到控件的
RecordSource 属性,其具体的语法格式如下所示:
对象操作技巧

[窗体名].[控件名].ControlSource=[指定记录集字段名]

◎应用实例
素材\第 3 章\设置窗体中控件的数据源(1).accdb

本例中,需要在“F_工资”非绑定窗体中的文本框中,分别显示来至于
处理数据格式

“Q_员工工资”查询的员工姓名和实得工资。

◎案例操作

01 在“F_工资”窗体中添加两 02 在窗体的 Load 事件过程中


数据排序技巧

个文本框。 为文本框设置数据源。

03 重新打开窗体,查看加载窗
体为窗体设置数据源的效果。
数据查询技巧

◎过程源代码
源文件\第 3 章\设置窗体中控件的数据源(1).accdb

通过 DAO 方法获取查询中的记录集,将当前窗体的记录集设置为查询
数据编辑技巧

的记录集,设置窗体中两个文本框的数据源为记录集中的字段,具体的 VBA
代码如下。

160
Chapter 03 掌握 Access 中的对象操作技巧

'设置文本框的数据源为查询中的某个字段

基础操作技巧
Private Sub Form_Load()
Dim db As DAO.Database
Dim rs As DAO.Recordset
'获取查询中的记录集
Set db = CurrentDb
Set rs = db.OpenRecordset("Q_员工工资", dbOpenDynaset)

控件和对象
'设置查询的记录集为当前窗体的记录集
Set Me.Recordset = rs
'设置当前窗体中两个文本框的数据源
With Me
.txt_姓名.ControlSource = "姓名"

对象操作技巧
.txt_工资.ControlSource = "实得工资"
End With
Set rs = Nothing
Set db = Nothing
End Sub 处理数据格式

◎执行过程
重新打开“F_工资”窗体,可以查看在加载事件中为窗体中文本框设置
数据源前后的效果,结果如图 3-7 所示。
数据排序技巧

图 3-7 为窗体中的文本框设置数据源的前后效果
数据查询技巧

100 设置窗体中控件的数据源(2) 初 中 高
100 2003 / 2007 / 2010

设置窗体中控件的数据源(2)
◎窗体的操作:ControlSource 属性
数据编辑技巧

在 ADO 中,如果需要将某个记录集中的数据设置到窗体中的控件中,
首先需要连接到该记录集,然后将窗体的记录集设置为指定的记录集,然后

161
Access VBA 活用范例大辞典

将控件的数据源指定为记录集的字段。
基础操作技巧

将窗体中控件的数据源设置为指定记录集中的字段,需要使用到控件的
RecordSource,其具体的语法格式如下所示:
[窗体名]![控件名].ControlSource=[指定记录集字段名]

◎应用实例
控件和对象

素材\第 3 章\设置窗体中控件的数据源(2).accdb

本例中,需要在“F_工资”非绑定窗体中的文本框中,分别显示来至于
“Q_员工工资”查询的员工姓名和部门。
对象操作技巧

◎案例操作

01 在“F_工资”窗体中添加两 02 在窗体的 Load 事件过程中


个文本框。 为文本框设置数据源。
处理数据格式

03 重新打开窗体,查看为窗体
设置数据源的效果。

◎过程源代码
数据排序技巧

源文件\第 3 章\设置窗体中控件的数据源(2).accdb

连接至指定的数据库,打开记录集并将其设置为当前窗体的记录集,设
置控件的数据源为记录集的字段,具体的 VBA 代码如下。
'设置窗体中文本框的数据源
数据查询技巧

Private Sub Form_Load()


Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
'连接到当前的数据库
Set cn = CurrentProject.Connection
数据编辑技巧

rs.CursorLocation = adUseClient
rs.Open "T_员工资料", cn, adOpenKeyset, adLockOptimistic
Set Me.Recordset = rs
'设置窗体中的文本框的数据源

162
Chapter 03 掌握 Access 中的对象操作技巧

Me!txt_姓名.ControlSource = "姓名"

基础操作技巧
Me!txt_部门.ControlSource = "部门"
Set rs = Nothing
Set cn = Nothing
End Sub

◎执行过程

控件和对象
重新打开“F_工资”窗体,在加载事件中,可以查看到为窗体中文本框
设置数据源前后的效果,结果如图 3-8 所示。

对象操作技巧
图 3-8 为窗体中的文本框设置数据源的前后效果
处理数据格式

提示:直接将数据集字段设置为控件值
示例 099 和 100 中,均采用了先将记录集设置为窗体的记录集,再将记录集的字
段设置为控件的数据源的方法。也可以直接将记录集中的字段设置到窗体中的控
件中。本例采用该方法的代码如下( 源文件\第 3 章\设置窗体中控件的数据
源(3).accdb) 。
数据排序技巧

'设置控件值为记录集字段
Private Sub Form_Load()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
'连接到当前的数据库,获取记录集
数据查询技巧

Set cn = CurrentProject.Connection
rs.CursorLocation = adUseClient
rs.Open "T_员工资料", cn, adOpenKeyset, adLockOptimistic
'设置窗体中的文本框的值为记录集的字段
Me!txt_姓名 = rs.Fields("姓名")
数据编辑技巧

Me!txt_部门 = rs.Fields("部门")
Set rs = Nothing
Set cn = Nothing
End Sub

163
Access VBA 活用范例大辞典

101 窗体记录的双击事件 初 中 高
101 2003 / 2007 / 2010
基础操作技巧

窗体记录的双击事件
◎窗体的操作:DblClick 事件

如果需要在单击窗体中的某条记录的某个字段时执行某项操作,可以将
控件和对象

该操作设置在窗体记录字段的某个事件中。

比如需要在窗体中双击任意一条记录的“姓名”字段的时候,执行某项
操作,可以在姓名字段的 DblClick 事件中设置代码,其具体的语法格式如下
所示:
对象操作技巧

Private Sub 姓名_DblClick(Cancel As Integer)


[双击记录字段记录时执行的代码]
End Sub
需要注意窗体及其中的控件一般都包含有单击事件(Click)和双击
处理数据格式

(DbClick)事件。

如果同时为控件设置了单击事件和双击事件,那么在双击控件时,会先
执行单击事件,然后执行双击事件,而不是只执行双击事件。

◎应用实例
数据排序技巧

素材\第 3 章\窗体记录的双击事件.accdb

本例中,需要在“F_员工工资”窗体中单击任意一条记录的“姓名”字
段时,打开“F_员工资料”窗体,在该窗体中显示员工的基本资料。
数据查询技巧

◎案例操作

01 在“M_变量”模块中定义全 02 为“F_员工工资”窗体添加
局变量“StrName”
。 “姓名_DblClick”事件过程。
数据编辑技巧

03 为“F_员工资料”窗体添加 04 切换窗体视图,双击记录姓
“Form_Load”事件过程。 名字段,查看程序运行效果。

164
Chapter 03 掌握 Access 中的对象操作技巧

◎过程源代码

基础操作技巧
源文件\第 3 章\窗体记录的双击事件.accdb

首先定义一个保存姓名的全局名称,然后在“F_员工工资”窗体和“F_
员工资料”窗体中分别双击事件和加载事件,添加对应的 VBA 代码,具体
的 VBA 代码如下。

控件和对象
'在模块中定义全局变量
Public strName As String

'双击时获取姓名字段,打开“F_员工资料”窗体
Private Sub 姓名_DblClick(Cancel As Integer)

对象操作技巧
strName = Me!姓名 '使用全局变量获取双击的姓名
DoCmd.OpenForm "F_员工资料" '打开“F_员工资料”窗体
End Sub

'加载“F_员工资料”窗体时,窗体记录跳转至双击的姓名字段记录
处理数据格式

Private Sub Form_Load()


On Error GoTo 1000
DoCmd.GoToControl "姓名"
DoCmd.FindRecord strName
1000:
End Sub
数据排序技巧

◎执行过程
打开“F_员工工资”窗体,双击任意姓名打开“F_员工资料”窗体,结
果如图 3-9 所示。
数据查询技巧
数据编辑技巧

图 3-9 双击记录姓名打开员工的资料

165
Access VBA 活用范例大辞典

102 创建以及删除窗体 初 中 高
102 2003 / 2007 / 2010
基础操作技巧

创建以及删除窗体
◎窗体的操作:CreateForm 方法、Save 方法、DeleteObject 方法

如果需要创建一个空白的窗体,并以指定的名称将其保存到数据库中,
控件和对象

可以使用 DoCmd 对象的 CreatForm 方法来完成,并使用 Save 方法进行保存,


其具体的语法格式如下所示:
Set [窗体变量]=CreateForm([数据库名],[窗体模版])
DoCmd.Save ,[新建的窗体的名称]
对象操作技巧

如果是在当前数据库中创建窗体,数据库名可以省略。

在某些情况下,通过 VBA 代码对窗体进行某些操作之后,虽然操作执


行成功,但是却不能够立即显示出来。这时使用 RefreshDatabaseWindow 语
句就可以立即刷新数据库窗口。
处理数据格式

窗体的删除则相对简单,只需要使用 DoCmd 对象的 DeleteObject 方法即


可。使用该方法可以删除数据库中的对象,比如删除其中的窗体,就可以使
用下面的代码来进行:
DoCmd.DeleteObject acForm, [窗体名称]
数据排序技巧

◎应用实例
素材\第 3 章\创建以及删除窗体.accdb

本例中,需要在单击“创建窗体”按钮时,在数据库中创建一个名为“F_
创建示例窗体”窗体;单击“删除窗体”按钮时,删除已经创建的“F_创建
数据查询技巧

示例窗体”
,并且要求创建和删除窗体的效果,可以从对象浏览器中即时反映
出来。

◎案例操作
数据编辑技巧

01 在“F_创建窗体”窗体中插 02 为添加的按钮新增按钮的单
入两个按钮。 击事件过程。

166
Chapter 03 掌握 Access 中的对象操作技巧

03 在事件过程中分别添加创建 04 切换窗体视图,单击按钮,

基础操作技巧
和删除窗体的代码。 查看程序运行效果。

◎过程源代码
源文件\第 3 章\创建以及删除窗体.accdb

控件和对象
创建并以指定名称保存空白窗体,刷新数据库窗口;删除指定的窗体,
刷新数据库窗口,其具体的 VBA 代码如下。
'创建新的空白窗体
Private Sub cmd_创建_Click()

对象操作技巧
Dim Fm As Form
'创建窗体
Set Fm = CreateForm
'保存窗体
DoCmd.Save , "F_创建示例窗体"
处理数据格式

'关闭创建的窗体
DoCmd.Close acForm, "F_创建示例窗体"
'刷新数据库窗口
RefreshDatabaseWindow
End Sub
数据排序技巧

'删除指定名称的窗体
Private Sub cmd_删除_Click()
'删除窗体
DoCmd.DeleteObject acForm, "F_创建示例窗体"
'刷新数据库窗口
数据查询技巧

RefreshDatabaseWindow
End Sub

◎执行过程
切换“F_创建窗体”窗体至窗体视图,单击“创建窗体”按钮和“删除
数据编辑技巧

窗体”按钮,结果如图 3-10 所示。

167
Access VBA 活用范例大辞典
基础操作技巧
控件和对象

图 3-10 创建(上图)和删除(下图)窗体
对象操作技巧

103 关闭所有打开的窗体 初 中 高
103 2003 / 2007 / 2010

关闭所有打开的窗体
◎窗体的操作:Close 方法、Count 方法
处理数据格式

如果需要关闭某个窗体,可以使用 DoCmd 对象的 Close 方法,其具体的


语法格式为:
DoCmd.Close acForm,[窗体名]
数据排序技巧

如果需要关闭所有已经打开的窗体,
可以先使用 Forms 对象集合的 Count
方法对打开的窗体进行计数,其具体的语法格式为:
Forms.Count
然后通过 Do While…Loop 语句,在窗体中打开的窗体不为 0 时,关闭
数据查询技巧

窗体对象集合中的第一个窗体。

◎应用实例
素材\第 3 章\关闭所有打开的窗体.accdb

本例中,需要关闭当前数据库中所有打开的窗体。
数据编辑技巧

168
Chapter 03 掌握 Access 中的对象操作技巧

◎案例操作

基础操作技巧
01 在“F_关闭打开窗体”窗体 02 为 窗 体 添 加 “ cmd_ 关 闭
中添加“关闭打开窗体”按钮。 _Click”事件过程。

03 在“cmd_关闭_Click”事件 04 切换窗体视图,单击“关闭

控件和对象
过程添加 VBA 代码。 打开窗体”按钮,查看效果。

◎过程源代码
源文件\第 3 章\关闭所有打开的窗体.accdb

对象操作技巧
判断当前数据库中的打开窗体数目是否大于 0,是则关闭排在第一位的
窗体,重复执行该操作,直到当前打开的窗体的数目不大于 0 为止,具体的
VBA 代码如下。
'关闭所有打开的窗体
处理数据格式

Private Sub cmd_关闭_Click()


'当窗体数目大于 0 时,删除其中的第一个窗体
Do While Forms.Count > 0
DoCmd.Close acForm,Forms(0).Name
Loop
End Sub
数据排序技巧

◎执行过程
切换“F_关闭打开窗体”窗体至窗体视图,单击“关闭打开窗体”按钮,
结果如图 3-11 所示。
数据查询技巧
数据编辑技巧

图 3-11 关闭当前窗体中所有打开的窗体

169
Access VBA 活用范例大辞典

104 调整窗体的可编辑状态 初 中 高
104 2003 / 2007 / 2010
基础操作技巧

调整窗体的可编辑状态
◎窗体的操作:AllowEdits 属性、Refresh 方法

为了避免意外修改窗体导致数据库中的数据出错,可以设置窗体的可编
控件和对象

辑状态来避免,这需要通过窗体的 AllowEdits 属性来实现,其具体的语法格


式为:
[窗体名].AllowEdits=[逻辑值]
当逻辑值为 True 时,窗体处于可编辑状态;逻辑值为 False 时,窗体处
对象操作技巧

于不可编辑状态。

需要注意的是,如果对窗体中的数据进行编辑后,没有保存或刷新就切
换可编辑状态,可能不会成功。

可以使用窗体的 Refresh 方法刷新窗体,使得对窗体的设置立即生效,


处理数据格式

其具体的语法格式为:
[窗体名].Refresh

◎应用实例
素材\第 3 章\调整窗体的可编辑状态.accdb
数据排序技巧

本例中,需要在“F_工资”窗体中单击“当前(不)允许编辑”按钮时,
可以切换窗体的可编辑状态。

◎案例操作
数据查询技巧

01 在“F_工资”窗体中添加一 02 为 窗 体 添 加 “ cmd_ 编 辑
个按钮。 _Click”事件过程。

03 在“cmd_编辑_Click”事件 04 切换窗体视图,单击按钮,
数据编辑技巧

过程添加 VBA 代码。 查看程序运行效果。

170
Chapter 03 掌握 Access 中的对象操作技巧

◎过程源代码

基础操作技巧
源文件\第 3 章\调整窗体的可编辑状态.accdb

反转窗体可编辑状态,更改窗体中按钮的标题以显示当前窗体的可编辑
状态,刷新窗体,具体的 VBA 代码如下。
'设置窗体中的数据的可编辑状态

控件和对象
Private Sub cmd_编辑_Click()
'反转窗体的可编辑状态
Me.AllowEdits = Not Me.AllowEdits
'根据可编辑状态修改按钮的标题,提示当前可编辑状态
If Me.AllowEdits = True Then

对象操作技巧
cmd_编辑.Caption = "当前允许编辑"
Else
cmd_编辑.Caption = "当前不允许编辑"
End If
'刷新当前的窗体
Me.Refresh
处理数据格式

End Sub

◎执行过程
切换“F_工资”窗体至窗体视图,单击“当前(不)允许编辑”按钮,
结果如图 3-12 所示。
数据排序技巧
数据查询技巧
数据编辑技巧

图 3-12 更改当前窗体的可编辑状态

171
Access VBA 活用范例大辞典

105 引用窗体中的控件 初 中 高
105
基础操作技巧

2003 / 2007 / 2010

引用窗体中的控件
◎窗体的操作:Controls 属性

如果需要对窗体中的控件进行设置,可以通过窗体的属性 Controls 属性
控件和对象

进行,其具体的语法格式为:
[窗体名].Controls([控件名])
并且,通过 Controls 属性引用的不仅是窗体、子窗体或者报表中的控件
之一,还可以引用指定对象的节,如窗体的节、附加到控件的节等。
对象操作技巧

通过 Controls 属性还可以引用其他位置的控件或者节,比如需要引用其
他窗体上的控件,可以使用如下所示的代码:
Forms([窗体名]).Controls([控件名])

◎应用实例
处理数据格式

素材\第 3 章\引用窗体中的控件.accdb

本例中,需要通过引用“F_员工资料”窗体中的控件,设置控件宽度和
左边距属性,使得调整窗体的大小时,窗体中的标签和文本框始终填满窗体
的内部宽度。
数据排序技巧

◎案例操作

01 在“F_员工资料”窗体中添 02 在“Form_Resize”事件过程
加“Form_Resize”事件过程。 中添加 VBA 代码。
数据查询技巧

03 切换窗体视图,调整窗体的
宽度,查看程序运行效果。
数据编辑技巧

◎过程源代码
源文件\第 3 章\引用窗体中的控件.accdb

设置窗体中标签和文本框的宽度和边距,具体的 VBA 代码如下。

172
Chapter 03 掌握 Access 中的对象操作技巧

'设置窗体中标签和文本框的宽度和边距

基础操作技巧
Private Sub Form_Resize()
On Error Resume Next
'设置标签左边距为 4 毫米
Me.Controls("员工编号_label").Left = 56.7 * 4
'设置标签宽度为窗体宽度减去边距的一半
Me.Controls("员工编号_label").Width = Me.InsideWidth / 2 - 56.7 * 8

控件和对象
'设置文本框的左边距为窗体宽度的一半
Me.Controls("员工编号").Left = Me.InsideWidth / 2
'设置文本框宽度为窗体宽度减去边距的一半
Me.Controls("员工编号").Width = Me.InsideWidth / 2 - 56.7 * 8
End Sub

对象操作技巧
◎执行过程
切换“F_员工资料”窗体至窗体视图,调整窗体的宽度查看程序运行效
果,结果如图 3-13 所示。 处理数据格式

图 3-13 控件随窗体宽度的改变而改变
数据排序技巧
数据查询技巧
数据编辑技巧

173
Chapter 04
数据格式处理技巧

突出显示、以特殊格式显示数据等,都可以通过对数据格式
的设置来实现,比如数据的字体、颜色、粗细以及小数位数等。
本章将通过一些简单的示例来演示如何为数据设置各种格
式,包括数据的字体格式、数值型数据的特殊格式等。

▼主要内容
◎文本的外观格式
ForeColor 属性、RGB()函数、FontBold 属性、FontBold 属性……
◎字符串数据处理
StrConv()函数、Chr()函数、Len()函数、Mid()函数、InStr()函数……
◎数值数据处理
FormatCurrency()函数、Int()函数、Fix()函数、Round()函数……
◎日期数据处理
Date()函数、Time()函数、Now()函数、DateValue()函数、Year()函数()……

▼涉及案例
◎设置对象文本的前景颜色
◎设置文本的对齐方式
◎设置文本的排列方式
◎将数值四舍五入到指定位数
◎获取指定范围内的随机数
◎将字符串日期转转为标准日期
◎计算两个日期之间的时间间隔
……
Chapter 4 数据格式处理技巧

106 设置对象文本的前景颜色 初 中 高
106 2003 / 2007 / 2010

基础操作技巧
设置对象文本的前景颜色
◎文本的外观格式:ForeColor 属性、RGB()函数

在窗体上添加的任何对象,如果需要为对象上的文本设置颜色效果,则

控件和对象
可以使用对象的 ForeColor 属性来完成,其具体的语法格式为:
object.ForeColor =[颜色]
在该语句中,object 对象是必须存在的部分,用于指定窗体上的有效对
象,在 Access VBA 中,颜色可以使用程序内置的颜色常量来替代,如表 4-1

对象操作技巧
所示。

表 4-1 VBA 内置的颜色常量值

常数 值 颜色 常数 值 颜色
vbBlack 0x0 黑色 vbBlue 0xFF0000 蓝色
处理数据格式

vbRed 0xFF 红色 vbMagenta 0xFF00FF 紫红色


vbGreen 0xFF00 绿色 vbCyan 0xFFFF00 青色
vbYellow 0xFFFF 黄色 vbWhite 0xFFFFFF 白色

此外,用户还可以使用程序内置的 RGB()函数来自定义需要显示的颜色,
数据排序技巧

其具体的语法格式如下:
RGB(red,green,blue)
其中,red 参数表示颜色中的红色成分,green 参数表示颜色中的绿色成
分,blue 参数表示颜色中的蓝色成分,这 3 个参数的取值范围都为 0~255。
数据查询技巧

由 RGB()函数确定常见的颜色如表 4-2 所示。

表 4-2 RGB()函数指定的常见颜色参数值

颜色 RGB 值 颜色 常数 值 颜色
红色 黄色 黑色
数据编辑技巧

RGB(255,0,0) RGB(255,255,0) RGB(0,0,0)


绿色 RGB(0,255,0) 青色 RGB(0,255,255) 白色 RGB(255,255,255)
蓝色 RGB(0,0,255) 洋红色 RGB(2550,0,255)

175
Access VBA 活用范例大辞典

◎应用实例
基础操作技巧

素材\第 4 章\设置对象文本的前景颜色.accdb

假设在“欢迎界面”窗体中有 WelcomeLab 和 ContentLab 两个标签,其


中,WelcomeLab 标签用于显示“欢迎使用本系统”内容,ContentLab 标签
用于显示“××用户,您的信息已经通过验证”内容。
控件和对象

现需要在打开“欢迎界面”窗体的时候自动打开一个输入用户 ID 的对
话框,当用户输入完相应的用户 ID 后,自动加载“欢迎界面”窗体,并分
别为标签添加对相应的显示内容,然后将 WelcomeLab 和 ContentLab 标签中
的文本分别用“红色”和“蓝色”显示。
对象操作技巧

◎案例操作

01 将“欢迎界面”窗体界面切 02 通过设计视图模式进入 VBA


换到设计视图。 编辑器。
处理数据格式

03 为 “ 欢 迎 界 面 ” 窗 体 添 加 04 在事件过程中添加设置标签
“Form_Open”事件过程。 文本颜色的代码。

05 执行程序过程查看程序运行
数据排序技巧

效果。

◎过程源代码
源文件\第 4 章\设置对象文本的前景颜色.accdb
数据查询技巧

在事件过程中编写对应的 VBA 代码,


完成获取用户 ID,
并为 WelcomeLab
标签和 ContentLab 标签添加文本和设置文本颜色的功能,其具体的 VBA 代
码如下。
Private Sub Form_Open(Cancel As Integer)
'定义获取用户 ID 的字符串变量
数据编辑技巧

Dim UserID As String


'获取用户 ID
UserID = InputBox("用户信息验证", , "[请输入用户 ID]")

176
Chapter 4 数据格式处理技巧

'为 WelcomeLab 标签添加显示文本,并设置文本颜色

基础操作技巧
Me.WelcomeLab.Caption = "欢迎使用本系统"
Me.WelcomeLab.ForeColor = vbRed
'为 ContentLab 标签添加显示文本,并设置文本颜色
Me.ContentLab.Caption = UserID & "用户,您的信息已经通过验证"
Me.ContentLab.ForeColor = RGB(0, 0, 255)
End Sub

控件和对象
◎执行过程
保存编写的 VBA 代码,将设计视图的窗体模式切换到窗体视图,此时
程序自动开始运行,其具体的运行过程如图 4-1 所示。

对象操作技巧
处理数据格式

图 4-1 更改标签文本颜色的效果

107 设置对象中文本的字号
数据排序技巧

初 中 高
107 2003 / 2007 / 2010

设置对象中文本的字号
◎文本的外观格式:FontSize 属性
数据查询技巧

为了让不同级别的文本效果从字号大小上进行区别,可以通过编写 VBA
代码的方式强制对指定对象上文本的字号进行设置,其实现方法是通过
FontSize 属性来完成的,其具体的语法格式为:
object.FontSize=[字号]
数据编辑技巧

其中,object 对象是必须存在的部分,用于指定窗体上的有效对象,通
过该属性设置的字号大小是使用磅值来量化的,其属性值的取值范围为
1~127(包含 1 和 127)

177
Access VBA 活用范例大辞典

◎应用实例
基础操作技巧

素材\第 4 章\设置对象中文本的字号.accdb

假设在“用户登录界面”窗体中有 TitleLab 和 InfoLab 两个标签,其中,


TitleLab 标签用于显示“××公司员工档案管理系统”内容,InfoLab 标签用
于显示“××用户名为合法用户名”内容。
控件和对象

现在需要在打开“用户登录界面”窗体时自动打开一个输入用户名的对
话框,当用户输入完相应的用户名后,自动加载“欢迎界面”窗体,并分别
为标签添加相应的显示内容,要求标题用 22 磅的字号显示,验证信息为红色
的 16 磅的字号显示,并且需要使用分割线来分割这两个文本内容。
对象操作技巧

◎案例操作

01 将“用户登录界面”窗体界 02 通过设计视图模式进入 VBA


面切换到设计视图。 编辑器。
处理数据格式

03 为“用户登录界面”窗体添 04 在事件过程中添加设置标签
加“Form_Open”事件过程。 文本字号的代码。

05 执行程序过程查看程序运行
数据排序技巧

效果。

◎过程源代码
源文件\第 4 章\设置对象中文本的字号.accdb
数据查询技巧

在事件过程中编写对应的 VBA 代码,完成输入用户名,并在窗体中按


指定字号大小和布局效果显示标签的文本内容,其具体的 VBA 代码如下。
Private Sub Form_Open(Cancel As Integer)
'定义获取用户名的字符串变量
Dim UserName As String
数据编辑技巧

'获取用户名
UserName = InputBox("登录界面", , "[请输入用户名]")
'为 TitleLab 标签添加显示文本,并设置文本字号为 22

178
Chapter 4 数据格式处理技巧

Me.TitleLab.Caption = "××公司员工档案管理系统"

基础操作技巧
Me.TitleLab.FontSize = 22
'为 InfoLab 标签添加显示文本,并设置文本颜色为红色,字号为 16
Me.InfoLab.Caption = "______________________________________________" _
& vbCrLf & vbCrLf & UserName & "用户名为合法用户名!"
Me.InfoLab.ForeColor = vbRed
Me.InfoLab.FontSize = 16

控件和对象
End Sub

◎执行过程
保存编写的 VBA 代码,将设计视图模式的窗体切换到窗体视图,此时
程序自动开始运行,其具体的运行过程如图 4-2 所示。

对象操作技巧
处理数据格式

图 4-2 更改标签文本的字号
数据排序技巧

提示:FontSize 属性的补充说明
在 VBA 编程过程中,FontSize 属性为可读可写的属性,除了为指定的文本设置字
号大小以外,还可以读取指定数据的字号大小,例如现在要读取用户登录界面中
TitleLab 标签和 InfoLab 标签中文本字号的大小,可以使用如下代码来完成(
数据查询技巧

源文件\第 4 章\读取对象中文本的字号大小.accdb) 。

Private Sub Form_Open(Cancel As Integer)


'定义两个获取字号值的变量
Dim Title As Integer
数据编辑技巧

Dim Info As Integer


'获取标签控件上文本的字号
Title = Me.TitleLab.FontSize
Info = Me.InfoLab.FontSize

179
Access VBA 活用范例大辞典

'在对话框中分行显示字号大小
基础操作技巧

MsgBox "标题文本的字号为:" & Title & vbCrLf & _


"验证信息的字号为:" & Info
End Sub

108 将文本加粗显示 初 中 高
108 2003 / 2007 / 2010
控件和对象

将文本加粗显示
◎文本的外观格式:FontBold 属性

在 VBA 编程中,可以通过为对象的 FontBold 属性进行设置来实现文本


的加粗显示,其具体的语法格式为:
对象操作技巧

[对象].FontBold=[逻辑值]
其中,逻辑值为 True 时,为对象的字体进行加粗。也可以使用数字等可
以转换为逻辑值的数据类型来设置是否对对象的字体进行加粗。
处理数据格式

◎应用实例
素材\第 4 章\将文本加粗显示.accdb

本例中,需要实现在单击“F_加粗”窗体中的“加粗”按钮后,将文本
框中的文字加粗,再次单击该按钮取消加粗。
数据排序技巧

◎案例操作

01 在“F_加粗”窗体中插入文 02 为 窗 体 添 加 “ cmd_ 加 粗
本框和“加粗”按钮。 _Click”事件过程。
数据查询技巧

03 在“cmd_加粗_Click”事件 04 执行程序过程查看程序运行
过程中添加 VBA 代码。 效果。
数据编辑技巧

◎过程源代码
源文件\第 4 章\将文本加粗显示.accdb

在事件过程中编写对应的 VBA 代码,通过静态变量记录窗体单击的次

180
Chapter 4 数据格式处理技巧

数,然后根据单击按钮的次数的奇偶性,设置文本框中的文字是否加粗,其

基础操作技巧
具体的 VBA 代码如下。
'切换文本框中文字的加粗效果
Private Sub cmd_加粗_Click()
'定义静态变量,用于获取单击按钮的次数
Static n As Integer

控件和对象
Dim i As Integer
'记录单击按钮的次数
n=n+1
'判断单击按钮次数的奇偶
i = n Mod 2

对象操作技巧
'根据单击按钮次数设置加粗效果
Me.txt_示例.FontBold = i
End Sub

◎执行过程
保存编写的 VBA 代码,在文本框中输入文字,单击按钮切换文字的加
处理数据格式

粗效果,如图 4-3 所示。


数据排序技巧

图 4-3 设置文本框内容的加粗效果

109 将文本倾斜显示
数据查询技巧

初 中 高
109 2003 / 2007 / 2010

将文本倾斜显示
◎文本的外观格式:FontItalic 属性
数据编辑技巧

在 VBA 编程中,如果需要将某些内容进行倾斜显示,可以通过对象的
FontItalic 属性来进行设置,其具体的语法格式为:

181
Access VBA 活用范例大辞典

[对象].FontItalic=[逻辑值]
基础操作技巧

当逻辑值为 True 时,表示的是为对象字体设置倾斜效果,否则不会显示


倾斜效果。

◎应用实例
素材\第 4 章\将文本倾斜显示.accdb
控件和对象

本例中,需要在加载“F_员工工资”窗体的时候,为窗体中的“提成”
字段设置倾斜效果。

◎案例操作
对象操作技巧

01 在“F_员工工资”窗体中插 02 为窗体添加“Form_Load”事
入文本框和“倾斜”按钮。 件过程。

03 在“Form_Load”事件过程中 04 执行程序过程查看程序运行
处理数据格式

添加 VBA 代码。 效果。

◎过程源代码
源文件\第 4 章\将文本倾斜显示.accdb
数据排序技巧

在事件过程中编写对应的 VBA 代码,设置窗体中记录的“提成”字段


的字体倾斜效果,其具体的 VBA 代码如下。
'设置提成字段的字体为倾斜效果
Private Sub Form_Load()
数据查询技巧

Me.提成.FontItalic = True
End Sub

◎执行过程
切换“F_员工工资”窗体至窗体视图,查看窗体加载事件过程的运行效
果,如图 4-4 所示。
数据编辑技巧

182
Chapter 4 数据格式处理技巧

基础操作技巧
控件和对象
图 4-4 设置“提成”字段的字体倾斜效果

110 为文本设置下划线 初 中 高
110 2003 / 2007 / 2010

对象操作技巧
为文本设置下画线
◎文本的外观格式:FontUnderline 属性

在 VBA 编程中,如果需要为指定文本设置下画线效果,可以使用对象
处理数据格式

的 FontUnderline 属性来实现,其具体的语法格式为:
[对象].FontUnderline=[逻辑值]
当逻辑值为 True 时,表示为对象的字体设置下画线。

◎应用实例
数据排序技巧

素材\第 4 章\为文本设置下画线.accdb

本例中,需要模拟 Office 软件中的“下画线”按钮,在单击“U”按钮


时,可以为标签中的文本添加下画线,再次单击该按钮之后去掉下画线。
数据查询技巧

◎案例操作

01 在“F_下画线”窗体中插入 02 为窗体添加“cmd_ 下画线


标签和“U”按钮。 _Click”事件过程。
数据编辑技巧

03 在“cmd_下画线_Click”事 04 执行程序过程查看程序运行
件过程中添加 VBA 代码。 效果。

183
Access VBA 活用范例大辞典

◎过程源代码
基础操作技巧

源文件\第 4 章\为文本设置下画线.accdb

在事件过程中编写对应的 VBA 代码,将对象当前的下画线属性取反,


其具体的 VBA 代码如下。
'模拟“下画线”按钮
控件和对象

Private Sub cmd_下画线_Click()


lab_下画线.FontUnderline = Not lab_下画线.FontUnderline
End Sub

◎执行过程
对象操作技巧

切换“F_下画线”窗体至窗体视图,单击“U”按钮,标签文本的下画
线在如图 4-5 所示的两种效果中切换。

设置下画线! 设置下画线!
处理数据格式

图 4-5 为标签文本设置下画线

111 更改文本的字体 初 中 高
111
数据排序技巧

2003 / 2007 / 2010

更改文本的字体
◎文本的外观格式:FontName 属性

在 VBA 编程中,如果需要更改对象中文本的字体格式,可以通过设置
数据查询技巧

对象的 FontName 属性来完成,其具体的语法格式为:


[对象].FontName=[字体名称]
如果设置的字体在当前系统中不存在,则会使用默认的字体。
数据编辑技巧

◎应用实例
素材\第 4 章\更改文本的字体.accdb

本例中,需要在“字体”组合框中选择了相应的选项后,将文本框中的

184
Chapter 4 数据格式处理技巧

文本更改为选项指定的字体。

基础操作技巧
◎案例操作

01 在“F_字体”窗体中插入“字 02 为 窗 体 添 加 “ cmb_ 字 体
体”组合框和文本框。 _Change”事件过程。

控件和对象
03 在“cmb_字体_Change”事 04 执行程序过程查看程序运行
件过程中添加 VBA 代码。 效果。

◎过程源代码

对象操作技巧
源文件\第 4 章\更改文本的字体.accdb

在事件过程中编写对应的 VBA 代码,将对象的字体名称属性设置为组


合框名称,其具体的 VBA 代码如下。 处理数据格式

'通过更改组合框选项设置文本框中的字体格式
Private Sub cmb_字体_Change()
Me.txt_字体.FontName = cmb_字体
End Sub

◎执行过程
数据排序技巧

切换“F_字体”窗体至窗体视图,在文本框中输入文本内容 ,在“字
体”组合框中选择字体名称,结果如图 4-6 所示。
数据查询技巧

图 4-6 设置文本框中文本的字体
数据编辑技巧

185
Access VBA 活用范例大辞典

112 设置文本的对齐方式 初 中 高
112 2003 / 2007 / 2010
基础操作技巧

设置文本的对齐方式
◎文本的外观格式:TextAlign 属性

在 VBA 编程中,
可以为对象的 TextAlign 属性设置对象文本的对齐方式,
控件和对象

其具体的语法格式为:
[对象].TextAlign=[对齐常量]
对齐常量为 0 到 4 之间的整数,其具体的含义如表 4-3 所示。

表 4-3 TextAlign 属性的常量值及其含义


对象操作技巧

常量 对齐方式 说明
0 常规 默认值,文本左对齐,日期和数字右对齐
1 左对齐 文本、日期和数字均左对齐
2 居中 文本、日期和数字均居中对齐
处理数据格式

3 右对齐 文本、日期和数字均右对齐
4 分散对齐 文本、日期和数字均匀分布

◎应用实例
素材\第 4 章\设置文本的对齐方式.accdb
数据排序技巧

本例中,需要在单击“F_对齐”窗体中的“随机对齐”按钮后,为文本
框中的字体随机设置一种对齐方式。

◎案例操作
数据查询技巧

01 在“F_对齐”窗体中插入“随 02 为 窗 体 添 加 “ cmb_ 对 齐
机对齐”按钮和文本框。 _Change”事件过程。

03 在“cmb_对齐_Change”事 04 执行程序过程查看程序运行
数据编辑技巧

件过程中添加 VBA 代码。 效果。

186
Chapter 4 数据格式处理技巧

◎过程源代码

基础操作技巧
源文件\第 4 章\设置文本的对齐方式.accdb

在事件过程中编写对应的 VBA 代码,将文本框的对齐方式设置为 0 到 4


之间的随机整数,其具体的 VBA 代码如下。
'为文本框随机设置对齐方式

控件和对象
Private Sub cmd_对齐_Click()
txt_字体.TextAlign = Int(Rnd * 5)
End Sub

◎执行过程

对象操作技巧
切换“F_对齐”窗体至窗体视图,在文本框中输入文本内容,单击“随
机对齐”按钮,结果如图 4-7 所示。

处理数据格式

图 4-7 设置文本框中文本的对齐方式
数据排序技巧

113 设置文本的排列方式 初 中 高
113 2003 / 2007 / 2010

设置文本的排列方式
◎文本的外观格式:Vertical 属性
数据查询技巧

字体的排列方式,一般有竖排和横排两种,横排为常用的排列方式,如
果需要将字体的排列方式设置为竖排方式,可以使用对象的 Vertical 属性,
其具体的语法格式为:
[对象].Vertical=[逻辑值]
数据编辑技巧

当 Vertical 属性值为 True 时,表示对象采用了文字竖排的方式。默认情


况下,该值为 False。

187
Access VBA 活用范例大辞典

◎应用实例
基础操作技巧

素材\第 4 章\设置文本的排列方式.accdb

本例中,需要在单击“F_排列”窗体中的按钮后,将文本框中的文本按
照按钮当前指定的排列方式进行排列。

◎案例操作
控件和对象

01 在“F_排列”窗体中插入“竖 02 为 窗 体 添 加 “ cmb_ 排 列
排”按钮。 _Click”事件过程。
对象操作技巧

03 在“cmb_排列_Click”事件 04 执行程序过程查看程序运行
过程中添加 VBA 代码。 效果。

◎过程源代码
处理数据格式

源文件\第 4 章\设置文本的排列方式.accdb

在事件过程中编写对应的 VBA 代码,将文本框当前文本排列方式取反,


根据取反结果修改按钮的标题,其具体的 VBA 代码如下。
'更改文本框的排列方式
数据排序技巧

Private Sub cmd_排列_Click()


'对当前的文本框的排列方式取反
txt_排列.Vertical = Not txt_排列.Vertical
'根据取反后文本的排列方式更改按钮的标题
If txt_排列.Vertical = True Then
cmd_排列.Caption = "横排"
数据查询技巧

Else
cmd_排列.Caption = "竖排"
End If
End Sub

◎执行过程
数据编辑技巧

切换“F_排列”窗体至窗体视图,单击按钮查看程序运行效果,结果如
图 4-8 所示。

188
Chapter 4 数据格式处理技巧

基础操作技巧
控件和对象
图 4-8 设置文本框中文本的排列方式

对象操作技巧
114 控制文本框中的输入值 初 中 高
114 2003 / 2007 / 2010

控制文本框的输入值
◎文本的外观格式:InputMask 属性 处理数据格式

如果需要控制文本框中的输入值,可以通过文本框的 InputMask 属性进


行设置,其具体的语法格式为:
[文本框].InputMask=[限制格式]
文本框的控制格式是通过字符串指定的,字符串中使用到的字符的具体
数据排序技巧

含义如表 4-4 所示。

表 4-4 格式控制字符及其含义

字符 含义 字符 含义
0 数字,必须输入 9 数字或空格,可选输入
数据查询技巧

L 字母,必须输入 ? 字母,可选输入
A 字母或数字,必须输入 a 字母或数字,可选输入
& 任一字符,必须输入 C 任一字符或空格,可选输入
< 将所有字符转换为小写 > 将所有字符转换为大写
数据编辑技巧

小数点占位符及千位、 数字或空格,可选输入,允许
.,:;-/ #
日期与时间的分隔符 使用加减号
\ 使字符以字面字符显示 Password 将输入的字符以掩码显示

189
Access VBA 活用范例大辞典

◎应用实例
基础操作技巧

素材\第 4 章\控制文本框的输入值.accdb

本例中,需要在“F_登录窗体”窗体中,限制用户名为 5 到 8 位的数字
或大写字母,输入密码后显示为“*”

◎案例操作
控件和对象

01 为“F_登录窗体”窗体添加 02 在“Form_Load”事件过程中
“Form_Load”事件过程。 添加 VBA 代码。
对象操作技巧

03 执行程序过程查看程序运行
效果。

◎过程源代码
处理数据格式

源文件\第 4 章\控制文本框的输入值.accdb

在事件过程中编写对应的 VBA 代码,限制用户名的输入,将密码以掩


码显示,其具体的 VBA 代码如下。
'控制用户名和密码的输入字符
数据排序技巧

Private Sub Form_Load()


'限制用户名的输入
Me.txt_用户名.InputMask = ">AAAAAaaa"
'密码以掩码显示
Me.txt_密码.InputMask = "Password"
End Sub
数据查询技巧

◎执行过程
切换“F_登录窗体”窗体至窗体视图,在“用户名”和“密码”文本框
中输入数据,结果如图 4-9 所示。
数据编辑技巧

其中,
“用户名”文本框只能够输入字母和数字,其余的字符均不能够输
入,且输入的字母自动显示为大写字母;在“密码”文本框中输入的字符则
全部显示为“*”

190
Chapter 4 数据格式处理技巧

基础操作技巧
图 4-9 控制文本框输入字符的效果

控件和对象
115 英文字母的大小写转换 初 中 高
115 2003 / 2007 / 2010

英文字母的大小写转换
◎字符串数据处理:StrConv()函数

对象操作技巧
如果需要将字符串的格式进行转换,比如英文字母的大小写、全半角的
等,可以使用 StrConv()函数,其具体的语法格式为:
StrConv([字符串],[格式常数])
格式常数为 VBA 内置的常数,通过这些常数可以对字符串的格式进行
处理数据格式

一定的处理,其中各常数的值及其含义如表 4-5 所示。

表 4-5 格式常数的值及其含义

常数 值 说明 常数 值 说明
数据排序技巧

vbUpperCase 1 转换为大写 vbLowerCase 2 转换为小写


vbWide 4 转换为全角 vbNarrow 8 转换为半角
系统缺省码页转 Unicode 转换为
vbUnicode 64 vbFromUnicode 128
换为 Unicode 系统缺省的码页
vbProperCase 3 首字母大写
数据查询技巧

这些格式常数可以单独使用,也可以在不互斥的情况下联合使用,这时
可以使用“+”符号将两个常数连接起来当一个常数使用。

◎应用实例
数据编辑技巧

素材\第 4 章\英文字母的大小写转换.accdb

本例中,需要在单击“到全角大写”按钮时,实现将“转换前:
”文本框
中的字符转换为全角大写,单击“到半角小写”按钮时实现将其转换为“半

191
Access VBA 活用范例大辞典

角小写”字符。转换后的结果输出到“转换后:
”文本框中。
基础操作技巧

◎案例操作

01 为 “ F_ 大 小 写 ” 窗 体 添 加 02 在“Form_Load”事件过程中
“Form_Load”事件过程。 添加 VBA 代码。
控件和对象

03 执行程序过程查看程序运行
效果。

◎过程源代码
对象操作技巧

源文件\第 4 章\英文字母的大小写转换.accdb

在事件过程中编写对应的 VBA 代码,转换文本框中文本的大小写,其


具体的 VBA 代码如下。
处理数据格式

'将文本转换为全角大写
Private Sub cmd_大写_Click()
txt_后 = StrConv(txt_前, vbUpperCase + vbWide)
End Sub
数据排序技巧

'将文本转换为半角小写
Private Sub cmd_小写_Click()
txt_后 = StrConv(txt_前, vbLowerCase + vbNarrow)
End Sub

◎执行过程
数据查询技巧

切换“F_大小写”窗体至窗体视图,单击“到全角大写”按钮,结果如
图 4-10 所示。
数据编辑技巧

图 4-10 将文本转换为全角大写

192
Chapter 4 数据格式处理技巧

单击“到半角小写”按钮,结果如图 4-11 所示。

基础操作技巧
图 4-11 将文本转换为半角小写

控件和对象
116 将字符串换行显示 初 中 高
116 2003 / 2007 / 2010

将字符串换行显示

对象操作技巧
◎字符串数据处理:Chr()函数

如果在显示文本时,需要在某处进行强制换行,可以通过 Chr()函数来实
现。

Chr()函数可以将 ASCII 码转换为对应的字符,其具体的语法格式为:


处理数据格式

Chr([字符编码])
字符编码的正常范围为 0 到 255,但其实际范围为-32768 到 65535。当
字符编码取 10 时,该函数的结果为换行符。
数据排序技巧

◎应用实例
素材\第 4 章\将字符串换行显示.accdb

本例中,需要使用消息对话框返回当前数据库的名称和保存路径,要求
在必要的地方进行换行显示,以便于阅读。
数据查询技巧

◎案例操作

01 在“M_换行”模块中添加“换 02 在“换行”过程代码中设置
行”过程。 消息对话框显示的内容。
数据编辑技巧

03 按【F5】键运行“换行”过
程,查看程序运行效果。

193
Access VBA 活用范例大辞典

◎过程源代码
基础操作技巧

源文件\第 4 章\将字符串换行显示.accdb

在过程中编写对应的 VBA 代码,设置输出的内容,在需要换行的位置


添加 Chr(10),其具体的 VBA 代码如下。
'换行显示当前数据库的信息
控件和对象

Sub 换行()
MsgBox "当前数据库为:" & Chr(10) & CurrentProject.Name _
& Chr(10) & Chr(10) & "其具体的路径为:" & Chr(10) & CurrentProject.Path _
, , "当前数据库信息"
End Sub
对象操作技巧

◎执行过程
保存编写的 VBA 代码,然后按【F5】键运行“换行”过程,结果如
图 4-12 所示。
处理数据格式

图 4-12 换行输出当前数据库的名称和路径
数据排序技巧

提示:使用内置常数换行
除了使用 Chr()函数实现换行外,还可以使用内置常数 vbCrlf 进行换行。
数据查询技巧

117 获取指定字符串的长度 初 中 高
117 2003 / 2007 / 2010

获取指定字符串的长度
◎字符串数据处理:Len()函数
数据编辑技巧

在 VBA 中,可以使用 Len()函数获取指定的字符串的长度,其具体的语


法格式为:
Len([字符串])
194
Chapter 4 数据格式处理技巧

该函数返回的结果为一个正整数,当设置的字符串为空或者没有设置参

基础操作技巧
数时,该函数会出错。

◎应用实例
素材\第 4 章\获取指定字符串的长度.accdb

本例中,需要在“F_字符串长度”窗体的“输入:”文本框中返回文本

控件和对象
的长度。

◎案例操作

01 在“F_字符串长度”窗体中 02 为 窗 体 添 加 “ cmd_ 长 度

对象操作技巧
插入“长度”按钮。 _Click”事件过程。

03 运行事件过程,查看过程运
行效果。
处理数据格式

◎过程源代码
源文件\第 4 章\获取指定字符串的长度.accdb

在事件过程中编写对应的 VBA 代码,获取文本长度,返回文本长度,


数据排序技巧

其具体的 VBA 代码如下。


'获取输入文本框中的字符串的长度
Private Sub cmd_长度_Click()
On Error GoTo 空
Dim n As Integer
数据查询技巧

n = Len(txt_输入)
MsgBox "输入数据的文本长度为:" & n
Exit Sub
空:
MsgBox "文本框中没有输入数据!"
数据编辑技巧

End Sub

195
Access VBA 活用范例大辞典

◎执行过程
基础操作技巧

切换“F_字符串长度”窗体至窗体视图,单击“长度”按钮,结果如
图 4-13 所示。
控件和对象

图 4-13 返回输入的字符串的长度

118 从字符串的左侧截取字符 初 中 高
对象操作技巧

118 2003 / 2007 / 2010

从字符串的左侧截取字符
◎字符串数据处理:Left()函数

在 VBA 编栏中,如果需要从字符串左侧开始截取指定长度的字符,可
处理数据格式

以使用 Left()函数,其具体的语法格式为:
Left([字符串],[截取长度])
使用该函数截取指定长度的字符时,
如果截取的长度大于字符串的长度,
则取整个字符串。如果截取的长度小于等于 0,就会出错。
数据排序技巧

◎应用实例
素材\第 4 章\从字符串的左侧截取字符.accdb

本例中,需要从字符串开始位置截取“输入:
”文本框中,通过“截取长
数据查询技巧

度:
”文本框指定长度的字符串,并将结果输出到“截取结果:
”文本框中。

◎案例操作

01 在“F_左端截取”窗体中插 02 为 窗 体 添 加 “ cmd_ 截 取
数据编辑技巧

入“截取”按钮和两个文本框。 _Click”事件过程。

196
Chapter 4 数据格式处理技巧

03 运行事件过程,查看过程运

基础操作技巧
行效果。

◎过程源代码
源文件\第 4 章\从字符串的左侧截取字符.accdb

控件和对象
在事件过程中编写对应的 VBA 代码,截取字符串并返回结果,其具体
的 VBA 代码如下。
'从开始位置截取文本框中指定长度的字符
Private Sub cmd_截取_Click()

对象操作技巧
txt_结果 = Left(txt_输入, txt_长度)
End Sub

◎执行过程
切换“F_左端截取”窗体至窗体视图,单击“截取”按钮,结果如图 4-14
处理数据格式

所示。
数据排序技巧

图 4-14 从开始位置截取指定长度的文本

提示:从字符串右侧开始向左截取指定长度字符串
使用 Right()函数可以从字符串的右侧位置开始截取指定长度的字符串。该函数的
数据查询技巧

使用方法与 Left()函数的使用方法完全相同。

119 实现字符串的任意位置的字符截取 初 中 高
119 2003 / 2007 / 2010

实现字符串的任意位置的字符截取
数据编辑技巧

◎字符串数据处理:Mid()函数

在 VBA 编程中,如果需要从字符串中间某个位置开始提取若干个字符,

197
Access VBA 活用范例大辞典

可以使用 Mid()函数,其具体的语法格式为:
基础操作技巧

Mid([字符串],[起始位置],[截取长度])

◎应用实例
素材\第 4 章\实现字符串的任意位置的字符截取.accdb

本例中,需要从“输入:
”文本框中通过文本框设置的截取方式截取字符,
控件和对象

并将截取的字符串返回到“截取结果:
”文本框中。

◎案例操作

01 在“F_任意截取”窗体中插 02 为 窗 体 添 加 “ cmd_ 截 取
对象操作技巧

入“截取”按钮和 3 个文本框。 _Click”事件过程。

03 运行事件过程,查看过程运
行效果。
处理数据格式

◎过程源代码
源文件\第 4 章\实现字符串的任意位置的字符截取.accdb

在事件过程中编写对应的 VBA 代码,截取字符串并返回结果,其具体


数据排序技巧

的 VBA 代码如下。
'从字符串指定位置提取指定长度的字符串
Private Sub cmd_截取_Click()
txt_结果 = Mid(txt_输入, txt_起始, txt_长度)
数据查询技巧

End Sub

提示:3 个截取字符的函数的关系
Left()函数、Right()函数和 Mid()函数这 3 个函数都可以截取字符串中的字符,其
中,Mid()函数功能最为强大,可以从字符串任意位置提取任意长度的字符,可以
数据编辑技巧

实现 Left()函数和 Right()函数的功能;而 Left()函数和 Right()函数结合使用,同


样可以实现 Mid()函数的功能。

198
Chapter 4 数据格式处理技巧

◎执行过程

基础操作技巧
切换“F_任意截取”窗体至窗体视图,设置截取的起始位置后,单击“截
取”按钮开始截取,结果如图 4-15 所示。

控件和对象
图 4-15 从任意位置截取指定长度的文本

对象操作技巧
120 判断字符是否在另一个字符串中出现 初 中 高
120 2003 / 2007 / 2010

判断字符是否在另一个字符串中出现
◎字符串数据处理:InStr()函数
处理数据格式

在 VBA 编程中,如果需要获取字符在某个字符串中出现的位置,可以
使用 InStr()函数,其具体的语法格式为:
InStr([查找起始位置],[查找字符串],[被查找字符],[查找方式])
该函数的返回结果为整数,表示查找字符在字符串中最先出现的位置。
数据排序技巧

当被查找字符为空时,出现错误;当没有查找到时,函数返回 0。

◎应用实例
素材\第 4 章\判断字符是否在另一个字符串中出现.accdb
数据查询技巧

本例中,需要判断窗体当前记录的姓名字段是否包含“姓或名”文本框
中指定的字符,然后通过消息对话框返回结果。

◎案例操作
数据编辑技巧

01 在“F_员工工资”窗体中插 02 为 窗 体 添 加 “ cmd_ 判 断
入“判断”按钮和文本框。 _Click”事件过程。

199
Access VBA 活用范例大辞典

03 运行事件过程,查看过程运
基础操作技巧

行效果。

◎过程源代码
源文件\第 4 章\判断字符是否在另一个字符串中出现.accdb
控件和对象

在事件过程中编写对应的 VBA 代码,查找字符,并通过消息对话框返


回判断结果,其具体的 VBA 代码如下。
'判断员工姓名是否包含指定字符
Private Sub cmd_判断_Click()
对象操作技巧

On Error GoTo 错
Dim n As String
'获取指定字符在员工姓名出现的位置,没有出现返回 0
n = InStr(1, Me.姓名, Me.txt_查找, vbTextCompare)
'根据查找结果返回判断结果
处理数据格式

If n Then
MsgBox "【" & Me.姓名 & "】包含文本【" & Me.txt_查找 & "】"
Else
MsgBox "【" & Me.姓名 & "】不包含文本【" & Me.txt_查找 & "】"
End If: Exit Sub
错: MsgBox Err.Description
数据排序技巧

End Sub

◎执行过程
切换“F_员工工资”窗体至窗体视图,切换到某条记录,在“姓或名”
文本框中输入欲查找的字符,单击“判断”按钮,结果如图 4-16 所示。
数据查询技巧
数据编辑技巧

图 4-16 判断员工姓名是否包含指定字符

200
Chapter 4 数据格式处理技巧

121 快速对某个数据进行替换 初 中 高
121 2003 / 2007 / 2010

基础操作技巧
快速对某个数据进行替换
◎字符串数据处理:RePlace()函数

在 VBA 编程中,可以使用 RePlace()函数来替换字符串指定位置开始的

控件和对象
指定个数的字符为其他的字符,其具体的语法格式为:
RePlace([字符串],[被替换字符],[替换为的字符],[起始位置],[替换个数])
前 3 个参数是必需的,后面的参数是可以缺省的。替换个数缺省时,会
替换字符串中所有可以被替换的字符。

对象操作技巧
◎应用实例
素材\第 4 章\快速对某个数据进行替换.accdb

本例中,需要将“F_员工资料”窗体中显示的记录的职务字段进行替换。 处理数据格式

◎案例操作

01 在“F_员工资料”窗体中插 02 为 窗 体 添 加 “ cmd_ 替 换
入“替换”按钮和两个文本框。 _Click”事件过程。
数据排序技巧

03 运行事件过程,查看过程运
行效果。

◎过程源代码
数据查询技巧

源文件\第 4 章\快速对某个数据进行替换.accdb

在事件过程中编写对应的 VBA 代码,替换职务字段,将替换后的结果


赋值给职务字段,其具体的 VBA 代码如下。
'替换当前记录职务字段的部分字符
数据编辑技巧

Private Sub cmd_替换_Click()


On Error GoTo 错
Me.职务 = Replace(Me.职务, txt_前, txt_后)

201
Access VBA 活用范例大辞典

Exit Sub
基础操作技巧

错: MsgBox Err.Description
End Sub

◎执行过程
切换“F_员工资料”窗体至窗体视图,在文本框中输入欲替换的字符,
单击“替换”按钮,结果如图 4-17 所示。
控件和对象
对象操作技巧
处理数据格式

图 4-17 替换当前记录的职务字段

122 将数值转化为货币型 初 中 高
122 2003 / 2007 / 2010

将数值转换为货币型
数据排序技巧

◎数值数据处理:FormatCurrency()函数

在 VBA 编程中,可以使用 FormatCurrency()函数将指定的数值转换为货


币型,其具体的语法格式为:
数据查询技巧

FormatCurrency([数值])
FormatCurrency()函数在转化数值为货币型时,会根据货币的类型保留一
定的小数位数,比如转化为人民币类型,就会自动保留两位小数。

FormatCurrency()函数转化出的货币的类型,与系统当前设置有关,可在
“区域和语言选项”对话框的“货币”文本框中设置具体的样式,如图 4-18
数据编辑技巧

所示。

202
Chapter 4 数据格式处理技巧

基础操作技巧
控件和对象
对象操作技巧
图 4-18 当前系统设置的货币类型

◎应用实例
本例中,需要在“M_数据处理”模块中创建一个“货币”过程,在运行
处理数据格式

该过程时,输入数值并返回该数值转换出的货币型数据。

◎案例操作

01 在“M_数据处理”模块中插 02 在“货币”过程中添加 VBA


数据排序技巧

入“货币”过程。 代码。

03 运行“货币”过程,查看过
程运行效果。
数据查询技巧

◎过程源代码
源文件\第 4 章\数据处理.accdb

在事件过程中编写对应的 VBA 代码,获取数值,将数值转换为货币类


数据编辑技巧

型,其具体的 VBA 代码如下。


'将输入的数值转化为货币型
Sub 货币()

203
Access VBA 活用范例大辞典

Dim x As Double
基础操作技巧

x = InputBox("请输入欲转化为货币的数值:")
MsgBox x & "转化的货币值为:" & FormatCurrency(x) _
, , "FormatCurrency()函数"
End Sub

◎执行过程
控件和对象

保存编写的 VBA 代码,然后按【F5】键运行程序,在打开的输入对话


框中输入数值,结果如图 4-19 所示。
对象操作技巧

图 4-19 将输入的数值转换为货币型

123 将数值四舍五入到整数
处理数据格式

初 中 高
123 2003 / 2007 / 2010

将数值四舍五入到整数
◎数值数据处理:CInt()函数
数据排序技巧

在 VBA 编程中,如果需要将数值四舍五入到整数,可以使用 CInt()函数,


其具体的语法格式为:
CInt([数值])

◎应用实例
数据查询技巧

本例中,需要在“M_数据处理”模块中创建一个“四舍五入”过程,在
运行该过程时,输入数值,返回该数值舍入到整数后的值。

◎案例操作
数据编辑技巧

01 在“M_数据处理”模块中插 02 在“四舍五入”过程中添加
入“四舍五入”过程。 VBA 代码。

204
Chapter 4 数据格式处理技巧

03 运行“四舍五入”过程,查

基础操作技巧
看过程运行效果。

◎过程源代码
源文件\第 4 章\数据处理.accdb

控件和对象
在事件过程中编写对应的 VBA 代码,获取数值,对数值的小数部分进
行取舍,其具体的 VBA 代码如下。
'四舍五入到整数
Sub 四舍五入()

对象操作技巧
Dim x As Double
x = InputBox("请输入欲四舍五入的数值:")
MsgBox x & "四舍五入结果为:" & CInt(x), , "CInt()函数"
End Sub

◎执行过程
处理数据格式

保存编写的 VBA 代码,然后按【F5】键运行程序,在打开的输入对话


框中输入数值,结果如图 4-20 所示。
数据排序技巧

图 4-20 将输入的数据四舍五入到整数
数据查询技巧

124 将数值四舍五入到指定位数 初 中 高
124 2003 / 2007 / 2010

将数值四舍五入到指定位数
◎数值数据处理:Round()函数
数据编辑技巧

在 VBA 编程中,如果需要将数值四舍五入到指定的位数,可以使用
Round()函数,其具体的语法格式为:
Round([数值],[舍入位数])

205
Access VBA 活用范例大辞典

◎应用实例
基础操作技巧

本例中,需要在“M_数据处理”模块中创建一个“定位四舍五入”过程,
在运行该过程时,输入数值,返回该数值舍入到指定位数的值。

◎案例操作

01 在“M_数据处理”模块中插 02 在“定位四舍五入”过程中
控件和对象

入“定位四舍五入”过程。 添加 VBA 代码。

03 运行“定位四舍五入”过程,
查看过程运行效果。
对象操作技巧

◎过程源代码
源文件\第 4 章\数据处理.accdb

在事件过程中编写对应的 VBA 代码,获取数值,对数值的指定位数进


处理数据格式

行取舍,其具体的 VBA 代码如下。


'将数值四舍五入到指定位数
Sub 定位四舍五入()
Dim x As Double
数据排序技巧

Dim n As Integer
x = InputBox("请输入欲四舍五入的数值:")
n = InputBox("请输入进行四舍五入的位数:")
MsgBox x & "保留" & n & "位小数的结果为:" & Round(x, n),,"Round()函数"
End Sub

◎执行过程
数据查询技巧

保存编写的 VBA 代码,然后按【F5】键运行过程,在输入对话框中输


入数值,结果如图 4-21 所示。
数据编辑技巧

图 4-21 将输入的数据四舍五入到指定位数

206
Chapter 4 数据格式处理技巧

125 对数值进行取整 初 中 高
125 2003 / 2007 / 2010

基础操作技巧
对数值进行取整
◎数值数据处理:Int()函数、Fix()函数

在 VBA 编程中,如果需要对数值进行取整,可以使用 Int()函数或者 Fix()

控件和对象
函数,其具体的语法格式为:
Int([数值]) Fix([数值])
这两个函数对正数的取整结果是完全相同的,但是对负数的取整却不相
同。Int()函数对负数取小于等于数值的整数,而 Fix()函数取大于或等于负数

对象操作技巧
的整数。

◎应用实例
本例中,需要在“M_数据处理”模块中创建“取整 1”和“取整 2”过
程,在运行这两个过程时,可以对输入的数值进行取整。
处理数据格式

◎案例操作

01 在“M_数据处理”模块中插 02 在“取整 1”和“取整 2”过


入“取整 1”
、“取整 2”过程。 程中添加 VBA 代码。
数据排序技巧

03 运行“取整 1”和“取整 2”
过程,查看过程运行效果。
数据查询技巧

◎过程源代码
源文件\第 4 章\数据处理.accdb

在事件过程中编写对应的 VBA 代码,获取数值,对输入的数值用 Int()


函数和 Fix()函数进行取整,其具体的 VBA 代码如下。
数据编辑技巧

'对输入数值取整,负数取小
Sub 取整 1()
Dim x As Double
x = InputBox("请输入欲取整的数值:")
207
Access VBA 活用范例大辞典

MsgBox x & "取整结果为:" & Int(x), , "Int()函数"


基础操作技巧

End Sub

'对输入的数值取整,负数取大
Sub 取整 2()
Dim x As Double
x = InputBox("请输入欲取整的数值:")
控件和对象

MsgBox x & "取整结果为:" & Fix(x), , "Fix()函数"


End Sub

◎执行过程
保存编写的 VBA 代码,然后按【F5】键分别运行两个过程,在输入对
对象操作技巧

话框中输入负数,结果如图 4-22 所示。


处理数据格式
数据排序技巧

图 4-22 对输入的负数取整的结果

126 将数值转换为百分数 初 中 高
126 2003 / 2007 / 2010
数据查询技巧

将数值转换为百分数
◎数值数据处理:FormatPercent()函数

在 VBA 编程中,
如果需要将数值转换为百分数,
可以使用 FormatPercent()
函数,其具体的语法格式为:
数据编辑技巧

FormatPercent([数值])

208
Chapter 4 数据格式处理技巧

◎应用实例

基础操作技巧
本例中,需要在“M_数据处理”模块中创建“百分数”过程,在运行该
过程时,可以将输入的数值转化为百分数。

◎案例操作

01 在“M_数据处理”模块中插 02 在

控件和对象
“百分数”
过程中添加 VBA
入“百分数”过程。 代码。

03 运行“百分数”过程,查看
过程运行效果。

对象操作技巧
◎过程源代码
源文件\第 4 章\数据处理.accdb 处理数据格式

在事件过程中编写对应的 VBA 代码,获取数值,将数值转换为百分数,


其具体的 VBA 代码如下。
'将输入的数值转换为百分数
Sub 百分数()
Dim x As Double
数据排序技巧

x = InputBox("请输入欲转化为百分数的数值:")
MsgBox x & "转化为百分数为:" & FormatPercent(x), , "FormatPercent()函数"
End Sub

◎执行过程
数据查询技巧

保存编写的 VBA 代码,然后按【F5】键运行“百分数”过程,在输入


对话框中输入数值,结果如图 4-23 所示。
数据编辑技巧

图 4-23 将输入的数值转换为百分数

209
Access VBA 活用范例大辞典

127 获取指定范围内的随机数 初 中 高
127 2003 / 2007 / 2010
基础操作技巧

获取指定范围内的随机数
◎数值数据处理:Rnd()函数

在 VBA 编程中,可以使用 Rnd()函数获取大于等于 0 小于 1 的随机数,


控件和对象

其具体的语法格式为:
Rnd()
该函数返回的结果为单精度的数值。如果需要获取其他范围的随机数,
只需要通过适当的算术运算将区间[0,1)扩展到指定的范围即可,如需要获取
对象操作技巧

[a,b)范围内的随机数,可以使用下面的代码进行:
(b-a+1)*Rnd()+a

◎应用实例
本例中,需要在“M_数据处理”模块中创建“随机数”过程,在运行该
处理数据格式

过程时,可以获取不超过指定数值的非负随机数。

◎案例操作

01 在“M_数据处理”模块中插 02 在“随机数”
过程中添加 VBA
数据排序技巧

入“随机数”过程。 代码。

03 运行“随机数”过程,查看
过程运行效果。
数据查询技巧

◎过程源代码
源文件\第 4 章\数据处理.accdb

在事件过程中编写对应的 VBA 代码,设置非负随机数的最大范围,并


数据编辑技巧

获取该范围的随机数,其具体的 VBA 代码如下。


'获取不超过指定数值的非负随机数
Sub 随机数()

210
Chapter 4 数据格式处理技巧

Dim x As Double

基础操作技巧
x = InputBox("请输入随机数的上界:")
MsgBox "取得" & x & "以内的随机数:" & Rnd(x) * x, , "Rnd()函数"
End Sub

◎执行过程
保存编写的 VBA 代码,然后按【F5】键运行“随机数”过程,在输入

控件和对象
对话框中输入数值,结果如图 4-24 所示。

对象操作技巧
图 4-24 获取不超过指定数值的非负随机数

128 获取指定范围内的随机整数 初 中 高
128 2003 / 2007 / 2010
处理数据格式

获取指定范围内的随机整数
◎数值数据处理:Rnd()函数

在 VBA 编程中,如果需要获取指定范围的随机整数,需要使用 Rnd()


数据排序技巧

函数和 Int()函数来实现,其具体的语法格式为:
Int(([上界]-[下界]+1)*Rnd()+[下界])

◎应用实例
本例中,需要在“M_数据处理”模块中创建“随机整数”过程,在运行
数据查询技巧

该过程时,可以获取不超过指定数值的随机非负整数。

◎案例操作

01 在“M_数据处理”模块中插 02 在“随机整数”过程中添加
数据编辑技巧

入“随机整数”过程。 VBA 代码。

211
Access VBA 活用范例大辞典

03 运行“随机整数”过程,查
基础操作技巧

看过程运行效果。

◎过程源代码
源文件\第 4 章\数据处理.accdb
控件和对象

在事件过程中编写对应的 VBA 代码,设置随机整数的上界,并获取该


范围的随机整数,其具体的 VBA 代码如下。
'获取不超过指定数值的数随机整数
Sub 随机整数()
对象操作技巧

Dim x As Double
x = InputBox("请输入随机整数的上界:")
MsgBox "取得" & x & "以内的随机整数:" & Int(Rnd(x) * x) _
, , "Rnd()函数&Int()函数"
End Sub
处理数据格式

◎执行过程
保存编写的 VBA 代码,然后按【F5】键运行“随机整数”过程,在输
入对话框中输入数值,结果如图 4-25 所示。
数据排序技巧

图 4-25 获取不超过指定数值的随机整数
数据查询技巧

129 获取系统当前的时间 初 中 高
129 2003 / 2007 / 2010

获取系统当前的时间
◎日期数据处理:Time()函数
数据编辑技巧

在 VBA 编程中,使用 Time()函数可以获取系统当前的时间,其具体的


语法格式为:
Time

212
Chapter 4 数据格式处理技巧

◎应用实例

基础操作技巧
素材\第 4 章\获取系统当前的时间.accdb

本例中,需要在打开“F_员工资料”窗体时,在窗体标题上显示打开窗
体的时间。

◎案例操作

控件和对象
01 在“F_员工资料”窗体中插 02 在“Form_Current”事件过程
入“Form_Current”事件过程。 中添加 VBA 代码。

对象操作技巧
03 重新打开窗体,查看事件过
程运行效果。

◎过程源代码 处理数据格式

源文件\第 4 章\获取系统当前的时间.accdb

在事件过程中编写对应的 VBA 代码,将“F_员工工资”窗体的标题设


置为系统当前的时间,其具体的 VBA 代码如下。
'将窗体的标题设置为系统当前的时间
数据排序技巧

Private Sub Form_Current()


Me.Caption = "打开时间:" & Time
End Sub

◎执行过程
打开“F_员工工资”窗体,程序自动运行 Form_Gurreng 过程,结果如
数据查询技巧

图 4-26 所示。
数据编辑技巧

图 4-26 窗体标题显示打开窗体的时间

213
Access VBA 活用范例大辞典

130 获取系统当前的日期 初 中 高
130 2003 / 2007 / 2010
基础操作技巧

获取系统当前的日期
◎日期数据处理:Date()函数

在 VBA 编程中,使用 Date()函数可以获取系统当前的日期,其具体的语


控件和对象

法格式为:
Date

◎应用实例
素材\第 4 章\获取系统当前的日期.accdb
对象操作技巧

本例中,需要在打开“F_员工资料”窗体时,在窗体的“当前日期”标
签中显示打开窗体的日期。

◎案例操作
处理数据格式

01 在“F_员工资料”窗体中插 02 在“Form_Load”事件过程中
入“Form_Load”事件过程。 添加 VBA 代码。

03 重新打开窗体,查看事件过
数据排序技巧

程运行效果。

◎过程源代码
源文件\第 4 章\获取系统当前的日期.accdb
数据查询技巧

在事件过程中编写对应的 VBA 代码,将窗体中“当前日期”标签的标


题设置为系统当前的日期,其具体的 VBA 代码如下。
'更改标签的标题为当前日期
Private Sub Form_Load()
数据编辑技巧

lab_日期.Caption = Date
End Sub

214
Chapter 4 数据格式处理技巧

◎执行过程

基础操作技巧
打开“F_员工工资”窗体,运行的结果如图 4-27 所示。

控件和对象
图 4-27 在窗体中的标签显示系统的当前日期

131 获取系统当前的日期和时间 初 中 高

对象操作技巧
131 2003 / 2007 / 2010

获取系统当前的日期和时间
◎日期数据处理:Now()函数

在 VBA 编程中,如果需要同时获取系统的当前日期和时间,可以同时使用
处理数据格式

Date()函数和 Time()函数,也可以使用 Now()函数,其具体的语法格式为:


Now

◎应用实例
数据排序技巧

素材\第 4 章\获取系统当前的时间和日期.accdb

本例中,需要在指定位置的文本文件“操作记录.txt”中记录每次打开和
关闭“F_员工工资”窗体的日期和时间。

◎案例操作
数据查询技巧

01 在“F_员工资料”窗体中插 02 在“Form_Close”和“Form_
入“Form_Close”和“Form_ Load”事件过程中添加写入文
Load”事件过程。 本文档的 VBA 代码。
数据编辑技巧

03 打开或关闭窗体,然后打开
文本文档查看结果。

215
Access VBA 活用范例大辞典

◎过程源代码
基础操作技巧

源文件\第 4 章\获取系统当前的时间和日期.accdb、操作记录.txt

在事件过程中编写对应的 VBA 代码,加载或关闭窗体事件发生时,在


“操作记录.txt”文本文档中记录操作时间,其具体的 VBA 代码如下。
'关闭窗体时记录关闭时间
控件和对象

Private Sub Form_Close()


Dim ObjFl, Fl
'打开文本文件
Set ObjFl = CreateObject("Scripting.FileSystemObject")
Set Fl = ObjFl.OpenTextFile(CurrentProject.Path & "\操作记录.txt", 8, True)
对象操作技巧

'在文本文件中记录关闭窗体的时间
Fl.writeline "关闭窗体“F_员工工资” :" & Now
Fl.Close
Set ObjFl = Nothing
End Sub
处理数据格式

'加载窗体时记录加载时间
Private Sub Form_Load()
Dim ObjFl, Fl
Set ObjFl = CreateObject("Scripting.FileSystemObject")
Set Fl = ObjFl.OpenTextFile(CurrentProject.Path & "\操作记录.txt", 8, True)
数据排序技巧

Fl.writeline "打开窗体“F_员工工资” :" & Now


Fl.Close
Set ObjFl = Nothing
End Sub

◎执行过程
数据查询技巧

执行加载或者关闭“F_员工资料”窗体操作之后,打开“操作记录.txt”
文本文档查看记录结果,如图 4-28 所示。
数据编辑技巧

图 4-28 文本文档中记录的窗体打开和关闭操作

216
Chapter 4 数据格式处理技巧

132 将字符串日期转换为标准格式的日期 初 中 高
132 2003 / 2007 / 2010

基础操作技巧
将字符串日期转换为标准格式的日期
◎日期数据处理:DateValue()函数

在 VBA 编程中,如果需要将使用日期分隔符表示的日期转换为标准格

控件和对象
式的日期,可以使用 DateValue()函数,其具体的语法格式为:
DateValue([字符串日期])
使用日期分隔符表示的日期是以字符串的形式存储,而标准格式的日期
是使用序列号存储的。

对象操作技巧
◎应用实例
素材\第 4 章\将字符串日期转换为标准格式的日期.accdb

本例中,在“M_日期数据”模块中插入“日期转换”过程,运行该过程
时,可以将输入的字符串日期转换为标准日期。
处理数据格式

◎案例操作

01 在“M_日期数据”模块中插 02 在“日期转换”过程中添加
入“日期转换”过程。 VBA 代码。
数据排序技巧

03 运行“日期转换”过程,查
看过程运行效果。
数据查询技巧

◎过程源代码
源文件\第 4 章\将字符串日期转换为标准格式的日期.accdb

在“日期转换”过程中编写对应的 VBA 代码,将输入的日期转换为标


准格式的日期,其具体的 VBA 代码如下。
数据编辑技巧

'将使用日期分隔符表示的日期转换为标准格式的日期
Sub 日期转换()
Dim strDate As String

217
Access VBA 活用范例大辞典

strDate = InputBox("请输入日期")
基础操作技巧

MsgBox "【" & strDate & "】转换为标准格式的日期的结果为【" _


& DateValue(strDate) & "】"
End Sub

◎执行过程
保存编写的 VBA 代码,然后按【F5】键运行程序,在输入对话框中输
控件和对象

入欲转换的日期,转换结果如图 4-29 所示。


对象操作技巧

图 4-29 将字符串日期转换为标准日期

133 将日期格式化 初 中 高
133 2003 / 2007 / 2010
处理数据格式

将日期格式化
◎日期数据处理:Format()函数

在 VBA 编程中,可以使用 Format()函数将数据格式化,其具体的语法格


数据排序技巧

式为:
Format([欲格式化的数据],[格式])
可以使用系统内置的格式参数指定格式,比如系统已定义的格式“Long
date”等,也可以通过格式字符串自定义格式。
数据查询技巧

◎应用实例
素材\第 4 章\将日期格式化.accdb

本例中,在“M_日期格式”模块中插入“多格式日期”过程,运行该过
程时,可将输入的日期转换为不同格式的日期,并使用消息对话框返回结果。
数据编辑技巧

218
Chapter 4 数据格式处理技巧

◎案例操作

基础操作技巧
01 在“M_日期格式”模块中插 02 在“多格式日期”过程中添
入“多格式日期”过程。 加 VBA 代码。

03 运行“多格式日期”过程,

控件和对象
查看过程运行效果。

◎过程源代码
源文件\第 4 章\将日期格式化.accdb

对象操作技巧
在“多格式日期”过程中编写对应的 VBA 代码,将输入的日期转换为
不同格式的日期,其具体的 VBA 代码如下。
'返回输入日期的不同格式
Sub 多格式日期()
处理数据格式

Dim Dat As String


Dat = InputBox("请输入日期")
MsgBox "标准日期:" & Format(Dat) & vbCrLf _
& "长 日 期:" & Format(Dat, "Long Date") & vbCrLf _
& "中等日期:" & Format(Dat, "Medium Date") & vbCrLf _
& "短 日 期:" & Format(Dat, "Short Date"), , _
数据排序技巧

Dat & " 的不同格式"


End Sub

◎执行过程
保存编写的 VBA 代码,然后按【F5】键运行“多格式日期”程序,在
数据查询技巧

输入对话框中输入欲转换的日期,转换结果如图 4-30 所示。


数据编辑技巧

图 4-30 将输入的日期转换为不同格式的日期

219
Access VBA 活用范例大辞典

134 获取日期的年月日 初 中 高
134 2003 / 2007 / 2010
基础操作技巧

获取日期的年月日
◎日期数据处理:Year()函数、Month()函数、Day()函数

在 VBA 编程中,可以使用 Year()函数、Month()函数和 Day()函数来获取


控件和对象

日期的年、月和日,其具体的语法格式为:
Year([日期]) Month([日期]) Day([日期])
日期必须为系统可以转换为标准格式的日期。

◎应用实例
对象操作技巧

素材\第 4 章\获取日期的年月日.accdb

本例中,在“M_年月日”模块中插入“年月日”过程,运行该过程时,
可以获取输入日期的年、月和日,并使用消息对话框返回结果。
处理数据格式

◎案例操作

01 在“M_年月日”模块中插入 02 在“年月日”
过程中添加 VBA
“年月日”过程。 代码。
数据排序技巧

03 运行“年月日”过程,查看
过程运行效果。

◎过程源代码
数据查询技巧

源文件\第 4 章\获取日期的年月日.accdb

在“年月日”过程中编写对应的 VBA 代码,获取输入日期的年月日,


其具体的 VBA 代码如下。
'返回输入日期的年月日
数据编辑技巧

Sub 年月日()
Dim Dat As String
Dat = InputBox("请输入日期")

220
Chapter 4 数据格式处理技巧

MsgBox DateValue(Dat) & "提取出的" & vbCrLf & "年份为:" & Year(Dat) _

基础操作技巧
& vbCrLf & "月份为:" & Month(Dat) _
& vbCrLf & "日期为:" & Day(Dat), , Dat
End Sub

◎执行过程
保存编写的 VBA 代码,然后按【F5】键运行“年月日”程序,在输入

控件和对象
对话框中输日期,转换结果如图 4-31 所示。

对象操作技巧
图 4-31 获取日期的年月日

135 获取时间的时分秒 初 中 高
135 2003 / 2007 / 2010
处理数据格式

获取时间的时分秒
◎日期数据处理:Hour()函数、Minute()函数、Second()函数

在 VBA 编程中,可以使用 Hour()函数、Minute()函数和 Second()函数来


数据排序技巧

获取时间的时、分和秒,其具体的语法格式为:
Hour([时间]) Minute([时间]) Second([时间])

◎应用实例
素材\第 4 章\获取时间的时分秒.accdb
数据查询技巧

本例中,在“M_时分秒”模块中插入“时分秒”过程,运行该过程时,
可以获取当前时间的时分秒,并使用消息对话框返回结果。

◎案例操作
数据编辑技巧

01 在“M_时分秒”模块中插入 02 在“时分秒”
过程中添加 VBA
“时分秒”过程。 代码。

221
Access VBA 活用范例大辞典

03 运行“时分秒”过程,查看
基础操作技巧

过程运行效果。

◎过程源代码
源文件\第 4 章\获取时间的时分秒.accdb
控件和对象

在“时分秒”过程中编写对应的 VBA 代码,返回当前时间的时分秒,


其具体的 VBA 代码如下。
'返回当前时间的时分秒
Sub 时分秒()
对象操作技巧

MsgBox "当前的时间【" & Time & "】的时分秒分别为" & Space(3) _


& "时:" & Hour(Time) & Space(6) & "分:" & Minute(Time) _
& Space(6) & "秒:" & Second(Time), , "当前时间:" & Time
End Sub

◎执行过程
处理数据格式

保存编写的 VBA 代码,然后按【F5】键运行“时分秒”程序,获取当


前时间的时分秒,结果如图 4-32 所示。
数据排序技巧

图 4-32 获取当前时间的时分秒

136 判断日期对应的星期 初 中 高
136 2003 / 2007 / 2010
数据查询技巧

判断日期对应的星期
◎日期数据处理:Weekday()函数、WeekdayName()函数

在 VBA 编程中,可以使用 Weekday()函数返回日期的星期,其具体的语


数据编辑技巧

法格式为:
Weekday([日期])
Weekday()函数返回星期是使用不大于 7 的正整数表示的,如果需要将结

222
Chapter 4 数据格式处理技巧

果表示为“星期×”的形式,可以在 Weekday()函数外嵌套上 WeekdayName()

基础操作技巧
函数。

◎应用实例
素材\第 4 章\判断日期对应的星期.accdb

本例中,在运行“M_星期”模块中的“星期”过程时,可以以“星期×”

控件和对象
的形式返回输入日期的星期。

◎案例操作

01 在“M_星期”模块中插入“星 02 在“星期”过程中添加 VBA

对象操作技巧
期”过程。 代码。

03 运行“星期”过程,查看过
程运行效果。
处理数据格式

◎过程源代码
源文件\第 4 章\判断日期对应的星期.accdb

在“星期”过程中编写对应的 VBA 代码,返回输入日期的星期,其具


数据排序技巧

体的 VBA 代码如下。
'返回输入日期的星期
Sub 星期()
Dim Dat As String
Dat = InputBox("请输入日期")
数据查询技巧

MsgBox "输入日期【" & Dat & "】的星期为: 【" _


& WeekdayName(Weekday(Dat)) & "】", , DateValue(Dat)
End Sub

◎执行过程
数据编辑技巧

保存编写的 VBA 代码,然后按【F5】键运行“星期”过程,在输入对


话框中输入日期,转换结果如图 4-33 所示。

223
Access VBA 活用范例大辞典
基础操作技巧

图 4-33 获取输入日期的星期
控件和对象

137 计算两个日期之间的时间间隔 初 中 高
137 2003 / 2007 / 2010

计算两个日期之间的时间间隔
◎日期数据处理:DateDiff()函数
对象操作技巧

在 VBA 编程中,
可以使用 DateDiff()函数获取两个日期之间的时间间隔,
可以通过特定的字符指定计算时间间隔的单位,其具体的语法格式为:
DateDiff([单位],[起始日期],[结束日期])
指定计算时间间隔使用的是特定的格式字符表示的,其具体的设置如
处理数据格式

表 4-6 所示。

表 4-6 DateDiff()函数常用单位设置

设置 含义 设置 含义 设置 含义
数据排序技巧

yyyy 年 q 季度 m 月
y 一年的日数 d 日 w 一周的日数
ww 周

◎应用实例
数据查询技巧

素材\第 4 章\计算两个日期之间的时间间隔.accdb

本例中,在运行“M_时间间隔”模块中的“时间间隔”过程时,分别设
置两个日期,
并通过消息对话框以不同的单位返回连个日期之间的时间间隔。

◎案例操作
数据编辑技巧

01 在“M_时间间隔”模块中插 02 在“时间间隔”过程中添加
入“时间间隔”过程。 VBA 代码。

224
Chapter 4 数据格式处理技巧

03 运行“时间间隔”过程,查

基础操作技巧
看过程运行效果。

◎过程源代码
源文件\第 4 章\计算两个日期之间的时间间隔.accdb

控件和对象
在“时间间隔”过程中编写对应的 VBA 代码,以不同单位返回两个日
期之间的时间间隔,其具体的 VBA 代码如下。
'以指定单位返回两个日期之间的时间间隔
Sub 时间间隔()

对象操作技巧
Dim Dat1, Dat2, Dat3 As String
Dat1 = InputBox("请输入起始日期")
Dat2 = InputBox("请输入结束日期")
MsgBox Dat1 & "与" & Dat2 & "的时间间隔为:" & vbCrLf _
& "以日计:" & DateDiff("D", Dat1, Dat2) & vbCrLf _
处理数据格式

& "以月计:" & DateDiff("M", Dat1, Dat2) & vbCrLf _


& "以季计:" & DateDiff("Q", Dat1, Dat2) & vbCrLf _
& "以年计:" & DateDiff("YYYY", Dat1, Dat2)
End Sub

◎执行过程
数据排序技巧

保存编写的 VBA 代码,然后按【F5】键运行“时间间隔”程序,输入


两个日期,转换结果如图 4-34 所示。
数据查询技巧
数据编辑技巧

图 4-34 以不同单位返回输入日期之间的时间间隔

225
Access VBA 活用范例大辞典

138 计算经过 X 天数后的日期 初 中 高


138 2003 / 2007 / 2010
基础操作技巧

计算经过 X 天数后的日期
◎日期数据处理:DateAdd()函数

在 VBA 编程中,如果需要计算某个日期之后,若干天或者月等之后的
控件和对象

日期,可以使用 DateAdd()函数进行设置,其具体的语法格式为:
DateAdd([单位],[数量],[日期])
单位的设置可以采用表 4-6 中罗列的设置。数量可以使用负数,表示指
定日期之前的日期。
对象操作技巧

◎应用实例
素材\第 4 章\计算经过 X 天数后的日期.accdb

本例中,在运行“M_间隔日期”模块中的“间隔日期”过程时,可以返
回 2013 年 8 月 8 日之前或者之后的日期。
处理数据格式

◎案例操作

01 在“M_间隔日期”模块中插 02 在“间隔日期”过程中添加
入“间隔日期”过程。 VBA 代码。
数据排序技巧

03 运行“间隔日期”过程,查
看过程运行效果。
数据查询技巧

◎过程源代码
源文件\第 4 章\计算经过 X 天数后的日期.accdb

在“间隔日期”子过程中编写对应的 VBA 代码,返回 2013 年 8 月 8 日


之前或之后若干天的日期,其具体的 VBA 代码如下。
数据编辑技巧

'计算 2013-8-8 之前或之后若干天的日期


Sub 间隔日期()
Dim Dat, YN As String

226
Chapter 4 数据格式处理技巧

Dat = InputBox("请输入 2013-8-8 之后的天数")

基础操作技巧
If Dat < 0 Then
YN = "前"
Else
YN = "后"
End If
MsgBox "【2008-8-8】之" & YN & "【" & Abs(Dat) & "天】的日期为【" _

控件和对象
& DateAdd("D", Dat, " 2013 / 8 / 8") & "】"
End Sub

◎执行过程
保存编写的 VBA 代码,然后按【F5】键运行“间隔日期”程序,输入

对象操作技巧
间隔的天数,结果如图 4-35 所示。

处理数据格式

图 4-35 返回 2013 年 8 月 8 日之前或之后若干天的日期


数据排序技巧
数据查询技巧
数据编辑技巧

227
Chapter 05
数据排序技巧

在 Access 中,经常需要对数据库中的数据进行各种形式的排
序。通过排序可以更好地查找数据、分析数据等。
本章将通过不同的案例来展示 Access 中常见的排序情形及
其应用技巧,包括在窗体、子窗体、报表和查询等的记录集的排
序,DAO、ADO 和 SQL 语句在排序中的应用等。

▼主要内容
◎对窗体中的数据记录进行排序
OrderBy 属性、OrderByOn 属性、OpenForm 属性……
◎通过查询排序数据
Sort 属性、Recoedset 属性、Requery 方法、CursorLocation 属性……
◎通过编写 SQL 语句排序数据
Select…From 语句、Order By 语句、OpenReport 方法、Rcordsource 属性……

▼涉及案例
◎对窗体中的数据记录进行排序
◎在当前窗体中对数据进行多条件排序
◎自定义多条件来排序数据
◎在子窗体中排序数据
◎通过选项按钮指定排序依据
◎在加载窗体时指定查询字段排序数据(1)
◎通过下拉列表灵活指定多个查询字段排序数据(2)
◎自定义序列排序数据
……
Chapter 05 数据排序技巧

139 对当前窗体中的数据记录进行排序 初 中 高
139 2003 / 2007 / 2010

基础操作技巧
对当前窗体中的数据记录进行排序
◎通过窗体或报表对记录排序:OrderBy 属性、OrderByOn 属性

在 VBA 编程中,如果需要对记录进行排序,可以通过 OrderBy 属性和

控件和对象
OrderByOn 属性来完成的。使用这两个属性时,只需要将排序的字段赋予
OrderBy 属性,并将 OrderByOn 属性设置为 True 即可。

如果是对当前窗体中的数据进行排序,可以使用 Me 关键字,其具体的
语法格式如下所示:

对象操作技巧
Me.OrderBy ="[排序字段名]"
Me.OrderByOn = True

◎应用实例
素材\第 5 章\对窗体中的数据记录进行排序.accdb
处理数据格式

假设在“员工档案管理”窗体中显示了所有的员工档案记录。现在需要
在“员工档案管理”窗体中通过单击“按照姓名排序”按钮,实现按照员工
姓名首字母升序排序。

◎案例操作
数据排序技巧

01 在“员工档案管理”窗体中 02 通过设计视图模式进入 VBA


插入“按照姓名排序”按钮。 编辑器。
数据查询技巧

03 为“员工档案管理”窗体添 04 在“cmd_排序_Click”事件
加一个“cmd_排序_Click”事 过程中添加按姓名排序代码。
件过程。

05 执行程序过程查看程序运行
数据编辑技巧

效果。

229
Access VBA 活用范例大辞典

◎过程源代码
基础操作技巧

源文件\第 5 章\对窗体中的数据记录进行排序.accdb

在“cmd_排序_Click”事件过程中编写对应的 VBA 代码,获取排序字


段名,执行排序设置,其具体的 VBA 代码如下。
Private Sub cmd_排序_Click()
控件和对象

'获取排序字段
Me.OrderBy = "姓名"
'确定使用排序
Me.OrderByOn = True
End Sub
对象操作技巧

◎执行过程
保存编写的 VBA 代码,将“员工档案管理”窗体的视图模式切换到窗体视
图,单击“按姓名排序”按钮,可以得到如图 5-1 所示的排序前后的效果。
处理数据格式
数据排序技巧

图 5-1 对记录按姓名排序前后的效果
数据查询技巧

140 恢复窗体中的数据信息排序 初 中 高
140 2003 / 2007 / 2010

恢复窗体中的数据信息排序
数据编辑技巧

◎通过窗体或报表对记录排序:OrderByOn 属性

如果通过 OrderBy 属性对数据进行排序后,需要将窗体中的记录恢复排

230
Chapter 05 数据排序技巧

序之前的顺序,需要将 OrderByOn 属性设置为 False,其具体的语法格式如

基础操作技巧
下所示:
Me.OrderByOn = False

◎应用实例
素材\第 5 章\恢复窗体中的数据信息排序.accdb

控件和对象
在上例中通过 OrderBy 属性实现对窗体中的记录按照员工姓名升序排序
之后,现在需要在窗体中新添加一个按钮,通过单击该按钮实现将记录恢复
至按姓名筛选排序前的顺序。

◎案例操作

对象操作技巧
01 在“员工档案管理”窗体中 02 通过设计视图模式进入 VBA
插入“恢复排序”按钮。 编辑器。

03 为“员工档案管理”窗体添 04 在“cmd_恢复_Click”事件
处理数据格式

加一个“cmd_恢复_Click”事 过程中添加恢复排序的代码。
件过程。

05 执行程序过程查看程序运行
效果。
数据排序技巧

◎过程源代码
源文件\第 5 章\恢复窗体中的数据信息排序.accdb

在“cmd_恢复_Click”事件过程中编写对应的 VBA 代码,将 OrderByOn


数据查询技巧

属性设置为 False,其具体的 VBA 代码如下。


Private Sub cmd_恢复_Click()
'确定不使用排序
Me.OrderByOn = False
数据编辑技巧

End Sub

◎执行过程
保存编写的 VBA 代码,将“员工档案管理”从窗体视图模式切换到窗

231
Access VBA 活用范例大辞典

体视图,单击“恢复排序”按钮,可以得到如图 5-2 所示的恢复排序前后的


基础操作技巧

效果。
控件和对象

图 5-2 恢复排序前后的效果
对象操作技巧

141 在加载窗体时排序数据记录 初 中 高
141 2003 / 2007 / 2010

在加载窗体时排序数据记录
◎通过窗体或报表对记录排序:Load 事件、OrderBy 属性
处理数据格式

在 VBA 编程中,如果想要在加载窗体时为窗体中的记录排序,需要在
窗体的 Load 事件中编写排序代码来实现。

为窗体的 Load 事件编写代码,可以直接通过数据库工具进入 VBA 编辑


数据排序技巧

器编写代码,也可以通过窗体的设计视图的属性表,选择“事件”选项卡下
的“加载”选项进入 VBA 编辑器进行代码的编写。

窗体的 Load 事件的语法格式如下所示:


Private Sub Form_Load()
数据查询技巧

[加载窗体时执行的代码]
End Sub

◎应用实例
素材\第 5 章\在加载窗体时排序数据记录.accdb
数据编辑技巧

本例需要在打开“员工基本资料”窗体时,窗体中的数据按照职务升序
的顺序排列。

232
Chapter 05 数据排序技巧

◎案例操作

基础操作技巧
01 通过设计视图模式为“员工 02 在“Form_Load”事件过程中
基本资料”窗体添加“Form_ 添加按职务排序代码。
Load”事件过程。

03 执行程序过程查看程序运行

控件和对象
效果。

◎过程源代码

对象操作技巧
源文件\第 5 章\在加载窗体时排序数据记录.accdb

在“Form_Load”事件过程中编写对应的 VBA 代码,设置排序字段,执


行排序设置,其具体的 VBA 代码如下。
'在窗体的 Load 事件中实现加载窗体时的排序
处理数据格式

Private Sub Form_Load()


'按照职务进行排序
Me.OrderBy = "职务"
Me.OrderByOn = True
End Sub
数据排序技巧

◎执行过程
保存编写的 VBA 代码,重新加载“员工基本资料”窗体,加载的窗体
如图 5-3 所示。
数据查询技巧
数据编辑技巧

图 5-3 加载窗体后的数据已经按照职务升序排序

233
Access VBA 活用范例大辞典

142 在当前窗体中对数据进行多条件排序 初 中 高
142 2003 / 2007 / 2010
基础操作技巧

在当前窗体中对数据进行多条件排序
◎通过窗体或报表对记录排序:OrderBy 属性、OrderByOn 属性

如果需要在当前窗体中使用多个条件对数据记录进行排序,需要在
控件和对象

OrderBy 属性中依次设置用于排序的关键字,并使用英文状态下的逗号“,”
隔开,其具体的语法格式如下所示:
Me.OrderBy = "[主要关键字],[次要关键字],…"

◎应用实例
对象操作技巧

素材\第 5 章\在当前窗体中对数据进行多条件排序.accdb

本例需要在“员工工资核算”窗体中,单击“多条件排序”按钮,实现
对其中的数据记录实现按照“基本工资”升序排序,对基本工资相同的记录,
再按照“提成”升序的方式排序。
处理数据格式

◎案例操作

01 在“员工工资核算”窗体界 02 通过设计视图模式进入 VBA


面中插入 “多条件排序”按钮。 编辑器。
数据排序技巧

03 在“员工工资核算”窗体中 04 在“cmd_多条件排序_Click”
添加“cmd_多条件排序_Click” 事件过程中添加按基本工资升
事件过程。 序,提成升序排序的代码。

05 执行程序过程查看程序运行
数据查询技巧

效果。

◎过程源代码
源文件\第 5 章\在当前窗体中对数据进行多条件排序.accdb
数据编辑技巧

在“cmd_多条件排序_Click”事件过程中编写对应的 VBA 代码,设置


排序字段,执行排序过程,其具体的 VBA 代码如下。
'实现按照基本工资升序排序,如果基本工资相同

234
Chapter 05 数据排序技巧

'再按照提成升序方式排序

基础操作技巧
Private Sub cmd_多条件排序_Click()
'设置多个排序字段和提成的排序方式
Me.OrderBy = "基本工资,提成"
Me.OrderByOn = True
End Sub

◎执行过程

控件和对象
保存编写的 VBA 代码,将窗体的视图模式切换到窗体视图,单击“多
条件排序”按钮,可以得到如图 5-4 所示的多条件排序前后的效果。

对象操作技巧
处理数据格式
数据排序技巧

图 5-4 实现多条件排序

143 打开其他窗体并进行多条件排序
数据查询技巧

初 中 高
143 2003 / 2007 / 2010

打开其他窗体并进行多条件排序
◎通过窗体或报表对记录排序:OrderBy 属性、OpenForm 属性
数据编辑技巧

在 VBA 编程中,如果需要将窗体中的数据在加载时按照某个字段从大
到小进行排序,需要使用 OrderBy 属性和 OrderByOn 属性,并且需要将
OrderBy 属性指定的字段后加上“desc”
,其具体的语法格式如下所示:

235
Access VBA 活用范例大辞典

窗体名.OrderBy="[排序关键字] desc"
基础操作技巧

如果需要在当前窗体中通过某种方式打开其他的窗体,需要使用到
OpenForm 方法。具体的语法格式如下所示:
DoCmd.OpenForm ("[窗体名]")
如果需要实现对当前窗体之外的窗体中的数据进行排序,需要使用如下
所示的代码来实现:
控件和对象

Forms!窗体名.OrderBy="[排序关键字]"
Forms!窗体名.OrderByOn=True

◎应用实例
对象操作技巧

素材\第 5 章\打开其他窗体并进行多条件排序.accdb

本例需要在“控制窗口”窗体中单击控制按钮,打开“员工档案管理”
窗体,并对其中的数据记录实现按照姓名降序,姓名排序相同的按照出生年
月升序排序。
处理数据格式

◎案例操作

01 在“控制窗口”窗体中插入 02 为 “ 控 制 窗 口 ” 窗 体 添 加
控制按钮。 “cmd_打开并排序_Click”事件
过程。
数据排序技巧

03 在“cmd_打开并排序_Click”
04
事件过程中添加按姓名降序, 执行程序过程查看程序运行
出生年月升序排序代码。 效果。
数据查询技巧

◎过程源代码
源文件\第 5 章\打开其他窗体并进行多条件排序.accdb

在事件过程中编写对应的 VBA 代码,打开“员工档案管理”窗体,对


该窗体中的记录设置排序字段和排序方式,执行排序设置,其具体的 VBA
数据编辑技巧

代码如下。
Private Sub cmd_打开并排序_Click()
'打开员工档案管理窗体

236
Chapter 05 数据排序技巧

DoCmd.OpenForm ("员工档案管理")

基础操作技巧
'按照姓名降序,出生年月升序排序
Forms.员工档案管理.OrderBy = "姓名 desc,出生年月"
Forms.员工档案管理.OrderByOn = True
End Sub

◎执行过程

控件和对象
保存编写的 VBA 代码,切换“控制窗口”窗体的视图模式至窗体视图,
单击控制按钮,可以打开“员工档案管理”窗体,该窗体打开时已实现按照
姓名降序,出生年月升序排序,如图 5-5 所示。

对象操作技巧
处理数据格式
数据排序技巧

图 5-5 单击按钮打开窗体并排序的效果

144 加载报表时排序数据记录 初 中 高
144 2003 / 2007 / 2010

加载报表时排序数据记录
数据查询技巧

◎通过窗体或报表对记录排序:OrderBy 属性、OrderOn 属性

如果想要在加载报表的时候对数据记录进行排序,需要在 Open 事件中


使用 OrderBy 属性和 OrderOn 属性。报表的 Open 事件的语法格式如下所示:
数据编辑技巧

Private Sub [报表名]_Open(Cancel As Integer)


[报表打开时执行的代码]
End Sub

237
Access VBA 活用范例大辞典

需要注意不能够将排序操作代码设置在报表的 Load 事件中,


设置在 Load
基础操作技巧

事件中会使程序陷入死循环。

◎应用实例
素材\第 5 章\加载报表时排序数据记录.accdb

本例需要实现在打开报表时,
其中的数据记录按照部门升序的方式排序。
控件和对象

◎案例操作

01 通 过 设 计 视 图 模 式 进 入 02 为“员工档案”报表添加“员
VBA 编辑器。 工档案_Open”事件过程。
对象操作技巧

03 在“员工档案_Open”事件过 04 执行程序过程查看程序运行
程中添加按照部门升序排序的 效果。
代码。
处理数据格式

◎过程源代码
源文件\第 5 章\加载报表时排序数据记录.accdb

在“员工档案_Open”事件过程中编写对应的 VBA 代码,设置排序字段,


数据排序技巧

执行排序操作,其具体的 VBA 代码如下。


'打开报表时实现按照部门升序排序
Private Sub 员工档案_Open(Cancel As Integer)
'设置排序字段为部门
Me.OrderBy = "部门"
数据查询技巧

'执行排序操作
Me.OrderByOn = True
End Sub

◎执行过程
数据编辑技巧

保存编写的 VBA 代码,切换“Report_员工档案”报表的视图模式至报


表视图或重新打开报表,
可以得到如图 5-6 所示的设置报表的 Open 事件前后
的效果。

238
Chapter 05 数据排序技巧

基础操作技巧
控件和对象
对象操作技巧

图 5-5 设置报表 Open 事件前后打开报表的效果


处理数据格式

145 获取文本框中设置的字段灵活排序 初 中 高
145 2003 / 2007 / 2010

获取文本框中设置的字段灵活排序
数据排序技巧

◎通过窗体或报表对记录排序:OrderBy 属性、OrderOn 属性

如果要将输入文本框的字段作为排序的关键字,需要将 OrderBy 属性值


设置为文本框的内容,其具体的语法格式如下所示:
数据查询技巧

[对象名称].OrderBy = [文本框名]
因为没有直接使用文本指定字段,所以不需要使用双引号将文本名称括
起来。

◎应用实例
数据编辑技巧

素材\第 5 章\获取文本框中设置的字段灵活排序.accdb

本例中需要在“员工档案”窗体中的文本框中输入排序字段名称后,单

239
Access VBA 活用范例大辞典

击“排序”按钮,即可实现根据文本框中的内容对员工档案中的记录进行升
基础操作技巧

序排序。

◎案例操作

01 在“员工档案”窗体中添加 02 为窗体添加一个“cmd_排序
“排序字段名称”文本框和“排 _Click”事件过程。
控件和对象

序”按钮。

03
在“cmd_排序_Click”事件 04 在文本框中输入排序字段,
过程中添加按文本框中的内容 单击按钮查看程序运行效果。
对象操作技巧

升序排序的代码。

◎过程源代码
源文件\第 5 章\获取文本框中设置的字段灵活排序.accdb
处理数据格式

在事件过程中编写对应的 VBA 代码,设置排序字段为文本框中的内容,


执行排序操作,其具体的 VBA 代码如下。
'实现单击按钮后,按照文本框中指定的字段升序排序
Private Sub cmd_排序_Click()
数据排序技巧

'将文本框中的内容赋值给 OrderBy 属性
Me.OrderBy = txt_输入字段
'执行排序操作
Me.OrderByOn = True
End Sub
数据查询技巧

◎执行过程
保存编写的 VBA 代码,切换“员工档案”窗体的视图模式至窗体视图,
在文本框中输入用于排序的字段,单击“排序”按钮,可以得到排序结果;

输入其他的字段名称,可以得到不同的排序结果,如图 5-7 所示。


数据编辑技巧

240
Chapter 05 数据排序技巧

基础操作技巧
控件和对象
图 5-7 在文本框中输入不同的字段得到不同的排序结果

对象操作技巧
146 通过下拉列表选择排序条件排序 初 中 高
146 2003 / 2007 / 2010

通过下拉列表选择排序条件排序
◎通过窗体或报表对记录排序:OrderBy 属性、OrderByOn 属性 处理数据格式

如果要将组合框中选择的字段作为排序的关键字进行降序排序,需要在
OrderBy 属性中设置组合框的名称,并添加“desc”来指定排序方式。

由于组合框名称属于引用,而“desc”属于直接输入的文本,所以需要
使用“&”符号将组合框名称和“desc”连接起来,并且字符之间需要由半
数据排序技巧

角空格隔开,其具体的语法格式如下所示:
[对象名称].OrderBy = [组合框名称] & “desc”

◎应用实例
素材\第 5 章\通过下拉列表选择排序条件排序.accdb
数据查询技巧

本例中需要实现在“员工档案”窗体中的组合框中选择排序字段之后,
单击“排序”按钮即可根据组合框中的内容对员工档案进行排序。

◎案例操作
数据编辑技巧

01 在“员工档案”窗体中添加 02 将组合框的“行来源”设置
组合框和“排序”按钮。 为“员工档案”
,“行来源类型”
设置为“字段列表”。

241
Access VBA 活用范例大辞典

04
基础操作技巧

03 为 窗 体 添 加 “ cmd_ 排 序 在“cmd_排序_Click”事件
_Click”事件过程。 过程中添加按文本框中的内容
排序的代码。

05 切换至窗体视图查看程序运
行效果。
控件和对象

◎过程源代码
源文件\第 5 章\通过下拉列表选择排序条件排序.accdb
对象操作技巧

在事件过程中编写对应的 VBA 代码,设置排序字段为组合框中的内容,


设置排序方式,执行排序操作,其具体的 VBA 代码如下。
Private Sub cmd_排序_Click()
'根据组合框中的字段降序排序
Me.OrderBy = cmb_字段列表 & " desc"
处理数据格式

Me.OrderByOn = True
End Sub

◎执行过程
保存编写的 VBA 代码,切换“员工档案”窗体的视图模式至窗体视图,
数据排序技巧

在组合框中选择不同的排序的字段,可以得到不同的排序结果,如图 5-8 所
示。
数据查询技巧
数据编辑技巧

图 5-8 在组合框中选择不同字段的排序效果

242
Chapter 05 数据排序技巧

147 自定义多条件来排序数据 初 中 高
147

基础操作技巧
2003 / 2007 / 2010

自定义多条件来排序数据
◎通过窗体或报表对记录排序:OrderBy 属性、OrderOn 属性

如果需要从两个组合框中选择两个字段作为关键字进行排序,需要将组

控件和对象
合框名称使用“ & "," & (每两个字符之间均有半角空格)”连接起来,如果
需要降序排序,可以将“desc”连接起来,其具体的语法格式如下所示:
对象名称.OrderBy =[主要关键字] & "," &[次要关键字] & " desc"
如果只指定了一个组合框中的值,
则没有指定值的组合框会直接被忽略;

对象操作技巧
如果两个组合框均没有指定值,或指定的值不是已有字段,则不会进行排序。

◎应用实例
素材\第 5 章\自定义多条件来排序数据.accdb

本例中需要在“员工档案”窗体中,通过两个组合框设置排序的主要关
处理数据格式

键字和次要关键字,单击“排序”按钮后,即可实现根据组合框中的内容对
员工档案按照主要关键字升序排序,主要关键字相同的则按照次要关键字降
序排序。

◎案例操作
数据排序技巧

01 在窗体中添加“主要关键字 02 将两个组合框的“行来源”
和“次要关键字”组合框。 都设置为“员工档案”,“行来
源类型”都设置为“字段列表”

数据查询技巧

03
为 窗 体 添 加 “ cmd_ 排 序 04 在“cmd_排序_Click”事件
_Click”事件过程。 过程中添加按文本框中的内容
排序的代码。
05
切换至窗体视图查看程序运
数据编辑技巧

行效果。

243
Access VBA 活用范例大辞典

◎过程源代码
基础操作技巧

源文件\第 5 章\自定义多条件来排序数据.accdb

在“cmd_排序_Click”事件过程中编写对应的 VBA 代码,设置排序字


段为两个组合框中的内容,设置排序方式,执行排序操作,其具体的 VBA
代码如下。
控件和对象

'根据组合框中设置的主要关键字升序排序,次要关键字降序排序
Private Sub cmd_排序_Click()
'根据选择的字段进行排序
Me.OrderBy = cmb_主关键字 & "," & cmb_次关键字 & " desc"
'执行排序操作
对象操作技巧

Me.OrderByOn = True
End Sub

◎执行过程
保存编写的 VBA 代码,切换“员工档案”窗体的视图模式至窗体视图,在
处理数据格式

两个组合框中选择排序字段,单击“排序”按钮,可以得到如图 5-9 所示结果。


数据排序技巧

图 5-9 多条件排序数据的效果
数据查询技巧

148 通过对话框设置排序关键字 初 中 高
148 2003 / 2007 / 2010

通过对话框设置排序关键字
数据编辑技巧

◎通过窗体或报表对记录排序:OrderBy 属性、OrderOn 属性

如果需要在每次加载报表的时候,都可以指定排序关键字,可以在报表
的 Open 事件中使用对话框。
244
Chapter 05 数据排序技巧

将输入到对话框中的字段保存至字符串变量中,然后将该参数赋值给

基础操作技巧
Order 属性,变量的用法与控件名称的用法相似。其中,对话框的语法格式
如下所示:
[字符串变量]= InputBox("[说明性文字]")
如果需要在该数据库中打开所有的报表均执行该操作,则需要使用下面
的事件过程来实现:

控件和对象
Private Sub Report_Open(Cancel As Integer)
[事件过程代码]
End Sub
该事件过程与实例 144 的实践过程不同,该事件过程中没有直接使用具

对象操作技巧
体的报表名称,而是使用了 Report 来代指所有的报表。

◎应用实例
素材\第 5 章\通过对话框设置排序关键字.accdb
处理数据格式

本例中需要在打开报表时,可以通过对话框设置排序字段,从而使得打
开的报表按照指定的字段降序排序。

◎案例操作
数据排序技巧

01 为报表添加“Report_Open” 02 在“Report_Open”事件过程
事件过程。 中添加弹出对话框代码和排序
代码。

03
数据查询技巧

切换至窗体视图查看程序运
行效果。

◎过程源代码
源文件\第 5 章\通过对话框设置排序关键字.accdb
数据编辑技巧

在“Report_Open”事件过程中编写对应的 VBA 代码,设置排序字段为


对话框中输入的内容,设置排序方式,执行排序操作,其具体的 VBA 代码

245
Access VBA 活用范例大辞典

如下所示。
基础操作技巧

Private Sub Report_Open(Cancel As Integer)


'定义字符串变量
Dim keyword As String
'使用 keyword 获取对话框中输入的字段
keyword = InputBox("请输入降序排序关键字")
将 keyword 设置为降序排序关键字
控件和对象

Me.OrderBy = keyword & " desc"


Me.OrderByOn
End Sub

◎执行过程
对象操作技巧

保存编写的 VBA 代码,切换“员工档案”报表至报表视图,在对话框


中输入字段,打开的报表已经按照设置的关键字降序排序,如图 5-10 所示。
处理数据格式
数据排序技巧

图 5-10 打开报表时设置排序关键字进行降序排序

149 在子窗体中排序数据 初 中 高
数据查询技巧

149 2003 / 2007 / 2010

在子窗体中排序数据
◎通过窗体或报表对记录排序:OrderBy 属性、OrderOn 属性

如果窗体排序的数据记录处于当前窗体的子窗体中,可对子窗体中的数
数据编辑技巧

据进行排序,通过窗体的逐层引用来实现,其具体的语法格式如下所示:
Forms![主窗体名].[子窗体名].Form.OrderBy=“[排序关键字]”

246
Chapter 05 数据排序技巧

Forms![主窗体名].[子窗体名].Form.OrderByOn=True

基础操作技巧
◎应用实例
素材\第 5 章\在子窗体中排序数据.accdb

本例需要实现在单击主窗体中的“子窗体数据排序”按钮后,打开对话
框并设置对子窗体排序的字段名称,然后根据设置的字段对子窗体中的数据

控件和对象
进行排序。

◎案例操作

01 在主窗体中添加“子窗体数 02 为窗体添加“cmd_子窗体排

对象操作技巧
据排序”按钮。 序_Click”事件过程。

03
在“cmd_子窗体排序_Click” 04 切换至窗体视图查看程序运
事件过程中添加按对话框中的 行效果。
内容排序的代码。
处理数据格式

◎过程源代码
源文件\第 5 章\在子窗体中排序数据.accdb
数据排序技巧

在事件过程中编写对应的 VBA 代码,设置排序关键字为对话框中的内


容,设置排序方式,执行排序操作,其具体的 VBA 代码如下。
'根据对话框中设置的字段对子窗体进行升序排序, ,默认按照编号排序
Private Sub cmd_子窗体排序_Click()
Dim keyword As String
数据查询技巧

'使用对话框得到排序关键字,默认关键字为“编号”
keyword = InputBox("请输入子窗体排序关键字", , "编号")
'对子窗体中的数据记录排序
Forms!主窗体.子窗体.Form.OrderBy = keyword
Forms!主窗体.子窗体.Form.OrderByOn = True
数据编辑技巧

End Sub

247
Access VBA 活用范例大辞典

◎执行过程
基础操作技巧

保存编写的 VBA 代码,切换“主窗体”窗体的视图模式至窗体视图,


单击“子窗体数据排序”按钮,在对话框中输入排序关键字对子窗体中的数
据进行排序,如图 5-11 所示。
控件和对象
对象操作技巧

图 5-11 在对话框中设置排序关键字进行排序

150 通过选项按钮指定排序依据 初 中 高
150
处理数据格式

2003 / 2007 / 2010

通过选项按钮指定排序依据
◎通过窗体或报表对记录排序:OrderBy 属性、If…Then…Else 语句

如果需要同时指定排序关键字和排序方式,可以同时使用组合框和单选
数据排序技巧

按钮来实现。

组合框中的数据设置为列表字段;单选按钮需要在选项组中使用,并使
用 If…Then…Else 语句对选项组的值进行判断,并将选项组的值转换为表示
排序方式的字符串。
数据查询技巧

◎应用实例
素材\第 5 章\通过选项按钮指定排序依据.accdb

本例中需要通过单选按钮实现排序方式的选择,通过组合框实现排序关
键字的指定,在选定排序关键字和排序方式之后,单击“排序”按钮,即可
数据编辑技巧

实现指定方式的排序。

248
Chapter 05 数据排序技巧

◎案例操作

基础操作技巧
01 在窗体中添加“排序方式” 02 为窗体添加“排序关键字”
选项组,选项组中包含两个选 组合框。
项按钮。

控件和对象
05 在“cmd_排序_Click”事件 06 切换至窗体视图查看程序运
过程中添加排序代码。 行效果。

03 在“员工档案”窗体中添加 04 为 窗 体 添 加 “ cmd_ 排 序
“排序”按钮。

对象操作技巧
_Click”事件过程。

◎过程源代码
源文件\第 5 章\通过选项按钮指定排序依据.accdb

在事件过程中编写对应的 VBA 代码,设置排序关键字为组合框中的内


处理数据格式

容,使用 If…Then…Else 语句判断选择的排序方式,然后进行排序设置,具


体的 VBA 代码如下。
'实现排序方式和排序关键字的可选
Private Sub cmd_排序_Click()
数据排序技巧

Dim opt_order As String


'将选项按钮的值保存在字符串变量 opt_order 中
If fra_排序 = 1 Then
opt_order = ""
Else
opt_order = " desc"
数据查询技巧

End If
'根据选择关键字和排序方式排序
Me.OrderBy = Me.cmb_关键字 & opt_order
Me.OrderByOn = True
End Sub
数据编辑技巧

◎执行过程
保存编写的 VBA 代码,切换至主窗口窗体视图,选择排序方式和排序

249
Access VBA 活用范例大辞典

关键字,单击“排序”按钮,排序的结果如图 5-12 所示。


基础操作技巧
控件和对象

图 5-12 根据选择的排序方式和关键字排序
对象操作技巧

151 将查询中的字段设置为排序依据(1) 初 中 高
151 2003 / 2007 / 2010

将查询中的字段设置为排序依据(1)
◎通过查询排序数据:Sort 属性、Recoedset 属性、Requery 方法
处理数据格式

如果需要在 DAO 中将绑定窗体中的记录排序,可以使用 Sort 属性来进


行,其方法与 OrderBy 属性的使用方法基本相同,其具体的语法格式为:
[记录集].Sort = "[排序字段名]"
DAO 的 Sort 属性可以在“DynaSetType”或“SnapShotType”的 Recordset
数据排序技巧

对象中使用,所以打开的记录集应该设置为这两种类型之一。

只设置 Sort 属性,不能够实现对记录的排序。需要先执行 Recordset 属


性的 OpenRecordset 方法,重新设置已经排序的 Recordset,然后将排序后的
Recordset 对象设置到窗体的 Recordset 中。
数据查询技巧

Set [排序后的记录集] = [排序后的记录集].OpenRecordset


Set Me.Recordset = [排序后的记录集]
将当前窗体的记录集设置为排序后的记录集之后,还需要使用 Requery
方法重绘窗体,其具体的语法格式如下所示。
数据编辑技巧

Me.Requery

250
Chapter 05 数据排序技巧

◎应用实例

基础操作技巧
素材\第 5 章\将查询中的字段设置为排序依据(1).accdb

在本例中,需要通过 DAO 方法,通过所绑定窗体的数据来源查询,实


现对窗体中的记录集按照姓名升序的方式排序。

◎案例操作

控件和对象
01 创建一个以“Q_学生基本信 02 在窗体中添加“按姓名升序
息”查询为数据源的绑定窗体。 排序”按钮。

对象操作技巧
03 在“cmd_排序_Click”事件 04 切换至窗体视图查看程序运
过程中添加排序代码。 行效果。

◎过程源代码
源文件\第 5 章\将查询中的字段设置为排序依据(1).accdb
处理数据格式

在事件过程中编写对应的 VBA 代码,获取排序字段,设置窗体记录集,


其具体的 VBA 代码如下。
'通过 DAO 方法根据窗体的数据来源查询
数据排序技巧

'实现对窗体中的记录按照姓名实现排序的目的
Private Sub cmd_排序_Click()
Dim db As DAO.Database
Dim rs As DAO.Recordset
'根据当前打开的数据库中的“Q_学生基本信息”查询来取得记录集 Recordset
Set db = CurrentDb()
数据查询技巧

Set rs = db.OpenRecordset("Q_学生基本信息", dbOpenDynaset)


'根据姓名排序
rs.Sort = "姓名"
'再次取得记录集 Recordset
Set rs = rs.OpenRecordset
数据编辑技巧

'设置窗体中的记录集 Recordset,重新绘制窗体
Set Me.Recordset = rs
Me.Requery
'释放记录集 Recordset 和数据库

251
Access VBA 活用范例大辞典

Set rs = Nothing
基础操作技巧

Set db = Nothing
End Sub

◎执行过程
保存编写的 VBA 代码,将窗体的视图模式切换到窗体视图,单击“按
姓名升序排序”按钮,可以得到如图 5-13 所示的排序前后的效果。
控件和对象
对象操作技巧
处理数据格式
数据排序技巧

图 5-13 对记录按姓名排序前后的效果

152 将查询中的字段设置为排序依据(2) 初 中 高
152 2003 / 2007 / 2010
数据查询技巧

将查询中的字段设置为排序依据(2)
◎通过查询排序数据:Sort 属性、CursorLocation 属性、Requery 方法

在 ADO 中,
可以针对 CursorLocation 属性值为
“adUseClient”
的 Recordset
进行排序。由于连接到 Access 资料库中取得的 Recordset 的默认值为
数据编辑技巧

“adUseServer”
,所以在取得 Recordset 之前,需要先更改 CursorLocation 属性
的值为“adUseClient”
,其具体的语法格式如下所示:
[记录集].CursorLocation = adUseClient
252
Chapter 05 数据排序技巧

在 ADO 中,对记录集中的记录排序依旧是使用 Sort 属性来完成的,其

基础操作技巧
使用方法与 DAO 中的方法类似。

◎应用实例
素材\第 5 章\将查询中的字段设置为排序依据(2).accdb

本例需要以“Q_员工工资”查询为数据源,在绑定的窗体“F_员工工资”

控件和对象
中,使用 ADO 方法,通过单击“按照职务排序”按钮,实现窗体中的数据
记录按照职务升序排序。

◎案例操作

对象操作技巧
01 创建一个以“Q_员工工资” 02 在窗体中添加“按照职务排
查询为数据源的绑定窗体。 序”按钮。

03 在“cmd_排序_Click”事件 04 切换至窗体视图查看程序运
处理数据格式

过程中添加排序代码。 行效果。

◎过程源代码
源文件\第 5 章\将查询中的字段设置为排序依据(2).accdb
数据排序技巧

在事件过程中编写对应的 VBA 代码,获取排序字段,设置窗体记录集,


其具体的 VBA 代码如下。
Private Sub cmd_排序_Click()
Dim cn As New ADODB.Connection
数据查询技巧

Dim rs As New ADODB.Recordset


'连接到当前项目,将游标服务设置在客户端
Set cn = CurrentProject.Connection
rs.cursorlocation = aduseclient
'根据查询"Q_员工工资"得到记录集
rs.Open "Q_员工工资", cn, adopenkeyset, adlockoptimistic
数据编辑技巧

'根据“职务”排序
rs.Sort = "职务"
'将排序结果设置到窗体中
Set Me.Recordset = rs

253
Access VBA 活用范例大辞典

Me.Requery
基础操作技巧

'关闭记录集和资料库
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
End Sub

◎执行过程
控件和对象

保存编写的 VBA 代码,将“F_员工工资”窗体的视图模式切换到窗体视图,


单击“按照职务排序”按钮,可以得到如图 5-14 所示的排序前后的效果。
对象操作技巧
处理数据格式

图 5-14 对记录按职务排序前后的效果

153 恢复根据查询字段排序的顺序(1) 初 中 高
数据排序技巧

153 2003 / 2007 / 2010

恢复根据查询字段排序的顺序(1)
◎通过查询排序数据:Sort 属性、Recoedset 属性、Requery 方法

在 DAO 中,如果需要恢复排序之前的状态,只需要将 Sort 属性设置为


数据查询技巧

空即可,其具体的语法格式如下所示:
rs.Sort = ""
与设置排序时一样,如果只设置 Sort 属性,是不会得到想要的结果。需
要先执行 Recordset 属性的 OpenRecordset 方法,对 Recordset 重新设置,然
数据编辑技巧

后将 Recordset 对象设置到窗体的 Recordset 中。

254
Chapter 05 数据排序技巧

◎应用实例

基础操作技巧
素材\第 5 章\恢复根据查询字段排序的顺序(1).accdb

本例中需要通过单击“取消排序”按钮,将实例 151 中使用 DAO 方法


对窗体中数据集的排序恢复至未排序时的状态。

◎案例操作

控件和对象
01 在窗体中添加“取消排序” 02 在“cmd_取消排序_Click”
按钮。 事件过程中添加排序代码。

对象操作技巧
03 切换至窗体视图查看程序运
行效果。

◎过程源代码
源文件\第 5 章\恢复根据查询字段排序的顺序(1).accdb
处理数据格式

在事件过程中编写对应的 VBA 代码,将排序关键字设置为空以恢复排


序之前的顺序,其具体的 VBA 代码如下。
'恢复使用 DAO 方法设置的排序
数据排序技巧

Private Sub cmd_取消排序_Click()


Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb()
Set rs = db.OpenRecordset("Q_学生基本信息", dbOpenDynaset)
'将排序关键字设置为空,再次取得记录集 Recordset
数据查询技巧

rs.Sort = ""
Set rs = rs.OpenRecordset
'设置窗体中的记录集 Recordset,重新绘制窗体
Set Me.Recordset = rs
Me.Requery
数据编辑技巧

'释放记录集 Recordset 和数据库


Set rs = Nothing
Set db = Nothing
End Sub

255
Access VBA 活用范例大辞典

◎执行过程
基础操作技巧

保存编写的 VBA 代码,将窗体的视图模式切换到窗体视图,单击“取


消排序”按钮,可以得到如图 5-15 所示的效果。
控件和对象
对象操作技巧
处理数据格式

图 5-15 恢复记录排序前后的效果

提示:直接取得查询中的 Recordset 恢复排序


数据排序技巧

将 Sort 属性的值设置为空,可以实现恢复记录最初顺序的目的。本例还可以直接
取得查询“Q_学生基本信息”中的 Recordset 来恢复排序,其具体的 VBA 代码
如下( 源文件\第 5 章\恢复根据查询字段排序的顺序(3).accdb)

'直接去掉数据源记录集恢复排序之前的顺序
Private Sub cmd_取消排序_Click()
数据查询技巧

Dim db As DAO.Database
Dim rs As DAO.Recordset
'得到窗体数据源记录集
Set db = CurrentDb()
Set rs = db.OpenRecordset("Q_学生基本信息", dbOpenDynaset)
数据编辑技巧

'将窗体中的记录集直接设置为查询中的记录集,重新绘制窗体
Set Me.Recordset = rs
Me.Requery
'释放记录集 Recordset 和数据库

256
Chapter 05 数据排序技巧

Set rs = Nothing

基础操作技巧
Set db = Nothing
End Sub

154 恢复根据查询字段排序的顺序(2) 初 中 高
154 2003 / 2007 / 2010

恢复根据查询字段排序的顺序(2)

控件和对象
◎通过查询排序数据:Sort 属性、CursorLocation 属性、Requery 方法

恢复使用 ADO 方法对绑定窗体中记录排序之前的顺序,与恢复 DAO 方


法排序之前的顺序类似,只需要将 Sort 属性的值设置为空字符即可。

对象操作技巧
◎应用实例
素材\第 5 章\将查询中的字段设置为排序依据(2).accdb

在实例 152 中,已经在“F_员工工资”窗体中对记录按照“职务”排序,


现在需要通过单击“取消排序”按钮使记录恢复到排序之前的顺序。
处理数据格式

◎案例操作

01 在“F_员工工资”窗体中添 02 在“cmd_取消排序_Click”
加“取消排序”按钮。 事件过程中添加排序代码。
数据排序技巧

03 切换至窗体视图查看程序运
行效果。
数据查询技巧

◎过程源代码
源文件\第 5 章\将查询中的字段设置为排序依据(2).accdb

在事件过程中编写对应的 VBA 代码,获取排序字段,执行排序设置,


其具体的 VBA 代码如下。
数据编辑技巧

Private Sub cmd_取消排序_Click()


Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset

257
Access VBA 活用范例大辞典

'连接到当前项目,将游标服务设置在客户端
基础操作技巧

Set cn = CurrentProject.Connection
rs.cursorlocation = aduseclient
'根据查询"Q_员工工资"得到记录集
rs.Open "Q_员工工资", cn, adopenkeyset, adlockoptimistic
'将排序关键字设置为空
rs.Sort = ""
控件和对象

Set Me.Recordset = rs
Me.Requery
'关闭记录集和资料库
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
对象操作技巧

End Sub

◎执行过程
保存编写的 VBA 代码,将窗体的视图模式切换到窗体视图,单击“取
消排序”按钮,可以得到如图 5-16 所示的效果。
处理数据格式
数据排序技巧

图 5-16 取消排序后的效果

155 在加载窗体时指定查询字段排序数据(1) 初 中 高
数据查询技巧

155 2003 / 2007 / 2010

在加载窗体时指定查询字段排序数据(1)
◎通过查询排序数据:Sort 属性、ControlSourse 属性

在 DAO 中,如果需要在非绑定窗体中显示表或者查询中的记录,需要
数据编辑技巧

使用 ControlSourse 属性来设置控件来源,其具体的语法格式为:
Me![文本框名].ControlSource = "[数据源字段名]"

258
Chapter 05 数据排序技巧

与按钮的 Click 事件相同,在窗体的 Load 事件也需要使用 Recordset 对

基础操作技巧
象的 OpenRecordset 方法,以打开需要显示的表或者查询的记录集以及重新
设置排序后的记录集。

◎应用实例
素材\第 5 章\在加载窗体时指定查询字段排序数据(1).accdb

控件和对象
本例中需要创建一个名为“F_学生基本信息”的非绑定窗体,在加载此
窗体时,可以通过打开的对话框指定排序的参数,从而使得该窗体可以按照
指定的参数显示查询“Q_学生基本信息”中的数据。

◎案例操作

对象操作技巧
01 创建一个显示“Q_学生基本 02 在窗体中添加“Form_Load”
信息”查询的非绑定窗体。 事件过程。
处理数据格式

03 在 Form_Load”事件过程中 04 切换至窗体视图查看程序运
添加排序代码。 行效果。

◎过程源代码
源文件\第 5 章\在加载窗体时指定查询字段排序数据(1).accdb
数据排序技巧

在事件过程中编写对应的 VBA 代码,通过对话框获取排序参数,设置


窗体记录集,其具体的 VBA 代码如下。
'在加载非绑定窗体“F_学生基本信息”时,按照指定排序关键字排序
数据查询技巧

Private Sub Form_Load()


Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim keyword As String
'通过对话框获取排序参数
keyword = InputBox("请输入排序参数,如“姓名 desc”", , "学号")
数据编辑技巧

'打开的数据库中查询“Q_学生基本信息”得到 Recordset
Set db = CurrentDb()
Set rs = db.OpenRecordset("Q_学生基本信息", dbOpenDynaset)

259
Access VBA 活用范例大辞典

'根据指定的排序参数排序
基础操作技巧

rs.Sort = keyword
'重新打开记录集,使得 rs 表示的为排序后的记录集
Set rs = rs.OpenRecordset
'将当前窗体的记录集设置为排序后的记录集
Set Me.Recordset = rs
'指定当前窗体中各文本框的数据源为排序后的记录集的字段名
控件和对象

Me!学号.ControlSource = "学号"
Me!姓名.ControlSource = "姓名"
Me!性别.ControlSource = "性别"
Me!家庭地址.ControlSource = "家庭地址"
Me!邮编.ControlSource = "邮编"
对象操作技巧

Me!电话号码.ControlSource = "电话号码"
Me!系别.ControlSource = "系别"
Set rs = Nothing
Set db = Nothing
End Sub
处理数据格式

◎执行过程
保存编写的 VBA 代码,重新打开“F_学生基本信息”窗体,在对话框
中输入排序参数,单击“确定”按钮,可以得到如图 5-17 所示结果的效果。
数据排序技巧
数据查询技巧
数据编辑技巧

图 5-17 在加载窗体时通过对话框设置排序参数

260
Chapter 05 数据排序技巧

156 在加载窗体时指定查询字段排序数据(2) 初 中 高
156

基础操作技巧
2003 / 2007 / 2010

在加载窗体时指定查询字段排序数据(2)
◎通过查询排序数据:CursorLocation 属性、ControlSourse 属性

本例可以先将 CursorLocation 属性值设置为“adUseClient”,然后通过

控件和对象
Open 方法得到“Q_员工工资”查询中的 Recordset,并根据对话框中输入的
排序参数进行排序。

由于本例中的窗体为非绑定窗体,通过 ControlSourse 属性将字段的控件


来源设置为排序后的 Recordset 字段,其方法与在 DAO 中的方法类似。

对象操作技巧
◎应用实例
素材\第 5 章\在加载窗体时指定查询字段排序数据(2).accdb

本例要求使用 ADO 方法,在创建的非绑定窗体“F_员工工资”加载时,


可以通过对话框指定排序参数,从而使得该窗体中可以按照指定的排序参数
处理数据格式

显示“Q_员工工资”查询中的数据。

◎案例操作

01 创建一个绑定窗体“F_员工 02 将绑定窗体的数据来源和各
数据排序技巧

工资”
。 字段的数据来源删除,使窗体
成为非绑定窗体。

03 为窗体添加“Form_Load”事 04 在“Form_Load”事件过程中
数据查询技巧

件过程。 添加排序代码。

05 切换至窗体视图查看程序运
行效果。
数据编辑技巧

261
Access VBA 活用范例大辞典

◎过程源代码
基础操作技巧

源文件\第 5 章\在加载窗体时指定查询字段排序数据(2).accdb

在事件过程中编写对应的 VBA 代码,通过对话框获取排序参数,设置


窗体记录集,其具体的 VBA 代码如下。
'通过 ADO 方法在非绑定窗体中显示查询中的记录
控件和对象

Private Sub Form_Load()


Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim keyword As String
'连接到当前项目,将游标服务设置在客户端
对象操作技巧

Set cn = CurrentProject.Connection
rs.cursorlocation = aduseclient
'根据查询"Q_员工工资"得到记录集
rs.Open "Q_员工工资", cn, adopenkeyset, adlockoptimistic
'根据对话框中的参数排序
keyword = InputBox("请输入排序参数,如“姓名 desc”", , "员工编号")
处理数据格式

rs.Sort = keyword
'将当前窗体中的记录集设置为排序后的记录集
Set Me.Recordset = rs
'设置当前窗体的字段控件来源
Me!员工编号.ControlSource = "员工编号"
数据排序技巧

Me!姓名.ControlSource = "姓名"
Me!部门.ControlSource = "部门"
Me!职务.ControlSource = "职务"
Me!提成.ControlSource = "提成"
Me!基本工资.ControlSource = "基本工资"
Me!实得工资.ControlSource = "实得工资"
数据查询技巧

'关闭记录集和资料库
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
数据编辑技巧

End Sub

◎执行过程
保存编写的 VBA 代码,重新打开“F_员工工资”对话框,在对话框中
262
Chapter 05 数据排序技巧

输入排序参数,单击“确定”按钮,可以得到如图 5-18 所示的效果。

基础操作技巧
控件和对象
对象操作技巧
图 5-18 通过对话框设置排序参数后的显示效果

157 通过下拉列表选择查询字段作为排序依据(1) 初 中 高
157 2003 / 2007 / 2010

通过下拉列表选择查询字段作为排序依据(1)
处理数据格式

◎通过查询排序数据:Sort 属性、Recordset 属性、Requery 方法

在 DAO 中,如果要将绑定窗体中的记录排序,需要使用 Sort 属性设置


排序关键字,并使用 Recordset 属性和 Requery 方法重新绘制窗体。
数据排序技巧

在使用组合框设置排序关键字时,如果选择或输入的字符串不是窗体中
的字段,就会打开错误提示对话框。

使用组合框选择排序关键字后自动排序,需要使用组合框的 AfterUpdate
事件,其具体的语法格式如下所示:
数据查询技巧

Private Sub [组合框名]_AfterUpdate()


[排序代码]
End Sub

◎应用实例
数据编辑技巧

素材\第 5 章\通过下拉列表选择查询字段作为排序依据(1).accdb

本例中需要创建一个数据来源为查询“Q_学生基本信息”的窗体“F_
学生基本信息”
,并且需要在该窗体中建立一个下拉列表,通过选择该下拉列

263
Access VBA 活用范例大辞典

表中的选项,实现按照选择的选项进行降序排序。
基础操作技巧

◎案例操作

01 创建一个以“Q_学生基本信 02 在窗体中添加“选择排序关
息”为记录源的窗体。 键字(字段)
”组合框控件。
控件和对象

03 为窗体添加“ cmb_ 关 键 字 _ 04 在事件过程中添加排序程序


AfterUpdate”事件过程。 代码。

05 切换至窗体视图查看程序运
对象操作技巧

行效果。

◎过程源代码
源文件\第 5 章\通过下拉列表选择查询字段作为排序依据(1).accdb
处理数据格式

在事件过程中编写对应的 VBA 代码,通过对话框获取排序参数,设置


窗体记录集,其具体的 VBA 代码如下。
Private Sub cmb_关键字_AfterUpdate()
Dim db As DAO.Database
数据排序技巧

Dim rs As DAO.Recordset
'获取当前打开的数据库中的记录集
Set db = CurrentDb()
Set rs = db.OpenRecordset("Q_学生基本信息", dbOpenDynaset)
'根据选择的关键字排序
数据查询技巧

rs.Sort = cmb_关键字 & " desc"


'设置窗体中显示的记录集为排序后的记录集
Set rs = rs.OpenRecordset
Set Me.Recordset = rs
Me.Requery
Set rs = Nothing
数据编辑技巧

Set db = Nothing
End Sub

264
Chapter 05 数据排序技巧

◎执行过程

基础操作技巧
保存编写的 VBA 代码,将窗体的视图模式切换到窗体视图,在组合框
中选择排序关键字,可以得到如图 5-19 所示效果。

控件和对象
对象操作技巧
图 5-19 通过组合框设置排序关键字的排序效果

158 通过下拉列表选择查询字段作为排序依据(2) 初 中 高
158
处理数据格式

2003 / 2007 / 2010

通过下拉列表选择查询字段作为排序依据(2)
◎通过查询排序数据:Sort 属性、Recordset 属性、Requery 方法

在 ADO 中,如要要在打开窗体后进行排序,需要使用 Sort 属性来设置


数据排序技巧

排序的关键字,并使用 Requery 方法来重新绘制窗体中的记录集。

本例是在组合框选择排序关键字后自动排序,同样需要在组合框的
AfterUpdate 事件中设置排序代码。

◎应用实例
数据查询技巧

素材\第 5 章\通过下拉列表选择查询字段作为排序依据(2).accdb

本例中需要创建一个数据来源为查询“Q_员工工资”的窗体“F_员工工
资”
,并且需要在该窗体中建立一个下拉列表,
通过选择该下拉列表中的选项,
可以实现按照选择的选项进行降序排序。
数据编辑技巧

要求使用 ADO 来实现排序过程。

265
Access VBA 活用范例大辞典

◎案例操作
基础操作技巧

01 创建一个以“Q_员工工资” 02 在窗体中添加“选择排序关
为记录源的窗体。 键字”组合框控件。

03 为窗体添加“ cmb_ 关 键 字 _ 04 在事件过程中添加排序程序


控件和对象

AfterUpdate”事件过程。 代码。

05 切换至窗体视图查看程序运
行效果。
对象操作技巧

◎过程源代码
源文件\第 5 章\通过下拉列表选择查询字段作为排序依据(2).accdb

在事件过程中编写对应的 VBA 代码,通过对话框获取排序参数,设置


处理数据格式

窗体记录集,其具体的 VBA 代码如下。


Private Sub cmb_关键字_AfterUpdate()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
'连接到当前项目,将游标服务设置在客户端
数据排序技巧

Set cn = CurrentProject.Connection
rs.cursorlocation = aduseclient
'根据查询"Q_员工工资"得到记录集
rs.Open "Q_员工工资", cn, adopenkeyset, adlockoptimistic
'根据“姓名”排序,并重新绘制窗体中的记录集
数据查询技巧

rs.Sort = cmb_关键字 & " desc"


Set Me.Recordset = rs
Me.Requery
'关闭记录集和资料库
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
数据编辑技巧

End Sub

266
Chapter 05 数据排序技巧

◎执行过程

基础操作技巧
保存编写的 VBA 代码,将窗体的视图模式切换到窗体视图,在组合框
中选择排序关键字,如图 5-20 所示。

控件和对象
对象操作技巧
图 5-20 通过组合框设置排序关键字的排序效果

159 指定多个查询字段对数据进行排序(1) 初 中 高
159
处理数据格式

2003 / 2007 / 2010

指定多个查询字段对数据进行排序(1)
◎通过查询排序数据:Sort 属性、ControlSource 属性、OpenForm 方法

在 DAO 中,如果要通过窗体中的按钮打开另一个非绑定窗体,并在该
数据排序技巧

窗体中显示通过多个关键字进行排序的记录集,可以使用 Sort 属性设置已经


排序的记录集,然后使用 DoCmd 对象的 OpenForm 方法打开非绑定窗体,
最后使用 Recordset 属性和 ControlSource 属性设置非绑定窗体的控件来源。

DoCmd 对象的 OpenForm 方法的具体语法格式如下所示:


数据查询技巧

DoCmd.OpenForm "[欲打开的窗体名]"
在 Sort 属性中设置多个排序关键字的方法与 OrderBy 属性的方法相同,
其具体的语法格式如下所示:
rs.Sort = "[主要关键字] [排序方式],[次要关键字] [排序方式]"
数据编辑技巧

267
Access VBA 活用范例大辞典

◎应用实例
基础操作技巧

素材\第 5 章\指定多个查询字段对数据进行排序(1).accdb

本例需要创建一个非绑定窗体“F_学生基本信息”,然后通过单击另一
个窗体(本例中使用空白窗体)中的按钮来打开该窗体,并且要求打开的窗
体中显示查询“Q_学生基本信息”的数据,且这些数据按照性别升序、家庭
住址降序的顺序排列。
控件和对象

◎案例操作

01 创建一个显示“Q_学生基本 02 在一个空白窗体中添加控制
对象操作技巧

信息”的非绑定窗体。 按钮控件。

03 为窗体添加“cmd_排序和显示 04 在事件过程中添加排序程序
_Click”事件过程。 代码。
处理数据格式

05 切换至窗体视图查看程序运
行效果。

◎过程源代码
数据排序技巧

源文件\第 5 章\指定多个查询字段对数据进行排序(1).accdb

在事件过程中编写对应的 VBA 代码,设置排序关键字和排序方式,打


开非绑定窗体,为其设置记录集,具体的 VBA 代码如下。
数据查询技巧

Private Sub cmd_排序和显示_Click()


Dim db As DAO.Database
Dim rs As DAO.Recordset
'根据当前打开的数据库中的查询“Q_学生基本信息”得到 Recordset
Set db = CurrentDb()
Set rs = db.OpenRecordset("Q_学生基本信息", dbOpenDynaset)
数据编辑技巧

'根据家庭地址和性别排序
rs.Sort = "性别,家庭地址 desc"
Set rs = rs.OpenRecordset
'打开“F_学生基本信息”窗体,并将其记录集设置为当前打开的记录集

268
Chapter 05 数据排序技巧

DoCmd.OpenForm "F_学生基本信息"

基础操作技巧
Set Forms!F_学生基本信息.Recordset = rs
'设置窗体显示的字段
Forms!F_学生基本信息!学号.ControlSource = "学号"
Forms!F_学生基本信息!姓名.ControlSource = "姓名"
Forms!F_学生基本信息!性别.ControlSource = "性别"
Forms!F_学生基本信息!家庭地址.ControlSource = "家庭地址"

控件和对象
Forms!F_学生基本信息!邮编.ControlSource = "邮编"
Forms!F_学生基本信息!电话号码.ControlSource = "电话号码"
Forms!F_学生基本信息!系别.ControlSource = "系别"
Set rs = Nothing
Set db = Nothing

对象操作技巧
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_排序和显示”窗体的视图模式切换到窗
体视图,单击窗体中的按钮,打开的“F_学生基本信息”窗体中显示了按照
处理数据格式

性别升序,家庭住址降序排列的查询“Q_学生基本信息”中的数据,如图 5-21
所示。
数据排序技巧
数据查询技巧

图 5-21 单击按钮打开的窗体中显示排序后的记录集

160 指定多个查询字段对数据进行排序(2) 初 中 高
160 2003 / 2007 / 2010

指定多个查询字段对数据进行排序(2)
数据编辑技巧

◎通过查询排序数据:Sort 属性、CursorLocation 属性、Requery 方法

在 ADO 中,如果要在打开绑定窗体后再进行排序,需要使用 Sort 属性


269
Access VBA 活用范例大辞典

来设置排序的关键字,并使用 Requery 方法来重新绘制窗体的记录集。


基础操作技巧

如果需要通过对话框输入多个关键字,然后根据输入关键字进行排序,
可以先将输入的关键字保留至字符串变量中,再将这些变量设置到 Sort 属性
之中。

◎应用实例
控件和对象

素材\第 5 章\指定多个查询字段对数据进行排序(2).accdb

本例中,需要单击“F_员工工资”窗体中的“指定关键字排序”按钮,
依次打开对话框设置排序的主要关键字和次要关键字,设置完毕后窗体中的
数据按照指定的排序参数排序。
对象操作技巧

◎案例操作

01 在窗体中添加一个“指定关 02 为窗体添加“cmd_排序和显
键字排序”按钮控件。 示_Click”事件过程。
处理数据格式

03 在事件过程中添加排序程序 04 切换至窗体视图查看程序运
代码。 行效果。
数据排序技巧

◎过程源代码
源文件\第 5 章\指定多个查询字段对数据进行排序(2).accdb

在事件过程中编写对应的 VBA 代码,通过对话框得到排序的关键字,


设置排序关键字和排序方式,设置窗体记录集并重新绘制窗体,具体的 VBA
数据查询技巧

代码如下。
Private Sub cmd_排序_Click()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim keyword1 As String
数据编辑技巧

Dim keyword2 As String


'连接到当前项目,将游标服务设置在客户端
Set cn = CurrentProject.Connection
rs.CursorLocation = adUseClient

270
Chapter 05 数据排序技巧

'根据查询"Q_员工工资"得到记录集

基础操作技巧
rs.Open "Q_员工工资", cn, adOpenKeyset, adLockOptimistic
'得到排序的主要关键字和次要关键字
keyword1 = InputBox("请输入主要关键字", , "员工编号")
keyword2 = InputBox("请输入次要关键字", , "姓名")
'根据输入的关键字排序
rs.Sort = keyword1 & " desc," & keyword2

控件和对象
'将排序后的记录集设置到记录集,然后重绘窗体
Set Me.Recordset = rs
Me.Requery
'关闭记录集和资料库
rs.Close: Set rs = Nothing

对象操作技巧
cn.Close: Set cn = Nothing
End Sub

◎执行过程
保存编写的 VBA 代码,将窗体的视图模式切换到窗体视图,单击窗体
处理数据格式

中的按钮,在打开的对话框中依次输入排序的关键字,如图 5-21 所示。


数据排序技巧
数据查询技巧

图 5-22 通过对话框设置排序关键字的效果

提示:本例中不能够将两个关键字设置为相同字段
数据编辑技巧

由于本例中是根据主关键字降序排序,然后根据次要关键字对主关键字排序相同
的记录进行升序排序。如果将两个关键字设置为相同字段,就会导致排序参数冲
突,从而出错。

271
Access VBA 活用范例大辞典

161 通过下拉列表灵活指定多个查询字段排序数据(1) 初 中 高
161
基础操作技巧

2003 / 2007 / 2010

通过下拉列表灵活指定多个查询字段排序数据(1)
◎通过查询排序数据:Sort 属性、Recordset 属性、Requery 方法

在 DAO 中,如果要对绑定窗体中的数据排序,需要使用 Sort 属性设置


控件和对象

排序关键字,并使用 Recordset 属性和 Requery 方法将排序后的记录集重新绘


制到窗体中。

◎应用实例
素材\第 5 章\通过下拉列表灵活指定多个查询字段排序数据(1).accdb
对象操作技巧

本例需要在“F_员工工资”窗体中添加两个组合框,通过在组合框中选
择合适的字段进行排序。

◎案例操作
处理数据格式

01 在窗体添加“排序主要关键 02 将组合框控件的行来源设置
字”与“排序次要关键字”组 为“Q_员工工资”
,行来源类型
合框和“排序”按钮。 设置为“字段列表” 。
数据排序技巧

03 为窗体添加“cmd_排序_Click” 04 在事件过程中添加排序程序
事件过程。 代码。

05 切换至窗体视图查看程序运
数据查询技巧

行效果。

◎过程源代码
源文件\第 5 章\通过下拉列表灵活指定多个查询字段排序数据(1).accdb
数据编辑技巧

在事件过程中编写对应的 VBA 代码,设置排序关键字和排序方式,设


置窗体记录集,具体的 VBA 代码如下。

272
Chapter 05 数据排序技巧

'根据下拉列表中的选项排序

基础操作技巧
Private Sub cmd_排序_Click()
Dim db As DAO.Database
Dim rs As DAO.Recordset
'得到当前的数据库及指定记录集
Set db = CurrentDb()
Set rs = db.OpenRecordset("Q_员工工资", dbOpenDynaset)

控件和对象
'根据组合框中的选项排序
rs.Sort = cmb_主关键字 & " desc," & cmb_次关键字
'输出排序结果
Set rs = rs.OpenRecordset
Set Me.Recordset = rs

对象操作技巧
'重绘窗体中的记录
Me.Requery
Set rs = Nothing
Set db = Nothing
End Sub 处理数据格式

◎执行过程
保存编写的 VBA 代码,将窗体的视图模式切换到窗体视图,在组合框
中依次选择排序的主要关键字和次要关键字,单击“排序”按钮进行排序,
结果如图 5-23 所示。
数据排序技巧
数据查询技巧

图 5-23 根据组合框中的选项排序
数据编辑技巧

273
Access VBA 活用范例大辞典

162 通过下拉列表灵活指定多个查询字段排序数据(2) 初 中 高
162
基础操作技巧

2003 / 2007 / 2010

通过下拉列表灵活指定多个查询字段排序数据(2)
◎通过查询排序数据:Open 方法、Sort 属性、Requery 方法

在 ADO 中,如果要对打开的绑定窗体中的记录进行排序,需要先使用
控件和对象

Open 方法得到记录集,然后使用 Sort 属性根据关键字进行排序,最后使用


Requery 方法方法来重新绘制窗体的记录集。

◎应用实例
素材\第 5 章\通过下拉列表灵活指定多个查询字段排序数据(1).accdb
对象操作技巧

本例需要使用 ADO 方法实现根据窗体下拉列表中的选项对窗体中的记


录进行排序。

◎案例操作
处理数据格式

01 在窗体添加“主要关键字” 02 将组合框控件的行来源设置
与“次要关键字”组合框和“排 为“Q_员工工资”
,行来源类型
序”按钮。 设置为“字段列表” 。
数据排序技巧

03 为窗体添加“cmd_排序_Click” 04 在事件过程中添加排序程序
事件过程。 代码。

05 切换至窗体视图查看程序运
数据查询技巧

行效果。

◎过程源代码
源文件\第 5 章\通过下拉列表灵活指定多个查询字段排序数据(2).accdb
数据编辑技巧

在事件过程中编写对应的 VBA 代码,设置排序关键字和排序方式,设


置窗体记录集,具体的 VBA 代码如下。

274
Chapter 05 数据排序技巧

Private Sub cmd_排序_Click()

基础操作技巧
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
'连接到当前项目,将游标服务设置在客户端
Set cn = CurrentProject.Connection
rs.CursorLocation = adUseClient
'根据查询"Q_员工工资"得到记录集

控件和对象
rs.Open "Q_员工工资", cn, adOpenKeyset, adLockOptimistic
'根据输入的关键字排序
rs.Sort = cmb_主关键字 & " desc," & cmb_次关键字
'将排序后的记录集设置到记录集,然后重绘窗体
Set Me.Recordset = rs

对象操作技巧
Me.Requery
'关闭记录集和资料库
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
End Sub 处理数据格式

◎执行过程
保存编写的 VBA 代码,将窗体的视图模式切换到窗体视图,在组合框
中选择排序的关键字,单击排序按钮进行排序,如图 5-25 所示。
数据排序技巧
数据查询技巧
数据编辑技巧

图 5-24 根据组合框中的选项排序前后的效果

275
Access VBA 活用范例大辞典

163 在打开的窗体中显示排序结果 初 中 高
163 2003 / 2007 / 2010
基础操作技巧

在打开的窗体中显示排序结果
◎通过编写 SQL 语句排序数据:Select…From 语句、Order By 语句

在 SQL 语句中要将记录排序,需要使用 order by 语句。其具体的语法格


控件和对象

式如下所示:
Select * From [绑定窗体名] Order By [字段名]
在打开窗体时,可以将 DoCmd 事件中 OpenForm 方法的参数 FilterName
设置为 SQL 语句,已达到过滤的效果。其中,SQL 语句需要使用双引号("")
对象操作技巧

括起来,并且用于排序的 Order By 语句需要写在 SQL 语句的最后,其具体


的语法如下所示:
DoCmd.OpenForm "[窗体名称]", , [用于排序的 SQL 语句]

◎应用实例
处理数据格式

素材\第 5 章\在打开的窗体中显示排序结果.accdb

本例需要通过单击窗体(本例使用空白窗体)中的按钮,打开绑定窗体
“F_员工工资”
,并对其中的数据按照实得工资升序排序。要求使用 SQL 语句
实现对窗体中数据的排序。
数据排序技巧

◎案例操作

01 在空白窗体中添加“开启窗 02 为窗体添加“cmd_打开并排
体并排序”按钮控件。 序_Click”事件过程。
数据查询技巧

03 在事件过程中添加排序程序 04 切换至窗体视图查看程序运
代码。 行效果。

◎过程源代码
数据编辑技巧

源文件\第 5 章\在打开的窗体中显示排序结果.accdb

在事件过程中编写对应的 VBA 代码,设置用于排序的 SQL 语句,通过

276
Chapter 05 数据排序技巧

过滤的方式打开窗体,具体的 VBA 代码如下所示。

基础操作技巧
Private Sub cnd_打开并排序_Click()
Dim StSQL As String
'将 SQL 语句保存在字符串变量中
StSQL = "select * from F_员工工资 Order By 实得工资"
'将 SQL 语句作为查询名称开启窗体
DoCmd.OpenForm "F_员工工资", , StSQL

控件和对象
End Sub

◎执行过程
保存编写的 VBA 代码,将窗体的视图模式切换到窗体视图,单击“开

对象操作技巧
启窗体并排序”按钮,效果如图 5-25 所示。

处理数据格式

图 5-25 单击按钮打开按照实得工资升序排序的窗体
数据排序技巧

初 中 高
164
164在打开的报表中显示排序结果 2003 / 2007 / 2010

在打开的报表中显示排序结果
◎通过编写 SQL 语句排序数据:Order By 语句、OpenReport 方法
数据查询技巧

打 开 报 表 , 与 打 开 窗 体 的 方 法 相 似 , 可 以 使 用 DoCmd 对 象 中 的
OpenReport 方法,其具体的语法格式如下所示:
DoCmd. OpenReport "[报表名称]", , [排序参数]
如果需要使用 SQL 语句对打开的报表中的记录进行排序,可以将设置排
数据编辑技巧

序的 SQL 语句保存至字符串变量中,再在 OpenReport 方法的排序参数


FilterName 中使用。

277
Access VBA 活用范例大辞典

◎应用实例
基础操作技巧

素材\第 5 章\在打开的报表中显示排序结果.accdb

本例需要通过单击窗体(本例使用空白窗体)中的按钮后,打开报表“R_
员工工资”
,并且对其中的记录按照基本工资降序排序。

◎案例操作
控件和对象

01 在空白窗体中添加“打开报 02 为窗体添加“cmd_打开并排
表并排序”按钮。 序_Click”事件过程。
对象操作技巧

03 在事件过程中添加排序程序 04 切换至窗体视图查看程序运
代码。 行效果。

◎过程源代码
源文件\第 5 章\在打开的报表中显示排序结果.accdb
处理数据格式

在事件过程中编写对应的 VBA 代码,设置用于排序的 SQL 语句,通过


过滤的方式打开报表,具体的 VBA 代码如下所示。
'打开“R_员工工资”报表并按照基本工资降序排序
数据排序技巧

Private Sub cmd_打开并排序_Click()


'定义字符串变量,用于保存 SQL 语句
Dim StSQL As String
'将 SQL 语句保存在字符串变量中
StSQL = "Select * From R_员工工资 Order By 基本工资 desc"
'使用字符串变量作为查询名称打开报表
数据查询技巧

DoCmd.OpenReport "R_员工工资", acViewPreview, StSQL


End Sub

◎执行过程
保存编写的 VBA 代码,将“打开报表并排序”窗体的视图模式切换到
数据编辑技巧

窗体视图,单击“打开报表并排序”按钮,可以打开“R_员工工资”报表,
效果如图 5-26 所示。

278
Chapter 05 数据排序技巧

基础操作技巧
控件和对象
图 5-26 单击按钮打开按照基本工资降序排序的报表

165
165在窗体中手动指定排序依据
初 中 高
2003 / 2007 / 2010

在窗体中手动指定排序依据

对象操作技巧
◎通过编写 SQL 语句排序数据:Order By 语句、RcordSource 属性

在 SQL 语句中也可以使用组合框的值,
把 SQL 语句与组合框名称用
“&”
符号连接起来,而 SQL 语句本身必须使用双引号括起来,其具体的语法格式
处理数据格式

如下所示:
"Select * From [数据来源] Order By " & [控件名称] & ";"
可以通过 Rcordsource 属性将 SQL 语句排序后的记录集设置到当前窗体
中,其具体的语法格式如下所示:
数据排序技巧

[窗体名].RecordSource = [SQL 排序语句]

◎应用实例
素材\第 5 章\在窗体中手动指定排序依据.accdb

本例中需要在“F_员工工资”窗体中建立一个下拉列表,通过选择下拉
数据查询技巧

列表中的选项,实现按照所选选项排序的目的。

◎案例操作

01 在窗体中添加“排序关键字” 02 为窗体添加“cmb_ 关键字


数据编辑技巧

组合框。 _AfterUpdate”事件过程。

279
Access VBA 活用范例大辞典

03 在事件过程中添加排序程序 04 切换至窗体视图查看程序运
基础操作技巧

代码。 行效果。

◎过程源代码
源文件\第 5 章\在窗体中手动指定排序依据.accdb
控件和对象

在事件过程中编写对应的 VBA 代码,设置用于排序的 SQL 语句,设置


字段控件来源,具体的 VBA 代码如下所示。
'通过 SQL 语句对窗体中的记录进行排序
Private Sub cmb_关键字_AfterUpdate()
对象操作技巧

Dim stsql As String


'将 SQL 语句保存在字符串变量中
stsql = "Select * From Q_员工工资 Order By " & cmb_关键字 & ";"
'将当前窗体的数据源设置为使用 SQL _
语句排序后的查询“Q_员工工资”记录集
处理数据格式

Me.RecordSource = stsql
'重绘当前窗体
Me.Requery
End Sub

◎执行过程
数据排序技巧

保存编写的 VBA 代码,将“F_员工工资”窗体的视图模式切换到窗体


视图,选择组合框中的选项,窗体中的数据按照该选项字段升序排序,如图
5-27 所示。
数据查询技巧
数据编辑技巧

图 5-27 根据组合框选择的字段升序排序

280
Chapter 05 数据排序技巧

166 使用多个关键字排序 初 中 高
166 2003 / 2007 / 2010

基础操作技巧
使用多个关键字排序
◎通过编写 SQL 语句排序数据:Order By 语句、OpenReport 方法

在 SQL 语句中如果需要使用多个关键字排序,可用逗号将用于排序的关
键字隔开,其具体的语法格式如下所示:

控件和对象
Select * From [表或查询名] Order By [主要关键字] , [次要关键字];
如果使用对话框来指定排序的关键字,可以先将这些关键字保存在字符
串变量中,然后在 SQL 语句中使用这些字符串变量即可。

对象操作技巧
◎应用实例
素材\第 5 章\使用多个关键字排序.accdb

本例中需要在单击“指定排序关键字”按钮后,依次打开主要关键字和
次要关键字的设置对话框,通过在对话框中设置相应的排序参数来实现根据
处理数据格式

多个关键字排序的功能。

◎案例操作

01 在空白窗体中添加“指定排 02 为 窗 体 添 加 “ cmd_ 排 序
数据排序技巧

序关键字”按钮。 _Click”事件过程。

03 在事件过程中添加排序程序 04 切换至窗体视图查看程序运
代码。 行效果。
数据查询技巧

◎过程源代码
源文件\第 5 章\使用多个关键字排序.accdb

在事件过程中编写对应的 VBA 代码,设置用于排序的 SQL 语句,通过


数据编辑技巧

过滤的方式打开报表,具体的 VBA 代码如下所示。

281
Access VBA 活用范例大辞典

'使用 SQL 语句排序,实现通过对话框输入多个关键字排序


基础操作技巧

Private Sub cmd_排序_Click()


'定义三个字符串变量,用于保存通过对话框输入的关键字和 SQL 语句
Dim keword1 As String
Dim keword2 As String
Dim stsql As String
'获取排序的关键字
控件和对象

keyword1 = InputBox("请输入主要关键字及排序方式", , "员工编号")


keyword2 = InputBox("请输入次要关键字及排序方式", , "姓名")
'通过 SQL 语句进行排序
stsql = "Select * From Q_员工工资 Order By " & keyword1 _
& "," & keyword2 & ";"
对象操作技巧

'设置当前窗体的字段控件来源,并重新绘制当前窗体
Me.RecordSource = stsql
Me.Requery
End Sub

◎执行过程
处理数据格式

保存编写的 VBA 代码,将“F_员工工资”窗体的视图模式切换到窗体


视图,单击“指定排序的关键字”按钮,在打开的对话框中依次输入排序的
关键字,效果如图 5-28 所示。
数据排序技巧
数据查询技巧
数据编辑技巧

图 5-28 通过对话框设置多个关键字排序

282
Chapter 05 数据排序技巧

167 通过下拉列表指定多个关键字排序 初 中 高
167 2003 / 2007 / 2010

基础操作技巧
通过下拉列表指定多个关键字排序
◎通过编写 SQL 语句排序数据:Order By 语句、RcordSource 属性

在 SQL 语句中可以使用多个组合框名称,通过这些名称能够实现根据组
合框中的选项灵活排序。

控件和对象
◎应用实例
素材\第 5 章\通过下拉列表指定多个关键字排序.accdb

本例中需要实现在“F_员工工资”窗体中建立两个组合框,通过在组合

对象操作技巧
框中选择排序的关键字来进行排序。

◎案例操作

01 在窗体中添加“主要关键字” 02 为 窗 体 添 加 “ cmd_ 排 序
处理数据格式

和“次要关键字”组合框与“排 _Click”事件过程。
序”按钮。

03 在事件过程中添加排序程序 04 切换至窗体视图查看程序运
数据排序技巧

代码。 行效果。

◎过程源代码
源文件\第 5 章\通过下拉列表指定多个关键字排序.accdb
数据查询技巧

在事件过程中编写对应的 VBA 代码,设置用于排序的 SQL 语句,设置


字段控件来源,具体的 VBA 代码如下所示。
Private Sub cmd_排序_Click()
Dim stsql As String
'通过 SQL 语句根据组合框中的选项进行排序
数据编辑技巧

stsql = "Select * From Q_员工工资 Order By " & _


cmb_主关键字 & "," & cmb_次关键字 & ";"
'设置当前窗体字段控件来源为通过 SQL 语句排序后的记录集

283
Access VBA 活用范例大辞典

Me.RecordSource = stsql
基础操作技巧

'重绘当前窗体
Me.Requery
End Sub

◎执行过程
保存编写的 VBA 代码,将窗体的视图模式切换到窗体视图,选择组合
控件和对象

框中的选项,单击“排序”按钮,如图 5-29 所示。


对象操作技巧
处理数据格式

图 5-29 根据组合框选择多个字段排序

168 自定义序列排序数据 初 中 高
168 2003 / 2007 / 2010

自定义序列排序数据
数据排序技巧

◎通过编写 SQL 语句排序数据:where 语句、union 查询

要使用自定义的序列排序,首先需要使用 where 语句将符合条件的记录


选取出来,其具体的语法格式为:
Select * From Q_员工工资 where [筛选条件]
数据查询技巧

然后按照自定义的序列的顺序使用 union 语句将这些 where 语句连接起


来,其具体的语法格式为:
" [SQL 语句 1] " union all " [SQL 语句 2] "……
由于 union 语句不能够在 OpenForm 方法的 FilterName 参数中使用,所
数据编辑技巧

以在开启窗体后必须先设置窗体的记录集。

284
Chapter 05 数据排序技巧

如果直接将 SQL 语句应用于窗体的 Recordset 属性中,会出现错误,必

基础操作技巧
须先根据 SQL 语句制作过渡的 DAO 等的记录集,再设置到窗体中的记录集
中,其具体的语法格式为:

[DAO 数据库名].OpenRecordset([SQL 语句], dbOpenDynaset)

◎应用实例

控件和对象
素材\第 5 章\自定义序列排序数据.accdb

本例中需要通过单击窗体中的按钮,来打开一个数据源为查询“Q_员工
工资”的窗体。

对象操作技巧
并且要求该窗体中的记录集按照部门“策划部、设计部、销售部、财务
部”的顺序排列。

◎案例操作 处理数据格式

01 在窗体中添加“cmd_排序” 02 为 窗 体 添 加 “ cmd_ 排 序
按钮。 _Click”事件过程。

03 在事件过程中添加排序程序 04 切换至窗体视图查看程序运
代码。 行效果。
数据排序技巧

◎过程源代码
源文件\第 5 章\自定义序列排序数据.accdb
数据查询技巧

在事件过程中编写对应的 VBA 代码,设置用于排序的 SQL 语句,设置


字段控件来源,具体的 VBA 代码如下所示。
Private Sub cmd_排序_Click()
Dim db As DAO.Database
Dim rs As Recordset
数据编辑技巧

Dim stsql As String


'使用 SQL 语句自定义排序顺序,并将其放置到字符串变量中
stsql = "Select * From Q_员工工资 where 部门='策划部'" _
& " union all " _
285
Access VBA 活用范例大辞典

& "Select * From Q_员工工资 where 部门='设计部'" _


基础操作技巧

& " union all " _


& "Select * From Q_员工工资 where 部门='销售部'" _
& " union all " _
& "Select * From Q_员工工资 where 部门='财务部';"
'在当前数据库中根据 SQL 语句自定义的排序顺序取得记录集
Set db = CurrentDb()
控件和对象

Set rs = db.OpenRecordset(stsql, dbOpenDynaset)


'打开“F_员工工资”窗体,将取得的排序后的记录集设置到窗体中
DoCmd.OpenForm "F_员工工资"
Set Forms!F_员工工资.Recordset = rs
Set rs = Nothing
对象操作技巧

Set db = Nothing
End Sub

◎执行过程
保存编写的 VBA 代码,将“自定义排序”窗体的视图模式切换到窗体
处理数据格式

视图,单击“打开窗体并对记录排序”按钮,打开的窗体“F_员工工资”中
的数据按照自定义的顺序排序,如图 5-30 所示。
数据排序技巧
数据查询技巧

图 5-30 根据自定义的系列排序
数据编辑技巧

286
Chapter 06
数据查询技巧

在 Access 中,对数据的查找、筛选是一种十分常见的操作,
通过这些操作,可以非常方便地得到所需的数据。
本章将通过不同的案例来展示 Access 中常见的数据查询方
法及其应用技巧,包括逐条查询技巧、同时显示所有的查询结果
和使用 SQL 语句查询数据等。

▼主要内容
◎逐条查询技巧
GoToRecord 方法、GoToControl 方法、FindRecord 方法……
◎同时显示所有查询记录技巧
Filter 属性、FilterOn 属性、OpenRecordset 方法、ControlSource 属性……
◎通过编写 SQL 语句查询数据
Where 关键字、OpenForm 方法、If…Then…Else 语句……

▼涉及案例
◎定位到指定记录
◎通过在文本框中输入数据来查询
◎在子窗体中查询记录
◎在立即窗口中显示查询结果(1)
◎模糊筛选包含指定字符的所有数据记录(1)
◎显示指定的数值范围内的所有数据记录(1)
◎将筛选的所有数据按照指定顺序排序
◎使用 Where 语句在打开的窗体显示查询结果
……
Access VBA 活用范例大辞典

169 跳转到下一条记录 初 中 高
169 2003 / 2007 / 2010
基础操作技巧

跳转到下一条记录
◎逐条查询技巧:DoCmd 对象、GoToRecord 方法、acNext 常量

如果要跳转至下一条记录,
可以使用 DoCmd 对象中的 GoToRecord 方法,
控件和对象

将该方法的 Record 参数设置为“acNext”


,其具体的语法格式如下所示:
DoCmd.GoToRecord , , acNext

◎应用实例
素材\第 6 章\跳转到下一条记录.accdb
对象操作技巧

本例中需要在“F_员工工资”窗体中插入“下一条”按钮,通过单击该
按钮跳转至下一条记录。

◎案例操作
处理数据格式

01 在“F_员工工资”窗体界面 02 通过设计视图模式进入 VBA


中插入“下一条”按钮。 编辑器。

03 为窗体添加“cmd_ 下一条 04 在“cmd_下一条_Click”事


数据排序技巧

_Click”事件过程。 件过程中添加跳转代码。

05 执行程序过程查看程序运行
效果。
数据查询技巧

◎过程源代码
源文件\第 6 章\跳转到下一条记录.accdb

在事件过程中编写对应的 VBA 代码,跳转至下一条记录,其具体的 VBA


代码如下。
数据编辑技巧

Private Sub cmd_下一条_Click()


DoCmd.GoToRecord , , acNext
End Sub

288
Chapter 06 数据查询技巧

◎执行过程

基础操作技巧
保存编写的 VBA 代码,将“F_员工工资”窗体的视图模式切换到窗体
视图,单击“下一条”按钮,可以得到如图 6-1 所示的跳转前后的效果。

控件和对象
图 6-1 单击按钮跳转至下一条记录

对象操作技巧
170 跳转到第一条记录 初 中 高
170 2003 / 2007 / 2010

跳转到第一条记录
处理数据格式

◎逐条查询技巧:DoCmd 对象、GoToRecord 方法、GoToRecord 方法

如果要跳转至第一条记录,可以使用 DoCmd 对象的 GoToRecord 方法,


将该方法的 Record 参数设置为“acFirst”
,其具体的语法格式如下所示:
DoCmd.GoToRecord , ,acFirst
数据排序技巧

◎应用实例
素材\第 6 章\跳转到第一条记录.accdb

本例中需要在“F_员工工资”窗体中添加“第一条”按钮,通过单击该
数据查询技巧

按钮跳转至第一条记录。

◎案例操作

01 在“F_员工工资”窗体界面 02 为窗体添加“cmd_ 第一条


数据编辑技巧

中插入“第一条”按钮。 _Click”事件过程。

289
Access VBA 活用范例大辞典

03 在“cmd_第一条_Click”事 04 执行程序过程查看程序运行
基础操作技巧

件过程中添加跳转代码。 效果。

◎过程源代码
源文件\第 6 章\跳转到第一条记录.accdb
控件和对象

在事件过程中编写对应的 VBA 代码,跳转至第一条记录,其具体的 VBA


代码如下。
Private Sub cmd_第一条_Click()
DoCmd.GoToRecord , , acFirst
对象操作技巧

End Sub

◎执行过程
保存编写的 VBA 代码,将“F_员工工资”窗体的视图模式切换到窗体
视图,单击“第一条”按钮,可以得到如图 6-2 所示的跳转前后的效果。
处理数据格式
数据排序技巧

图 6-2 单击按钮跳转至第一条记录

171 跳转到最后一条记录
数据查询技巧

初 中 高
171 2003 / 2007 / 2010

跳转到最后一条记录
◎逐条查询技巧:GoToRecord 方法、acLast 常量
数据编辑技巧

如果要跳转至最后一条记录,
可以使用 DoCmd 对象的 GoToRecord 方法,
将该方法的 Record 参数设置为“acLast”
,其具体的语法格式为:
DoCmd.GoToRecord , ,acLast

290
Chapter 06 数据查询技巧

◎应用实例

基础操作技巧
素材\第 6 章\跳转到最后一条记录.accdb

本例中需要在“F_员工工资”窗体中添加“最后一条”按钮,通过单击
该按钮跳转至最后一条记录。

◎案例操作

控件和对象
01 在“F_员工工资”窗体界面 02 为窗体添加“cmd_最后一条
中插入“最后一条”按钮。 _Click”事件过程。

对象操作技巧
03 在“cmd_最后一条_Click” 04 执行程序过程查看程序运行
事件过程中添加跳转代码。 效果。

◎过程源代码
源文件\第 6 章\跳转到最后一条记录.accdb
处理数据格式

在事件过程中编写对应的 VBA 代码,跳转至最后一条记录,其具体的


VBA 代码如下。
Private Sub cmd_最后一条_Click()
数据排序技巧

DoCmd.GoToRecord , , acLast
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_员工工资”窗体的视图模式切换到窗体
视图,单击“最后一条”按钮,可以得到如图 6-3 所示的跳转前后的效果。
数据查询技巧
数据编辑技巧

图 6-3 单击按钮跳转至最后一条

291
Access VBA 活用范例大辞典
初 中 高
172
172 跳转到上一条记录 2003 / 2007 / 2010
基础操作技巧

跳转到上一条记录
◎逐条查询技巧:GoToRecord 方法、acPrevious 常量

如果要跳转至上一条记录,
可以使用 DoCmd 对象中的 GoToRecord 方法,
控件和对象

将该方法的 Record 参数设置为“acPrevious”


,其具体的语法格式如下所示:
DoCmd.GoToRecord , ,acPrevious

◎应用实例
素材\第 6 章\跳转到上一条记录.accdb
对象操作技巧

本例中需要在“F_员工工资”窗体中添加“上一条”按钮,通过单击该
按钮跳转至上一条记录。

◎案例操作
处理数据格式

01 在“F_员工工资”窗体界面 02 为窗体添加“cmd_ 上一条


中插入“上一条”按钮。 _Click”事件过程。

03 在“cmd_上一条_Click”事 04 执行程序过程查看程序运行
数据排序技巧

件过程中添加跳转代码。 效果。

◎过程源代码
源文件\第 6 章\跳转到上一条记录.accdb
数据查询技巧

在事件过程中编写对应的 VBA 代码,跳转至上一条记录,其具体的 VBA


代码如下。
Private Sub cmd_上一条_Click()
DoCmd.GoToRecord , , acPrevious
数据编辑技巧

End Sub

◎执行过程
保存编写的 VBA 代码,将“F_员工工资”窗体的视图模式切换到窗体
292
Chapter 06 数据查询技巧

视图,单击“上一条”按钮,可以得到如图 6-4 所示的跳转前后的效果。

基础操作技巧
控件和对象
图 6-4 单击按钮跳转至上一条

提示:GoToRecord 方法使用注意事项

对象操作技巧
在第一条记录使用 GoToRecord 方法移动至上一条记录在最后一条记录使用
GoToRecord 方法移动至下一条记录时,会出现错误。这时候需要通过其他的方
式来实现错误转移,比如使用 If…Then…Else 语句、On Error Goto 语句等。
处理数据格式

173 定位到指定记录 初 中 高
173 2003 / 2007 / 2010

定位到指定记录
◎逐条查询技巧:GoToRecord 方法、acGoTo 常量、Offset 参数
数据排序技巧

如果要定位到指定记录,可以使用 DoCmd 对象中的 GoToRecord 方法,


将该方法的 Record 参数设置为“acGoTo”
,并将参数 Offset 设置为欲移动到
的记录的行号,其具体的语法格式如下所示:
DoCmd.GoToRecord , ,acGoTo [跳转记录行号]
数据查询技巧

如果需要直接跳转到文本框中输入的行号对应的行,可以在文本框的
AfterUpdate 事件过程中设置跳转代码。

◎应用实例
素材\第 6 章\定位到指定记录.accdb
数据编辑技巧

本例中需要在“F_员工工资”窗体的文本框中输入定位到的记录的行号
数据后,跳转至指定行的记录。

293
Access VBA 活用范例大辞典

◎案例操作
基础操作技巧

01 在“F_员工工资”窗体界面 02 为 窗 体 添 加 “ txt_ 定 位 _
中插入文本框和标签。 AfterUpdate”事件过程。

03 在“txt_定位_AfterUpdate” 04 执行程序过程查看程序运行
控件和对象

事件过程中添加跳转代码。 效果。

◎过程源代码
源文件\第 6 章\定位到指定记录.accdb
对象操作技巧

在事件过程中编写对应的 VBA 代码,跳转至指定行的记录,其具体的


VBA 代码如下。
Private Sub txt_定位_AfterUpdate()
DoCmd.GoToRecord , , acGoTo, txt_定位
处理数据格式

End Sub

◎执行过程
保存编写的 VBA 代码,将“F_员工工资”窗体的视图模式切换到窗体
视图,在文本框中输入想要跳转到的记录的行号,然后按【Enter】键,可以
数据排序技巧

得到如图 6-5 所示的跳转前后的效果。


数据查询技巧

图 6-5 定位至文本框指定行的记录
数据编辑技巧

提示:跳转行数超过记录数的情况
使用该方法时,如果跳转至的行为空行,即跳转的行号超过记录数,程序虽然不
会报错,但是也不会跳转,这一点在编写代码时应该适当考虑。

294
Chapter 06 数据查询技巧

174 查询指定数据的记录 初 中 高
174 2003 / 2007 / 2010

基础操作技巧
查询指定数据的记录
◎逐条查询技巧:GoToControl 方法、FindRecord 方法

如果要查询记录,可使用 DoCmd 对象的 GoToControl 方法和 FindRecord

控件和对象
方法。首先通过 GoToControl 方法指定查询所在字段,再通过 FindRecord 方
法在该字段中查询符合要求的记录,其具体的语法格式如下所示:
DoCmd.GoToControl [字段名]
DoCmd.FindRecord [查询内容]

对象操作技巧
◎应用实例
素材\第 6 章\查询指定数据的记录.accdb

本例中需要在单击“F_员工工资”窗体中的“财务部”按钮时,跳转至
记录集中部门为“财务部”的第一条记录。
处理数据格式

◎案例操作

01 在“F_员工工资”窗体中插 02 为 窗 体 添 加 “ cmd_ 查 询 _
入“财务部”按钮。 Click”事件过程。
数据排序技巧

03 在“cmd_查询_Click”事件 04 执行程序过程查看程序运行
过程中添加查询代码。 效果。
数据查询技巧

◎过程源代码
源文件\第 6 章\查询指定数据的记录.accdb

在事件过程中编写对应的 VBA 代码,设置查询字段和内容,其具体的


VBA 代码如下。
数据编辑技巧

Private Sub cmd_查询_Click()


'设置查询的字段
DoCmd.GoToControl "部门"

295
Access VBA 活用范例大辞典

'设置查询的内容
基础操作技巧

DoCmd.FindRecord "财务部"
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_员工工资”窗体的视图模式切换到窗体
视图,单击“财务部”按钮,可以得到如图 6-6 所示。
控件和对象
对象操作技巧

图 6-6 跳转至第一条财务部员工记录

175 通过在文本框中输入数据来查询 初 中 高
175
处理数据格式

2003 / 2007 / 2010

通过在文本框中输入数据来查询
◎逐条查询技巧:GoToControl 方法、FindRecord 方法、FindWhat 参数

如果要通过文本框指定查询的记录,可使用 DoCmd 对象的 GoToControl


数据排序技巧

方法和 FindRecord 方法,将 FindRecord 方法的 FindWhat 参数设置为文本框


名称即可,其具体的语法格式如下所示:
DoCmd.GoToControl [字段名]
DoCmd.FindRecord [文本框名]
数据查询技巧

◎应用实例
素材\第 6 章\通过在文本框中输入数据来查询.accdb

本例中需要在“F_员工工资”窗体中的文本框输入欲查询的内容,然后
单击“查询”按钮,跳转至文本框中指定部门的第一条记录。
数据编辑技巧

296
Chapter 06 数据查询技巧

◎案例操作

基础操作技巧
01 在“F_员工工资”窗体插入 02 为 窗 体 添 加 “ cmd_ 查 询 _
“查询部门”文本框和“查询” Click”事件过程。
按钮。

控件和对象
03 在“cmd_查询_Click”事件 04 执行程序过程查看程序运行
过程中添加查询代码。 效果。

◎过程源代码

对象操作技巧
源文件\第 6 章\通过在文本框中输入数据来查询.accdb

在事件过程中编写对应的 VBA 代码,设置查询字段和查询内容,其具


体的 VBA 代码如下。 处理数据格式

Private Sub cmd_查询_Click()


DoCmd.GoToControl "部门"
DoCmd.FindRecord txt_查询部门
End Sub

◎执行过程
数据排序技巧

保存编写的 VBA 代码,将“F_员工工资”窗体的视图模式切换到窗体


视图,在“查询部门”文本框中输入查询的部门,单击“查询”按钮,可以
得到如图 6-7 所示的效果。
数据查询技巧
数据编辑技巧

图 6-7 跳转至文本框指定部门的记录

297
Access VBA 活用范例大辞典

176 继续搜寻满足条件的记录 初 中 高
176 2003 / 2007 / 2010
基础操作技巧

继续搜寻满足条件的记录
◎逐条查询技巧:GoToControl 方法、FindNext 方法

在查询记录之后,如果需要继续查询记录,可使用 DoCmd 对象的


控件和对象

GoToControl 方法和 FindNext 方法。首先通过 GoToControl 方法指定字段,


再通过 FindNext 方法根据上一次查询的记录继续查询满足条件的记录,其具
体的语法格式如下所示:
DoCmd.GoToControl [字段名]
对象操作技巧

DoCmd.FindNext

◎应用实例
素材\第 6 章\继续搜寻满足条件的记录.accdb

本例需要实例 175 的基础上,添加“下一条”按钮,实现继续查询记录


处理数据格式

集中满足条件的下一条记录。

◎案例操作

01 在“F_员工工资”窗体界面 02 为窗体添加“cmd_ 下一条


数据排序技巧

中插入“下一条”按钮。 _Click”事件过程。

03 在“cmd_下一条_Click”事 04 执行程序过程查看程序运行
件过程中添加查询代码。 效果。
数据查询技巧

◎过程源代码
源文件\第 6 章\继续搜寻满足条件的记录.accdb

在事件过程中编写对应的 VBA 代码,实现单击“下一条”按钮时,程


数据编辑技巧

序继续查询当前条件的下一条记录,其具体的 VBA 代码如下。


Private Sub cmd_下一条_Click()
DoCmd.GoToControl "部门"

298
Chapter 06 数据查询技巧

DoCmd.FindNext

基础操作技巧
End Sub

◎执行过程
保存编写的 VBA 代码,将窗体切换到窗体视图,在文本框中输入“财
务部”查找部门为财务部的第一条记录,然后单击“下一条”按钮,继续查
找财务部的记录,如图 6-8 所示。

控件和对象
对象操作技巧

图 6-8 跳转至下一条部门为财务部的记录
处理数据格式

提示:FindNext 方法使用注意事项
FindNext 方法不能够单独使用,必须和其他的查询结合使用,该方法会自动调用
上一次查询的参数。
FindRecord 方法只能够查找到满足条件的第一条记录,如果需要查找满足条件
数据排序技巧

的其他的记录,则需要使用 FindNext 方法。

177 通过在下拉列表框中选择选项来查询 初 中 高
177 2003 / 2007 / 2010
数据查询技巧

通过在下拉列表框中选择选项来查询
◎逐条查询技巧:GoToControl 方法、FindRecord 方法

如 果 要 查 询 下 拉 列 表 中 选 择 的 指 定 记 录 , 可 使 用 DoCmd 对 象 的
GoToControl 方法和 FindRecord 方法,将 FindRecord 方法的 FindWhat 参数
数据编辑技巧

设置为组合框名称即可,其具体的语法格式如下所示:
DoCmd.GoToControl [字段名]

299
Access VBA 活用范例大辞典

DoCmd.FindRecord [组合框名]
基础操作技巧

◎应用实例
素材\第 6 章\通过在下拉列表框中选择选项来查询.accdb

本例中需要在“F_员工工资”窗体的下拉列表中选择选项,然后单击“查
询”按钮,可跳转至组合框中指定的部门的记录。
控件和对象

◎案例操作

01 在“F_员工工资”窗体插入 02 将组合框的“值来源类型”
“部门”组合框和“查询”按钮。 设置为“值列表”

对象操作技巧

03 为 窗 体 添 加 “ cmd_ 查 询 04 在“cmd_查询_Click”事件
_Click”事件过程。 过程中添加查询代码。
处理数据格式

05 执行程序过程,查看程序运
行效果。

◎过程源代码
数据排序技巧

源文件\第 6 章\通过在下拉列表框中选择选项来查询.accdb

在事件过程中编写对应的 VBA 代码,实现通过在下拉列表中选择选项


来查询指定记录,其具体的 VBA 代码如下。
Private Sub cmd_查询_Click()
数据查询技巧

DoCmd.GoToControl "部门"
DoCmd.FindRecord cmb_部门
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_员工工资”窗体的视图模式切换到窗体
数据编辑技巧

视图,选择查询的部门,单击“查询”按钮,可以得到如图 6-9 所示的效果。

300
Chapter 06 数据查询技巧

基础操作技巧
控件和对象
图 6-9 跳转至下拉列表框指定部门的记录

178 查询以指定数据打头的记录 初 中 高
178

对象操作技巧
2003 / 2007 / 2010

查询以指定数据打头的记录
◎逐条查询技巧:GoToControl 方法、FindRecord 方法

如果要查询以指定数据打头的记录,可使用 DoCmd 对象的 GoToControl


处理数据格式

方法和 FindNext 方法,将 FindRecord 方法的 FindWhat 参数设置为指定的打


头数据,并在其后面添加上通配符“*”
,其具体的语法格式为:
DoCmd.GoToControl [字段名]
DoCmd.FindRecord [查询内容] & "*"
数据排序技巧

◎应用实例
素材\第 6 章\查询以指定数据打头的记录.accdb

本例中需要在“F_员工工资”窗体中查询文本框中指定姓氏的第一位员
工的记录。
数据查询技巧

◎案例操作

01 在窗体中插入“姓”文本框 02 为 窗 体 添 加 “ cmd_ 查 找
和“查找”按钮。 _Click”事件过程。
数据编辑技巧

03 在“cmd_查找_Click”事件 04 执行程序过程查看程序运行
过程中添加查询代码。 效果。

301
Access VBA 活用范例大辞典

◎过程源代码
基础操作技巧

源文件\第 6 章\查询以指定数据打头的记录.accdb

在事件过程中编写对应的 VBA 代码,设置查询字段,并结合“*”设置


查询内容,其具体的 VBA 代码如下。
Private Sub cmd_查找_Click()
控件和对象

DoCmd.GoToControl "姓名"
DoCmd.FindRecord txt_姓 & "*"
End Sub

◎执行过程
对象操作技巧

保存编写的 VBA 代码,将窗体的视图模式切换到窗体视图,在文本框


中输入一个姓氏,单击“查找”按钮,如图 6-10 所示。
处理数据格式
数据排序技巧

图 6-10 查找指定姓氏的记录

179 查询以指定数据结尾的记录 初 中 高
179 2003 / 2007 / 2010

查询以指定数据结尾的记录
数据查询技巧

◎逐条查询技巧:GoToControl 方法、FindRecord 方法

如果要查询以指定数据结尾的记录,可使用 DoCmd 对象的 GoToControl


方法和 FindNext 方法。首先将 FindRecord 方法的 FindWhat 参数设置为指定
数据编辑技巧

的结尾数据,然后在其前面添加上通配符“*”
,其具体的语法格式如下所示:
DoCmd.GoToControl [字段名]
DoCmd.FindRecord "*" & [查询内容]

302
Chapter 06 数据查询技巧

◎应用实例

基础操作技巧
素材\第 6 章\查询以指定数据结尾的记录.accdb

员工职务名称的最后部分可在一定程度上代表员工的水平,本例中需要
在“F_员工工资”窗体中通过员工职务的结尾部分来查询记录。

◎案例操作

控件和对象
01 在“F_员工工资”窗体中插 02 为 窗 体 添 加 “ cmd_ 查 找
入文本框和“查找”按钮。 _Click”事件过程。

对象操作技巧
03 在“cmd_查找_Click”事件 04 执行程序过程查看程序运行
过程中添加查询代码。 效果。

◎过程源代码
源文件\第 6 章\查询以指定数据结尾的记录.accdb
处理数据格式

在事件过程中编写查询以指定数据结尾的记录的 VBA 代码,具体的


VBA 代码如下。
Private Sub cmd_查找_Click()
数据排序技巧

DoCmd.GoToControl "职务"
DoCmd.FindRecord "*" & txt_职务
End Sub

◎执行过程
保存编写的 VBA 代码,将窗体的视图模式切换到窗体视图,在文本框
数据查询技巧

中输入内容,单击“查找”按钮,如图 6-11 所示。


数据编辑技巧

图 6-11 通过员工职务的结尾数据查询记录

303
Access VBA 活用范例大辞典

180 查询包含某个数据的记录 初 中 高
180 2003 / 2007 / 2010
基础操作技巧

查询包含某个数据的记录
◎逐条查询技巧:GoToControl 方法、FindRecord 方法

如果要查询包含某个数据的记录,可使用 DoCmd 对象的 GoToControl


控件和对象

方法和 FindRecord 方法,将 FindReord 方法的 FindWhat 参数设置为指定的数


据,并在其前后均添加上通配符“*”
,其具体的语法格式如下所示:
DoCmd.GoToControl [字段名]
DoCmd.FindRecord "*" & [查询内容] & “*”
对象操作技巧

◎应用实例
素材\第 6 章\查询包含某个数据的记录.accdb

超市中商品的名称一般都包含了商品名称、种类和特色等内容,现在需
要查询某类商品,但是记录集中没有直接对应的字段。本例中需要通过在商
处理数据格式

品名称中查询种类来得到相应的记录。

◎案例操作

01 在“F_生活健康用品”窗体 02 为 窗 体 添 加 “ cmd_ 查 询
数据排序技巧

插入“商品名称”文本框和 “查 _Click”事件过程。
询”按钮。

03 在“cmd_查询_Click”事件 04 执行程序过程查看程序运行
数据查询技巧

过程中添加查询代码。 效果。

◎过程源代码
源文件\第 6 章\查询包含某个数据的记录.accdb
数据编辑技巧

在事件过程中编写对应的 VBA 代码,设置查询字段,并结合通配符设


置查询包含某个数据的查询内容,其具体的 VBA 代码如下。

304
Chapter 06 数据查询技巧

Private Sub cmd_查询_Click()

基础操作技巧
DoCmd.GoToControl "商品名称"
DoCmd.FindRecord "*" & txt_查询 & "*"
End Sub

◎执行过程
保存编写的 VBA 代码,将窗体的视图模式切换到窗体视图,在文本框

控件和对象
中输入欲查询的内容,单击“查询”按钮,如图 6-12 所示。

对象操作技巧
图 6-12 查询指定种类的商品
处理数据格式

初 中 高
181
181在子窗体中查询记录 2003 / 2007 / 2010

在子窗体中查询记录
◎逐条查询技巧:SetFocus 方法、FindRecord 方法
数据排序技巧

如果要查询子窗体中的记录,需要先使用 SetFocus 方法将焦点移动至子


窗体,其具体的语法格式如下所示:
Forms![主窗体名].[子窗体名].SetFocus
然后再次使用 SetFocus 方法将焦点移动到子窗体中指定的字段,其具体
数据查询技巧

的语法格式为:
Forms![主窗体名].[子窗体名]![字段名].SetFocus
最后使用 Docmd 对象的 FindRecord 方法进行查找即可。

◎应用实例
数据编辑技巧

素材\第 6 章\在子窗体中查询记录.accdb

在“F_员工工资”主窗体中使用了“FD_员工工资”子窗体来显示记录,

305
Access VBA 活用范例大辞典

现在需要在主窗体中查询子窗体中指定姓氏的员工的记录。
基础操作技巧

◎案例操作

01 在主窗体“F_员工工资”中 02 为 窗 体 添 加 “ cmd_ 查 询
插入“查询姓名”文本框和“查 _Click”事件过程。
询”按钮。
控件和对象

03 在“cmd_查询_Click”事件 04 执行程序过程查看程序运行
过程中添加查询代码。 效果。
对象操作技巧

◎过程源代码
源文件\第 6 章\在子窗体中查询记录.accdb

在事件过程中编写对应的 VBA 代码,使子窗体的姓名字段获取焦点,


然后查询相应的数据,具体的 VBA 代码如下。
处理数据格式

Private Sub cmd_查询_Click()


'使子窗体获取焦点
Forms!F_员工工资.FD_员工工资.SetFocus
'使子窗体姓名字段获取焦点
数据排序技巧

Forms!F_员工工资.FD_员工工资!姓名.SetFocus
'查找姓名中含有指定文本的记录
DoCmd.FindRecord "*" & txt_姓名 & "*"
End Sub

◎执行过程
数据查询技巧

保存编写的 VBA 代码,将窗体的视图模式切换到窗体视图,在文本框


中输入内容,单击“查询”按钮,如图 6-13 所示。

提示:在查询时通配符的使用
数据编辑技巧

在查询时,使用通配符可以十分方便地实现模糊查询。一般情况下,为了更好地
匹配查询的记录,可以在查询数据的首尾均添加上通配符,有特殊要求的除外。

306
Chapter 06 数据查询技巧

基础操作技巧
控件和对象
图 6-13 在子窗体中查询记录

182 实现继续查询操作 初 中 高
182

对象操作技巧
2003 / 2007 / 2010

实现继续查询操作
◎逐条查询技巧:GoToControl 方法、FindRecord 方法

如果要实现连续查询,可以将 DoCmd 对象 FindRecord 方法的 FindFirst


处理数据格式

参数设置为“False”,表示不是从记录集的第一条记录开始查询,而是当前
焦点所在处开始查询。

如果该参数被省略,则会被设置为“True”
,表示从第一条记录开始查询,
只能够得到满足条件的第一条记录。
数据排序技巧

◎应用实例
素材\第 6 章\实现继续查询操作.accdb

本例中需要实现在“F_员工工资”窗体的文本框中输入查询的部门后,
可以通过单击“查询”按钮逐条浏览满足条件的记录。
数据查询技巧

◎案例操作

01 在“F_员工工资”窗体插入 02 为 窗 体 添 加 “ cmd_ 查 询
“查询部门”文本框和“查询” _Click”事件过程。
数据编辑技巧

按钮。

307
Access VBA 活用范例大辞典

03 在“cmd_查询_Click”事件 04 执行程序过程查看程序运行
基础操作技巧

过程中添加查询代码。 效果。

◎过程源代码
源文件\第 6 章\实现继续查询操作.accdb
控件和对象

在事件过程中编写代码,设置查询字段和 FindFirst 参数实现继续查询操


作,具体的 VBA 代码如下。
Private Sub cmd_查询_Click()
DoCmd.GoToControl "部门"
对象操作技巧

DoCmd.FindRecord "*" & txt_查询部门 & "*", FindFirst:=False


End Sub

◎执行过程
保存编写的 VBA 代码,将窗体的视图模式切换到窗体视图,在文本框
处理数据格式

中输入欲查询的内容,多次单击“查询”按钮可得到不同的满足条件的记录,
如图 6-14 所示。
数据排序技巧
数据查询技巧

图 6-14 实现继续查询操作

183 不使用通配符查询包含某个数据的记录 初 中 高
183 2003 / 2007 / 2010

不使用通配符查询包含某个数据的记录
数据编辑技巧

◎逐条查询技巧:FindRecord 方法、acAnywhere 常量

如果要在不使用通配符的情况下查询数据,可使用 DoCmd 对象的

308
Chapter 06 数据查询技巧

GoToControl 方法和 FindRecord 方法。只需要将 FindReord 方法的 FindWhat

基础操作技巧
参数设置为指定的数据,然后将其第 2 个参数设置为 acAnywhere 即可。

◎应用实例
素材\第 6 章\不使用通配符查询包含某个数据的记录.accdb

本例要求在不适用通配符的情况下,查询“F_员工工资”窗体中的记录

控件和对象
集中,部门字段包含指定数据的记录。

◎案例操作

01 在“F_员工工资”窗体中插 02 为“F_员工工资”窗体添加

对象操作技巧
入“查询部门”文本框和“查 “cmd_查询_Click”事件过程。
询”按钮。

03 在“cmd_查询_Click”事件 04 执行程序过程查看程序运行
处理数据格式

过程中添加查询代码。 效果。

◎过程源代码
源文件\第 6 章\不使用通配符查询包含某个数据的记录.accdb
数据排序技巧

在事件过程中编写对应的 VBA 代码,设置查询字段和 FindWhat 参数实


现查询包含某个数据的记录,具体的 VBA 代码如下。
Private Sub cmd_查询_Click()
DoCmd.GoToControl "部门"
数据查询技巧

DoCmd.FindRecord txt_查询部门, acAnywhere


End Sub

◎执行过程
保存编写的 VBA 代码,将窗体的视图模式切换到窗体视图,在文本框
中输入内容,单击“查询”按钮,如图 6-15 所示。
数据编辑技巧

309
Access VBA 活用范例大辞典
基础操作技巧
控件和对象

图 6-15 不使用通配符查询包含某个数据的记录

184 灵活设置查询字段查询记录 初 中 高
184
对象操作技巧

2003 / 2007 / 2010

灵活设置查询字段查询记录
◎逐条查询技巧:GoToControl 方法、If…Then…Elseif 语句

如果需要同时指定查询的字段和查询的内容,可以使用组合框来设置查
处理数据格式

询的字段,然后将查询的字段设置为组合框名称。

由于 GoToControl 方法和 FindRecord 方法在没有参数时会出现错误,所


以需要使用 If…Then…Elseif 语句判断查询的字段和内容是否为空,只有当
两者均不为空时,才进行查询。
数据排序技巧

◎应用实例
素材\第 6 章\灵活设置查询字段查询数据.accdb

本例中需要通过下拉列表来选择查询的字段,然后通过文本框来输入查
询的内容。当下拉列表和文本框中均不为空时,单击“查询”按钮后,可以
数据查询技巧

查询到符合条件的所有记录。

◎案例操作

01 在“F_员工工资”窗体插入 02 将组合框的行来源设置为字
数据编辑技巧

“查询字段”组合框、“查询内 段列表,为窗体添加“cmd_查
容”文本框和“查询”按钮。 询_Click”事件过程。

310
Chapter 06 数据查询技巧

03 在“cmd_查询_Click”事件 04 执行程序过程查看程序运行

基础操作技巧
过程中添加查询代码。 效果。

◎过程源代码
源文件\第 6 章\灵活设置查询字段查询数据.accdb

控件和对象
在事件过程中编写对应的 VBA 代码,使用条件语句设置查询字段和查
询参数,实现灵活设置查询字段查询数据,具体的 VBA 代码如下。
'灵活选择查询字段查询记录
Private Sub cmd_查询_Click()

对象操作技巧
'判断是否设置查询字段
If IsNull(cmb_查询字段) Then
'没有设置查询字段时,打开提示对话框,并将焦点设置到组合框中
MsgBox ("没有选择查询字段")
cmb_查询字段.SetFocus
处理数据格式

Exit Sub
'判断是否设置了查询内容
ElseIf IsNull(txt_查询内容) Then
'设置了查询字段,但是没有设置查询内容时,将焦点设置到文本框中
txt_查询内容.SetFocus
Else
数据排序技巧

'查询字段和内容均输入之后,进行查询
DoCmd.GoToControl cmb_查询字段
DoCmd.FindRecord txt_查询内容, acAnywhere
End If
End Sub
数据查询技巧

◎执行过程
保存编写的 VBA 代码,将“F_员工工资”窗体的视图模式切换到窗体
视图,在“查询字段”组合框中选择查询字段,然后单击“查询”按钮,结
果如 6-16 左图所示,文本框获取焦点。
数据编辑技巧

在“查询内容”文本框中输入查询的内容,单击“查询”按钮,结果
如图 6-16 右图所示。

311
Access VBA 活用范例大辞典
基础操作技巧
控件和对象

图 6-16 灵活设置查询字段和内容查询记录

185 使用 Like 进行模糊查询 初 中 高


185
对象操作技巧

2003 / 2007 / 2010

使用 Like 进行模糊查询
◎逐条查询技巧:FindNext 方法、NoMatch 属性、Bookmark 属性

在 DAO 中,可以使用记录集的 FindNext 方法查找符合条件的记录,其


处理数据格式

具体的语法格式为:
[记录集].FindNext [字段名] [关系运算符] [查找数据]
如果进行的是模糊查询,当在查询数据中使用了通配符,此时关系运算
符就需要使用 Like 运算符,而不能够使用“=”运算符。
数据排序技巧

◎应用实例
素材\第 6 章\使用 Like 进行模糊查询.accdb

本例中,在需要查询“F_员工工资”窗体的记录集中,姓名字段包含“姓
名查询”字段中指定的数据的记录。
数据查询技巧

◎案例操作

01 在“F_员工工资”窗体插入 02 为 窗 体 添 加 “ cmd_ 查 询
“姓名查询”文本框和“查询” _Click”事件过程。
数据编辑技巧

按钮。

312
Chapter 06 数据查询技巧

03 在“cmd_查询_Click”事件 04 执行程序过程查看程序运行

基础操作技巧
过程中添加查询代码。 效果。

◎过程源代码
源文件\第 6 章\使用 Like 进行模糊查询.accdb

控件和对象
在事件过程中编写对应的 VBA 代码,设置查询参数,查询相关记录,
返回查询结果,具体的 VBA 代码如下。
'在 DAO 中使用 Like 运算符实现模糊查询
Private Sub cmd_查询_Click()

对象操作技巧
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim sch As String
Set db = CurrentDb()
'制作当前记录集的副本
处理数据格式

Set rs = Me.RecordsetClone
'将记录集的书签与当前窗体中的书签同步
rs.Bookmark = Me.Bookmark
'设置查询的字段和内容
sch = "[姓名] Like" & "'*" & txt_查询 & "*'"
rs.FindNext sch
数据排序技巧

'查询结果处理
If rs.NoMatch = True Then
'没有匹配结果打开提示对话框
MsgBox "找不到符合条件的记录"
Else
数据查询技巧

'有匹配记录时,将副本中的书签同步到当前窗体中
Me.Bookmark = rs.Bookmark
End If
End Sub

◎执行过程
数据编辑技巧

保存编写的 VBA 代码,将“F_员工工资”窗体的视图模式切换到窗体


视图,在“姓名查询”文本框中输入查询内容,然后单击“查询”按钮,结
果如图 6-17 所示。

313
Access VBA 活用范例大辞典
基础操作技巧
控件和对象

图 6-17 使用 Like 进行模糊查询

186 在立即窗口中显示查询结果(1) 初 中 高
186
对象操作技巧

2003 / 2007 / 2010

在立即窗口中显示查询结果(1)
◎逐条查询技巧:MoveNext 方法、Debug 对象、Print 方法、EOF 属性

如果需要在代码调试时,将某个数据的值输出到立即窗口,可以使用
处理数据格式

Debug 对象的 Print 方法,其具体的语法格式如下所示:


Debug.Print [需要输出的数据]
如果需要逐条获得记录集中的数据,需要先使用记录集的 MoveFirst 方
法跳转至第一条记录,然后使用 Do…Until 语句和 EOF 属性逐条输出记录中
数据排序技巧

的指定记录,直到最后一条记录。

◎应用实例
素材\第 6 章\在立即窗口中显示查询结果(1).accdb

本例中,需要在立即窗口输出“Q_员工工资”查询中的所有记录的姓名、
数据查询技巧

职务和实得工资字段。

◎案例操作

01 新建“M_立即窗口”模块, 02 按【F5】键运行过程,在立
数据编辑技巧

插入“立即窗口”过程。 即窗口中查看过程运行结果。

314
Chapter 06 数据查询技巧

◎过程源代码

基础操作技巧
源文件\第 6 章\在立即窗口中显示查询结果(1).accdb

在“M_立即窗口”模块中编写对应的 VBA 代码,输出“Q_员工工资”


查询记录集中的姓名、职务和实得工资字段,具体的 VBA 代码如下。
'在立即窗口输出记录集中的所有姓名、职务和实得工资

控件和对象
Sub 立即窗口()
Dim db As DAO.Database
Dim rs As DAO.Recordset
'得到查询 Q_员工工资的记录集
Set db = CurrentDb()

对象操作技巧
Set rs = db.OpenRecordset("Q_员工工资")
'跳转至第一条记录
rs.MoveFirst
'在立即窗口输出指定内容
Do Until rs.EOF = True
Debug.Print rs!姓名, rs!职务, rs!实得工资
处理数据格式

rs.MoveNext
Loop
rs.Close: Set rs = Nothing
db.Close: Set db = Nothing
End Sub
数据排序技巧

◎执行过程
保存编写的 VBA 代码,然后按【F5】键运行“立即窗口”过程,结果
如图 6-18 所示。
数据查询技巧
数据编辑技巧

图 6-18 在立即窗口显示查询结果

315
Access VBA 活用范例大辞典

187 在立即窗口中显示查询结果(2) 初 中 高
187 2003 / 2007 / 2010
基础操作技巧

在立即窗口中显示查询结果(2)
◎逐条查询技巧:MoveNext 方法、Debug 对象、Print 方法、EOF 属性

在 ADO 中,移动记录也可以使用 MoveNext 方法。使用 Debug 对象的


控件和对象

Print 方法,可以在立即窗口中输出指定的内容。使用 Do Until…Loop 语句,


可以从第一条记录开始输出符合条件的记录中的指定字段值,直到记录集的
EOF 属性值为 True。

◎应用实例
对象操作技巧

素材\第 6 章\在立即窗口中显示查询结果(2).accdb

本例中,需要在立即窗口中输出“Q_员工工资”查询中的员工编号、姓
名、职务和实得工资字段。
处理数据格式

◎案例操作

01 新建“M_立即窗口”模块, 02 按【F5】键运行过程,查看
插入“立即窗口”过程。 过程运行效果。
数据排序技巧

◎过程源代码
源文件\第 6 章\在立即窗口中显示查询结果(2).accdb

在“M_立即窗口”模块中编写对应的 VBA 代码,输出“Q_员工工资”


查询记录集中的指定数据,具体的 VBA 代码如下。
数据查询技巧

'在立即窗口中记录集中所有的指定字段
Sub 立即窗口()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
'得到查询 Q_员工工资中的记录集
数据编辑技巧

Set cn = CurrentProject.Connection
rs.Open "Q_员工工资", cn
'显示所有记录中指定的字段

316
Chapter 06 数据查询技巧

Do Until rs.EOF = True

基础操作技巧
Debug.Print rs!员工编号, rs!姓名, rs!职务, rs!实得工资
rs.MoveNext
Loop
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
End Sub

控件和对象
◎执行过程
保存编写的 VBA 代码,然后按【F5】键运行“立即窗口”过程,结果
如图 6-19 所示。

对象操作技巧
处理数据格式

图 6-19 在立即窗口显示查询结果

188 查询指定日期的数据记录(1) 初 中 高
188 2003 / 2007 / 2010
数据排序技巧

查询指定日期的数据记录(1)
◎逐条查询技巧:FindFirst 方法、NoMatch 属性、BookMark 属性

在 DAO 中,可以使用 FindFirst 方法查询记录。当没有找到符合条件的


数据查询技巧

记录时,NoMatch 属性变为 True。

如果需要将查询出的记录显示到窗体中,可以通过将 DAO 的记录集中


的 BookMark 属性设置为当前窗体的 BookMark 属性中去。

如果查询的数据为日期类型的数据,需要在查询数据的两端添加上“#”
数据编辑技巧

以表明查询的数据为日期型。

317
Access VBA 活用范例大辞典

◎应用实例
基础操作技巧

素材\第 6 章\查询指定日期的数据记录(1).accdb

本例中,需要在单击“F_销售记录”窗体中的“查询”按钮后,跳转到
售出日期字段为“售出日期”文本框指定的记录,如果指定的日期没有销售
记录,则打开提示对话框。
控件和对象

◎案例操作

01 在窗体中插入“售出日期” 02 为 窗 体 添 加 “ cmd_ 查 询
文本框和“查询”按钮。 _Click”事件过程。
对象操作技巧

03 在“cmd_查询_Click”事件 04 执行程序过程查看程序运行
过程中添加查询代码。 效果。

◎过程源代码
处理数据格式

源文件\第 6 章\查询指定日期的数据记录(1).accdb

在事件过程中编写对应的 VBA 代码,设置查询日期,处理查询结果,


具体的 VBA 代码如下。
数据排序技巧

'查询指定售出日期的记录
Private Sub cmd_查询_Click()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb()
Set rs = db.OpenRecordset("T_销售记录", dbOpenDynaset)
数据查询技巧

'查询指定日期
rs.FindFirst "[售出日期]=#" & txt_日期 & "#"
'查询结果处理
If rs.NoMatch = True Then
MsgBox "指定日期没有售出记录"
数据编辑技巧

Else
Me.Bookmark = rs.Bookmark
End If
rs.Close: Set rs = Nothing

318
Chapter 06 数据查询技巧

db.Close: Set db = Nothing

基础操作技巧
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_销售记录”窗体的视图模式切换到窗体
视图,在文本框中输入日期(需要和查询日期格式相同)
,单击“查询”按钮,
可以得到如图 6-20 所示的效果。

图 6-20 查询指定日期的销售记录 控件和对象


对象操作技巧
处理数据格式

189 查询指定日期的数据记录(2) 初 中 高
189 2003 / 2007 / 2010

查询指定日期的数据记录(2)
◎逐条查询技巧:Find 方法、EOF 属性
数据排序技巧

在 ADO 中,可以使用 Find 方法查询记录。如果查询的数据为日期型,


则需要在日期前后添加上符号“#”

◎应用实例
数据查询技巧

素材\第 6 章\查询指定日期的数据记录(2).accdb

本例中,需要通过单击“查询”按钮,得到文本框中的日期指定的售出
日期的销售记录,如果没有指定日期的销售记录,则打开提示对话框。

◎案例操作
数据编辑技巧

01 在窗体中插入“售出日期” 02 为 窗 体 添 加 “ cmd_ 查 询
文本框和“查询”按钮。 _Click”事件过程。

319
Access VBA 活用范例大辞典

03 在“cmd_查询_Click”事件 04 执行程序过程查看程序运行
基础操作技巧

过程中添加查询代码。 效果。

◎过程源代码
源文件\第 6 章\查询指定日期的数据记录(2).accdb
控件和对象

在事件过程中编写对应的 VBA 代码,先通过 ADO 连接到数据库,再设


置查询内容,处理查询结果,具体的 VBA 代码如下。
'查询指定销售日期的记录
Private Sub cmd_查询_Click()
对象操作技巧

Dim cn As New ADODB.Connection


Dim rs As New ADODB.Recordset
Dim sch As String
Set cn = CurrentProject.Connection
rs.Open "T_销售记录", cn, adopendynamic, adlockoptimistic
处理数据格式

'根据指定日期进行查询
sch = "[售出日期]=#" & txt_日期 & "#"
rs.Find sch
'查询结果处理
If rs.EOF Then
MsgBox "指定日期没有售出记录"
数据排序技巧

Else
Me!编号 = rs!编号
Me!名称 = rs!名称
Me!单价 = rs!单价
Me!金额 = rs!金额
数据查询技巧

Me!数量 = rs!数量
Me!售出日期 = rs!售出日期
Me!付款期 = rs!付款期
End If
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
数据编辑技巧

End Sub

320
Chapter 06 数据查询技巧

◎执行过程

基础操作技巧
保存编写的 VBA 代码,将“F_销售记录”窗体的视图模式切换到窗体
视图,在“售出日期”文本框中输入日期(需要与查询日期格式相同)
,单击
“查询”按钮,可以得到如图 6-21 所示的结果。

控件和对象
图 6-21 查询指定日期的销售记录

对象操作技巧
190 使用比较运算符来查询数据记录 初 中 高
190 2003 / 2007 / 2010

使用比较运算符来查询数据记录
处理数据格式

◎逐条查询技巧:Find 方法、EOF 属性

在 ADO 中,使用 Find 方法查询记录时,只能够设置一个查询条件,不


能够使用 Between、AND 和 OR 等关键字进行多条件查询,但是可以使用=、
<、>、>=、<=、<>、Like 等 7 个比较运算符进行范围查询。
数据排序技巧

◎应用实例
素材\第 6 章\使用比较运算符来查询数据记录.accdb

本例中,需要通过单击“F_销售记录”窗体中的“查询”按钮,得到金
数据查询技巧

额大于“最低金额”文本框中的数据的记录。

◎案例操作

01 在窗体中插入“最低金额” 02 为 窗 体 添 加 “ cmd_ 查 询
文本框和“查询”按钮。
数据编辑技巧

_Click”事件过程。

321
Access VBA 活用范例大辞典

03 在“cmd_查询_Click”事件 04 执行程序过程查看程序运行
基础操作技巧

过程中添加查询代码。 效果。

◎过程源代码
源文件\第 6 章\使用比较运算符来查询数据记录.accdb
控件和对象

在事件过程中编写对应的 VBA 代码,实现通过比较运算符来查询大于


最低金额的记录,具体的 VBA 代码如下。
'查询“金额”字段大于指定数据的记录
Private Sub cmd_查询_Click()
对象操作技巧

Dim cn As New ADODB.Connection


Dim rs As New ADODB.Recordset
Dim sch As String
Set cn = CurrentProject.Connection
rs.Open "T_销售记录", cn, adOpenDynamic, adLockOptimistic
处理数据格式

'设置查询条件
sch = "[金额]>=" & txt_金额
rs.Find sch
'处理查询结果
If rs.EOF Then
'没有符合条件的记录时打开提示对话框
数据排序技巧

MsgBox "没有大于指定金额的销售记录"
Else
'有符合条件的记录时,在当前窗体中显示查询结果
Me!编号 = rs!编号
Me!名称 = rs!名称
数据查询技巧

Me!单价 = rs!单价
Me!金额 = rs!金额
Me!数量 = rs!数量
Me!售出日期 = rs!售出日期
Me!付款期 = rs!付款期
End If
数据编辑技巧

rs.Close: Set rs = Nothing


cn.Close: Set cn = Nothing
End Sub

322
Chapter 06 数据查询技巧

◎执行过程

基础操作技巧
保存编写的 VBA 代码,将“F_销售记录”窗体的视图模式切换到窗体
视图,在文本框中输入金额,单击“查询”按钮,可以得到如图 6-22 所示的
结果。

控件和对象
图 6-22 查询大于指定金额的销售记录

对象操作技巧
191 查询指定日期范围内的数据记录 初 中 高
191 2003 / 2007 / 2010

查询指定日期范围内的数据记录
◎逐条查询技巧:FindNext 方法、Between 关键字
处理数据格式

如果需要查询某个范围之内的数值型数据,可以使用 BetWeen 关键字,


其具体的语法格式为:
Between [数值下界] AND [数值上界]
如果查询的为日期范围,还需要在日期的上下界两端添加上标识日期的
数据排序技巧

“#”符号。

◎应用实例
素材\第 6 章\查询指定日期范围内的数据记录.accdb
数据查询技巧

本例中,需要通过自定义的起始日期和结束日期查询该日期范围内的销
售日期。

◎案例操作
数据编辑技巧

01 在窗体插入“txt_起始日期” 、 02 为 窗 体 添 加 “ cmd_ 查 询
“ txt_ 结 束 日 期 ” 文 本 框 和 _Click”事件过程。
“cmd_查询”按钮。

323
Access VBA 活用范例大辞典

03 在“cmd_查询_Click”事件 04 执行程序过程查看程序运行
基础操作技巧

过程中添加查询代码。 效果。

◎过程源代码
源文件\第 6 章\查询指定日期范围内的数据记录.accdb
控件和对象

在事件过程中编写对应的 VBA 代码,通过获取文本框中的起止日期,


实现指定日期范围的数据查询,并做进一步处理,具体的 VBA 代码如下。
Private Sub cmd_查询_Click()
Dim db As DAO.Database
对象操作技巧

Dim rs As DAO.Recordset
Dim sch As String
Set db = CurrentDb()
Set rs = Me.RecordsetClone
'将记录集的书签与当前窗体中的书签同步
处理数据格式

rs.Bookmark = Me.Bookmark
'查询指定日期范围内的记录
sch = "[售出日期] Between #" & txt_起始日期 & _
"# AND #" & txt_结束日期 & "#"
rs.FindNext sch
'对查询结果进行处理
数据排序技巧

If rs.NoMatch Then
MsgBox "指定日期范围内没有售出记录"
Else
Me.Bookmark = rs.Bookmark
End If
数据查询技巧

rs.Close: Set rs = Nothing


db.Close: Set db = Nothing
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_销售记录”窗体的视图模式切换到窗体
数据编辑技巧

视图,在“起始日期”和“结束日期”文本框中分别输入起始日期和结束日
期,单击“查询”按钮,结果如图 6-23 所示。

324
Chapter 06 数据查询技巧

基础操作技巧
图 6-23 查询指定日期范围内的数据记录

控件和对象
192 在指定的数值范围内查询数据 初 中 高
192 2003 / 2007 / 2010

在指定的数值范围内查询数据

对象操作技巧
◎逐条查询技巧:FindNext 方法、AND 关键字、OR 关键字

在 DAO 中,使用 FindNext 查询记录时,可以使用 AND、OR 等关键字


将多个条件合并为一个查询条件,从而实现多条件查询。 处理数据格式

◎应用实例
素材\第 6 章\在指定的数值范围内查询数据.accdb

本例中,通过在文本框中指定金额范围,查询该范围内的销售记录。

◎案例操作
数据排序技巧

01 在窗体中插入“金额下界”
、 02 为 窗 体 添 加 “ cmd_ 查 询
“金额上界”文本框和“查询” _Click”事件过程。
按钮。
数据查询技巧

03 在“cmd_查询_Click”事件 04 执行程序过程查看程序运行
过程中添加查询代码。 效果。

◎过程源代码
数据编辑技巧

源文件\第 6 章\在指定的数值范围内查询数据.accdb

在事件过程中编写对应的 VBA 代码,通过获取文本框的数值数据实现

325
Access VBA 活用范例大辞典

在指定的数值范围内查询数据,处理查询结果,具体的 VBA 代码如下。


基础操作技巧

Private Sub cmd_查询_Click()


Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim sch As String
Set db = CurrentDb()
Set rs = Me.RecordsetClone
控件和对象

'将记录集的书签与当前窗体中的书签同步
rs.Bookmark = Me.Bookmark
'查询金额在指定范围内的记录
sch = "[金额]>=" & txt_下界 & "and" & "[金额]<=" & txt_上界
rs.FindNext sch
对象操作技巧

'对查询结果进行处理
If rs.NoMatch Then
MsgBox "指定范围内没有销售记录"
Else
Me.Bookmark = rs.Bookmark
处理数据格式

End If
rs.Close: Set rs = Nothing
db.Close: Set db = Nothing
End Sub

◎执行过程
数据排序技巧

保存编写的 VBA 代码,将“F_销售记录”窗体的视图模式切换到窗体


视图,分别在“金额上界”和“金额下界”文本框中输入金额,单击“查询”
按钮,可以得到如图 6-24 所示的结果。
数据查询技巧
数据编辑技巧

图 6-24 查询金额在指定范围内的销售记录

326
Chapter 06 数据查询技巧

193 使用 AND 关键字如何查询数据 初 中 高


193

基础操作技巧
2003 / 2007 / 2010

使用 AND 关键字如何查询数据
◎逐条查询技巧:FindNext 方法、NoMatch 属性、AND 关键字

如果需要进行多条件查询,可以使用 AND 关键字将若干个条件合并为

控件和对象
一个查询条件,实现多条件查询,其具体的语法格式为:
[条件 1] AND [条件 2] AND […]
需要特别注意 AND 关键字两端必须都有一个条件,否则会出错。

◎应用实例

对象操作技巧
素材\第 6 章\使用 AND 关键字如何查询数据.accdb

本例中,需要查询指定部门中员工工资大于指定工资的记录。

◎案例操作
处理数据格式

01 在窗体中插入“部门”文本 02 为 窗 体 添 加 “ cmd_ 查 询
框、
“实得工资”文本框和“查 _Click”事件过程。
询”按钮。
数据排序技巧

03 在“cmd_查询_Click”事件 04 执行程序过程查看程序运行
过程中添加查询代码。 效果。

◎过程源代码
数据查询技巧

源文件\第 6 章\使用 AND 关键字如何查询数据.accdb

在事件过程中编写对应的 VBA 代码,通过 AND 关键字连接查询条件,


实现多条件的查询操作,并做进一步处理,具体的 VBA 代码如下。
'使用 AND 关键字实现多条件查询
数据编辑技巧

Private Sub cmd_查询_Click()


Dim db As DAO.Database

327
Access VBA 活用范例大辞典

Dim rs As DAO.Recordset
基础操作技巧

Dim sch As String


Set db = CurrentDb()
Set rs = Me.RecordsetClone
'将记录集的书签与当前窗体中的书签同步
rs.Bookmark = Me.Bookmark
'查询金额在指定范围内的记录
控件和对象

sch = "[实得工资]>=" & txt_工资 & " and [部门] Like " & " '*" & _
txt_部门 & "*'"
rs.FindNext sch
'对查询结果进行处理
If rs.NoMatch Then
对象操作技巧

MsgBox "没有满足条件的记录"
Else
Me.Bookmark = rs.Bookmark
End If
rs.Close: Set rs = Nothing
db.Close: Set db = Nothing
处理数据格式

End Sub

◎执行过程
保存编写的 VBA 代码,将“F_员工工资”窗体的视图模式切换到窗体
视图,分别在“部门”和“实得工资”文本框中分别输入部门和工资,单击
数据排序技巧

“查询”按钮,可以得到如图 6-25 所示的效果。


数据查询技巧
数据编辑技巧

图 6-25 查询策划部实得工资 2000 元及以上的记录

328
Chapter 06 数据查询技巧

194 使用 OR 关键字如何查询数据 初 中 高
194 2003 / 2007 / 2010

基础操作技巧
使用 OR 关键字如何查询数据
◎逐条查询技巧:FindNext 方法、NoMatch 属性、OR 关键字

如果要查询满足多个条件中的任意一个条件的数据记录,可以使用 OR

控件和对象
关键字,其具体的语法格式为:
[条件 1] OR [条件 2] OR […]
需要注意使用 OR 关键字时,其两端必须都有条件,否则就会出现错误。

◎应用实例

对象操作技巧
素材\第 6 章\使用 OR 关键字如何查询数据.accdb

本例中,需要查询指定的两个部门中任意一个部门的员工的记录。

◎案例操作
处理数据格式

01 在“F_员工工资”窗体中插 02 为 窗 体 添 加 “ cmd_ 查 询
入“部门 1”
、“部门 2”文本框 _Click”事件过程。
和“查询”按钮。
数据排序技巧

03 在“cmd_查询_Click”事件 04 执行程序过程查看程序运行
过程中添加查询代码。 效果。

◎过程源代码
数据查询技巧

源文件\第 6 章\使用 OR 关键字如何查询数据.accdb

在事件过程中编写对应的 VBA 代码,使用 OR 关键字约束需要查询的


指定部门的员工记录,具体的 VBA 代码如下。
'使用 OR 关键字实现查询满足多个条件中的任意条件的记录
数据编辑技巧

Private Sub cmd_查询_Click()


Dim db As DAO.Database
Dim rs As DAO.Recordset

329
Access VBA 活用范例大辞典

Dim sch As String


基础操作技巧

Set db = CurrentDb()
Set rs = Me.RecordsetClone
'将记录集的书签与当前窗体中的书签同步
rs.Bookmark = Me.Bookmark
'查询两个部门中任一部门员工的记录
sch = "[部门] like" & "'*" & txt_部门 1 & "*' " & _
控件和对象

" Or [部门] Like " & " '*" & txt_部门 2 & "*'"
rs.FindNext sch
'对查询结果进行处理
If rs.NoMatch Then
MsgBox "没有满足条件的记录"
对象操作技巧

Else
Me.Bookmark = rs.Bookmark
End If
rs.Close: Set rs = Nothing
db.Close: Set db = Nothing
End Sub
处理数据格式

◎执行过程
保存编写的 VBA 代码,将“F_员工工资”窗体的视图模式切换到窗体
视图,分别在“部门 1”和“部门 2”文本框中输入要查询的部门名称,单击
“查询”按钮,可以得到如图 6-26 所示的效果。
数据排序技巧
数据查询技巧
数据编辑技巧

图 6-26 查询策划部或设计部员工的记录

330
Chapter 06 数据查询技巧

195 使用 AND 关键字和 OR 关键字如何实现多条件查询 初 中 高


195 2003 / 2007 / 2010

基础操作技巧
使用 AND 关键字和 OR 关键字如何实现多条件查询
◎逐条查询技巧:FindNext 方法、NoMatch 属性、Bookmark 属性

如果需要满足的条件较多,且其中的一些条件需要同时满足,一些条件

控件和对象
只需要满足其中一个。可以使用 AND 关键字和 OR 关键字将多个条件连接
起来。

当条件较多时,如果仍然将所有条件写在一个字符串变量中,就会显得
难易理解,且容易出错。这时可以考虑将每一个条件均保存至一个字符串变

对象操作技巧
量中,然后使用 AND 关键字和 OR 关键字将这些字符串变量连接起来。

◎应用实例
素材\第 6 章\使用 AND 关键字和 OR 关键字如何实现多条件查询.accdb

本例中,需要在当前窗体的记录集中,查询指定部门中实得工资大于某
处理数据格式

个值或小于某个值的记录。

◎案例操作

01 在窗体中插入“部门”、“实 02 为 窗 体 添 加 “ cmd_ 查 询
数据排序技巧

得工资>=”
、“或实得工资<=” _Click”事件过程。
文本框和“查询”按钮。

03 在“cmd_查询_Click”事件 04 执行程序过程查看程序运行
数据查询技巧

过程中添加查询代码。 效果。

◎过程源代码
源文件\第 6 章\使用 AND 关键字和 OR 关键字如何实现多条件查询.accdb
数据编辑技巧

在事件过程中编写对应的 VBA 代码,通过 AND 关键字和 OR 关键字约


束部门和工资范围的数据,具体的 VBA 代码如下。

331
Access VBA 活用范例大辞典

Private Sub cmd_查询_Click()


基础操作技巧

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim sch1 As String
Dim sch2 As String
Dim sch3 As String
Dim sch As String
控件和对象

Set db = CurrentDb()
Set rs = Me.RecordsetClone
'将记录集的书签与当前窗体中的书签同步
rs.Bookmark = Me.Bookmark
'设置查询条件
对象操作技巧

sch1 = "[部门] like" & "'*" & txt_部门 & "*' "
sch2 = "[实得工资]>=" & txt_工资 1
sch3 = "[实得工资]<=" & txt_工资 2
sch = sch1 & " and (" & sch2 & " or " & sch3 & " )"
'查询满足条件的记录
rs.FindNext sch
处理数据格式

'对查询结果进行处理
If rs.NoMatch Then
MsgBox "没有满足条件的记录"
Else
Me.Bookmark = rs.Bookmark
数据排序技巧

End If
End Subb

◎执行过程
保存编写的 VBA 代码,然后设置查询条件,单击“查询”按钮查看结
果,如图 6-27 所示。
数据查询技巧
数据编辑技巧

图 6-27 查询策划部或设计部员工的记录

332
Chapter 06 数据查询技巧

196 处理多条件查询中没有指定条件的情况 初 中 高
196

基础操作技巧
2003 / 2007 / 2010

处理多条件查询中没有指定条件的情况
◎逐条查询技巧:FindNext 方法、NoMatch 属性、IsNull()函数

在使用 AND 关键字和 OR 关键字进行多条件查询时,如果某个条件

控件和对象
没有设置,就会导致 AND 关键后或 OR 关键字的一端没有条件,从而出
现错误。

为了避免这种错误的出现,可以使用 IsNull()函数判断输入条件的文本框
是否为空,为空则通过消息对话框提示输入。

对象操作技巧
◎应用实例
素材\第 6 章\处理多条件查询中没有指定条件的情况.accdb

本例中,需要在输入了所有的条件后,查询满足条件的记录。如果指定
的条件没有输入完整,则通过消息对话框进行提示。
处理数据格式

◎案例操作

01 在窗体中插入“部门”、“实 02 为 窗 体 添 加 “ cmd_ 查 询
得工资>=”
、“或实得工资<=” _Click”事件过程。
数据排序技巧

文本框和“查询”按钮。

03 在“cmd_查询_Click”事件 04 执行程序过程查看程序运行
过程中添加查询代码。 效果。
数据查询技巧

◎过程源代码
源文件\第 6 章\处理多条件查询中没有指定条件的情况.accdb

在事件过程中编写对应的 VBA 代码,设置查询内容,判断查询条件是


数据编辑技巧

否输入,执行查询,处理查询结果,具体的 VBA 代码如下。


Private Sub cmd_查询_Click()
Dim db As DAO.Database

333
Access VBA 活用范例大辞典

Dim rs As DAO.Recordset
基础操作技巧

Dim sch1 As String


Dim sch2 As String
Dim sch3 As String
Dim sch As String
Set db = CurrentDb()
Set rs = Me.RecordsetClone
控件和对象

rs.Bookmark = Me.Bookmark
'判断条件是否为空
If IsNull(txt_部门) Then
MsgBox "请输入查询部门"
ElseIf IsNull(txt_工资 1) Then
对象操作技巧

MsgBox "请输入工资条件 1"


ElseIf IsNull(txt_工资 2) Then
MsgBox "请输入工资条件 2"
'当所有条件都不为空时,执行查询程序
Else
sch1 = "[部门] like" & "'*" & txt_部门 & "*' "
处理数据格式

sch2 = "[实得工资]>=" & txt_工资 1


sch3 = "[实得工资]<=" & txt_工资 2
sch = sch1 & " and (" & sch2 & " or " & sch3 & " )"
rs.FindNext sch
If rs.NoMatch Then
数据排序技巧

MsgBox "没有满足条件的记录"
Else
Me.Bookmark = rs.Bookmark
End If
End If
rs.Close: Set rs = Nothing
数据查询技巧

db.Close: Set db = Nothing


End Sub

◎执行过程
保存编写的 VBA 代码,然后设置查询条件查看结果。如果某个条件没
数据编辑技巧

有设置,则会弹出设置查询条件的提示信息,如图 6-28 所示。如果多个条件


没有设置,只会提示最前面的一个条件没有设置。

334
Chapter 06 数据查询技巧

基础操作技巧
控件和对象
图 6-28 处理多条件查询中没有指定条件的情况

197 快速筛选指定条件的所有数据记录 初 中 高
197

对象操作技巧
2003 / 2007 / 2010

快速筛选指定条件的所有数据记录
◎同时显示所有查询记录技巧:Filter 属性、FilterOn 属性

如果要从记录集中筛选出符合条件的记录,可以使用 Filter 属性和


处理数据格式

FilterOn 属性。

Filter 属性能从表、查询、窗体或者报表中筛选出符合指定条件的记录,
筛选条件需要使用字符串指定,其具体的语法格式如下所示:
[对象].Filter=[筛选条件]
数据排序技巧

在设置好筛选条件之后,还需要确定是否需要执行筛选。执行筛选时,
只需要将 FilterOn 属性的值设置为 True 即可。

◎应用实例
素材\第 6 章\快速筛选指定条件的所有数据记录.accdb
数据查询技巧

本例中,需要在单击“F_员工工资”窗体中的“财务部”按钮时,筛选
出窗体中部门字段为“财务部”的记录。

◎案例操作
数据编辑技巧

01 在“F_员工工资”窗体中插 02 为窗体添加“cmd_ 财务部


入“财务部”按钮。 _Click”事件过程。

335
Access VBA 活用范例大辞典

03 在“cmd_财务部_Click”事 04 执行程序过程查看程序运行
基础操作技巧

件过程中添加代码。 效果。

◎过程源代码
源文件\第 6 章\快速筛选指定条件的所有数据记录.accdb
控件和对象

在事件过程中编写对应的 VBA 代码,设置筛选字段和条件,执行筛选


操作,具体的 VBA 代码如下。
Private Sub cmd_财务部_Click()
'设置筛选字段和条件,执行筛选操作
对象操作技巧

Me.Filter = "[部门]='财务部'"
Me.FilterOn = True
End Sub

◎执行过程
处理数据格式

保存编写的 VBA 代码,将窗体的视图模式切换到窗体视图,单击“财


务部”按钮,可以得到如图 6-29 所示的效果。
数据排序技巧
数据查询技巧

图 6-29 筛选出窗体中所有财务部的记录

198 恢复筛选之前的效果 初 中 高
198 2003 / 2007 / 2010

恢复筛选之前的效果
数据编辑技巧

◎同时显示所有查询记录技巧:FilterOn 属性

在执行筛选操作之后,如果要解除筛选,只需要将 FilterOn 属性设置为


336
Chapter 06 数据查询技巧

False 即可。

基础操作技巧
◎应用实例
素材\第 6 章\恢复筛选之前的效果.accdb

本例中,需要在单击“F_员工工资”窗体中的“恢复”按钮后,解除对
窗体中记录的筛选。

控件和对象
◎案例操作

01 在“F_员工工资”窗体中插 02 为 窗 体 添 加 “ cmd_ 恢 复
入“恢复”按钮。 _Click”事件过程。

对象操作技巧
03 在“cmd_恢复_Click”事件 04 执行程序过程查看程序运行
过程中添加代码。 效果。 处理数据格式

◎过程源代码
源文件\第 6 章\恢复筛选之前的效果.accdb

在事件过程中编写 VBA 代码,取消筛选操作,具体的 VBA 代码如下。


Private Sub cmd_恢复_Click()
数据排序技巧

Me.FilterOn = False
End Sub

◎执行过程
保存编写的 VBA 代码,将窗体的视图模式切换到窗体视图,单击“财
数据查询技巧

务部”按钮执行筛选,单击“恢复”按钮可解除筛选,如图 6-30 所示。


数据编辑技巧

图 6-30 恢复筛选之前的效果

337
Access VBA 活用范例大辞典

199 在加载窗体时筛选指定条件的所有记录 初 中 高
199 2003 / 2007 / 2010
基础操作技巧

在加载窗体时筛选指定条件的所有记录
◎同时显示所有查询记录技巧:Filter 属性、Form_Load 事件

如果需要在加载窗体时按照预定条件对记录集进行筛选,可以在窗体的
控件和对象

加载事件中(Form_Load)执行筛选操作。

◎应用实例
素材\第 6 章\在加载窗体时筛选指定条件的所有记录.accdb
对象操作技巧

本例中,需要在“F_员工工资”窗体加载时,执行筛选操作,使得窗体
中仅显示女性员工的记录。

◎案例操作

01 为窗体添加“Form_Load”事 02 在“Form_Load”事件过程中
处理数据格式

件过程。 添加筛选代码。

03 执行程序过程查看程序运行
效果。
数据排序技巧

◎过程源代码
源文件\第 6 章\在加载窗体时筛选指定条件的所有记录.accdb

在事件过程中编写对应的 VBA 代码,实现筛选性别为“女”的员工记


数据查询技巧

录,具体的 VBA 代码如下。


Private Sub Form_Load()
'设置筛选字段和条件
Me.Filter = "[性别]='女'"
数据编辑技巧

'执行筛选操作
Me.FilterOn = True
End Sub

338
Chapter 06 数据查询技巧

◎执行过程

基础操作技巧
保存编写的 VBA 代码,将“F_员工工资”窗体的视图模式切换到窗体
视图或者重新打开窗体,可以得到如图 6-31 所示的效果。

控件和对象
对象操作技巧
图 6-31 加载窗体时筛选出所有女员工记录

200 在文本框中自定义筛选条件筛选数据 初 中 高
200 2003 / 2007 / 2010
处理数据格式

在文本框中自定义筛选条件筛选数据
◎同时显示所有查询记录技巧:Filter 属性、FilterOn 属性

如果需要通过文本框来指定筛选条件,可以将文本框名称设置到 Filter
属性中,此时需要使用“&”符号,其语法格式如下。
数据排序技巧

[对象] Filter=[字段名:]&[文本框名:]

◎应用实例
素材\第 6 章\在文本框中自定义筛选条件筛选数据.accdb
数据查询技巧

本例中,需要通过单击“筛选”按钮,筛选出基本工资等于文本框中输
入数值的记录。

◎案例操作

01 在“F_员工工资”窗体中插 02 为“F_员工工资”窗体添加
数据编辑技巧

入“基本工资”文本框和“筛 “cmd_筛选_Click”事件过程。
选”按钮。

339
Access VBA 活用范例大辞典

03 在“cmd_筛选_Click”事件 04 执行程序过程查看程序运行
基础操作技巧

过程中添加代码。 效果。

◎过程源代码
源文件\第 6 章\在文本框中自定义筛选条件筛选数据.accdb
控件和对象

在事件过程中编写对应的 VBA 代码,获取文本框中的数据,设置为筛


选条件,执行筛选操作,具体的 VBA 代码如下。
Private Sub cmd_筛选_Click()
Me.Filter = "[基本工资]=" & txt_基本工资
对象操作技巧

Me.FilterOn = True
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_员工工资”窗体的视图模式切换到窗体视
处理数据格式

图,在文本框中输入数值,单击“筛选”按钮进行筛选,结果如图 6-32 所示。


数据排序技巧

图 6-32 筛选基本工资为文本框中数值的记录
数据查询技巧

201 模糊筛选包含指定字符的所有数据记录(1) 初 中 高
201 2003 / 2007 / 2010

模糊筛选包含指定字符的所有数据记录(1)
数据编辑技巧

◎同时显示所有查询记录技巧:Filter 属性、FilterOn 属性

如果需要通过部分信息进行数据筛选,要使用 Like 运算符,并且在指定

340
Chapter 06 数据查询技巧

的筛选字符串前后添加通配符“*”

基础操作技巧
在进行文本筛选的时候,如果是通过控件来输入的筛选条件,只能够使
用 Like 运算符,而不能使用“=”运算符来设置条件。

◎应用实例
素材\第 6 章\模糊筛选包含指定字符的所有数据记录(1).accdb

控件和对象
本例中,需要在“F_生活健康用品”窗体中筛选出商品名称中包含指定
字符的记录,其中包含通过文本框设置指定的字符。

◎案例操作

对象操作技巧
01 在窗体中插入“商品名称” 02 为 窗 体 添 加 “ cmd_ 筛 选
文本框和“筛选”按钮。 _Click”事件过程。

03 在“cmd_筛选_Click”事件 04 执行程序过程查看程序运行
处理数据格式

过程中添加代码。 效果。

◎过程源代码
源文件\第 6 章\模糊筛选包含指定字符的所有数据记录(1).accdb
数据排序技巧

在事件过程中编写对应的 VBA 代码,通过 Like 关键字设置筛选条件,


执行筛选操作,具体的 VBA 代码如下。
Private Sub cmd_筛选_Click()
Me.Filter = "[商品名称] like " & " '*" & txt_商品名称 & "*'"
数据查询技巧

Me.FilterOn = True
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_生活健康用品”窗体的视图模式切换到
数据编辑技巧

窗体视图,在文本框中输入数据,单击“筛选”按钮进行筛选,结果如图 6-33
所示。

341
Access VBA 活用范例大辞典
基础操作技巧
控件和对象

图 6-33 筛选商品名称中包含“香皂”的记录

202 模糊筛选包含指定字符的所有数据记录(2) 初 中 高
202 2003 / 2007 / 2010

模糊筛选包含指定字符的所有数据记录(2)
对象操作技巧

◎同时显示所有查询记录技巧:Filter 属性、Requery 方法

在 DAO 中执行模糊筛选,筛选条件的设置与实例 201 中的设置相似。


在设置了筛选之后,执行筛选的操作就有所不同了。需要将筛选后的记录集
处理数据格式

设置为当前的记录集,并通过 Requery 方法重绘窗体,以便在窗体中显示筛


选之后的记录,其具体的语法格式为:
Set Me.Recordset = [筛选后的记录集]
Me.Requery
数据排序技巧

这种方法的实质是更改窗体的记录集,所以,这种方法的筛选结果的恢
复,需要通过重新设置记录集来实现,而不能够通过 FilterOn 属性的实现。

◎应用实例
素材\第 6 章\模糊筛选包含指定字符的所有数据记录(2).accdb
数据查询技巧

本例中,需要筛选出“F_生活健康用品”窗体中,商品名称中包含“商
品名称”文本框中输入文本的的记录。

◎案例操作
数据编辑技巧

01 在窗体插入“商品名称”文 02 为 窗 体 添 加 “ cmd_ 筛 选
本框和“筛选”按钮。 _Click”事件过程。

342
Chapter 06 数据查询技巧

03 在“cmd_筛选_Click”事件 04 执行程序过程查看程序运行

基础操作技巧
过程中添加代码。 效果。

◎过程源代码
源文件\第 6 章\模糊筛选包含指定字符的所有数据记录(2).accdb

控件和对象
在事件过程中编写对应的 VBA 代码,设置筛选条件,重绘窗体,具体
的 VBA 代码如下。
'在 DAO 中进行筛选
Private Sub cmd_筛选_Click()

对象操作技巧
Dim db As DAO.Database
Dim rs As DAO.Recordset
'获取数据集
Set db = CurrentDb()
Set rs = db.OpenRecordset("生活健康用品", dbOpenDynaset)
处理数据格式

'筛选
rs.Filter = "[商品名称] like '*" & txt_商品名称 & "*'"
Set rs = rs.OpenRecordset
'将筛选后的记录集设置到窗体中
Set Me.Recordset = rs
Me.Requery '重绘窗体
数据排序技巧

Set rs = Nothing: Set db = Nothing


End Sub

◎执行过程
保存编写的 VBA 代码,将“F_生活健康用品”窗体的视图模式切换到窗体
数据查询技巧

视图,在文本框中输入数据,单击“筛选”按钮进行筛选,结果如图 6-34 所示。


数据编辑技巧

图 6-34 筛选商品名称中包含“竹盐”的记录

343
Access VBA 活用范例大辞典

203 打开报表时显示所有的筛选记录 初 中 高
203 2003 / 2007 / 2010
基础操作技巧

打开报表时显示所有的筛选记录
◎同时显示所有查询记录技巧:Filter 属性、FilterOn 属性

如果需要在打开报表时只显示筛选的记录,可在报表的 Open 事件中执


控件和对象

行筛选操作。

◎应用实例
素材\第 6 章\打开报表时显示所有的筛选记录.accdb
对象操作技巧

本例中,需要在打开报表时,报表中只显示商品名称中包含“洗发水”
文本的商品记录。

◎案例操作

01 为报表添加“Report_Open” 02 在“Report_Open”事件过程
处理数据格式

事件过程。 中添加筛选代码。

03 执行程序过程查看程序运行
效果。
数据排序技巧

◎过程源代码
源文件\第 6 章\打开报表时显示所有的筛选记录.accdb

在事件过程中编写对应的 VBA 代码,使用“Like”关键字设置筛选条件,


数据查询技巧

并执行筛选操作,具体的 VBA 代码如下。


Private Sub Report_Open(Cancel As Integer)
'设置筛选参数,执行筛选操作
Me.Filter = "[商品名称] like '*洗发水*'"
数据编辑技巧

Me.FilterOn = True
End Sub

344
Chapter 06 数据查询技巧

◎执行过程

基础操作技巧
保存编写的 VBA 代码,将报表的视图模式切换到报表视图或重新打开
报表,在打开的报表中只显示筛选后的记录,如图 6-35 所示。

控件和对象
对象操作技巧
图 6-35 在打开的报表中只显示“洗发水”的记录

204 打开报表时指定查询条件筛选符合的所有数据记录 初 中 高
204 2003 / 2007 / 2010

打开报表时指定查询条件筛选符合的所有数据记录
处理数据格式

◎同时显示所有查询记录技巧:Filter 属性、FilterOn 属性

如果需要在报表开始时指定筛选条件,需要在报表的 Open 事件或者


Load 事件中执行筛选。本例中选用在 Load 事件中设置打开报表时的筛选。
数据排序技巧

因为筛选参数是在报表加载时设置的,所以可以使用 InputBox()函数来
设置筛选的参数。

◎应用实例
数据查询技巧

素材\第 6 章\打开报表时指定查询条件筛选符合的所有数据记录.accdb

本例中,需要在加载报表时,在打开对话框中指定筛选的条件,使得报
表中只显示商品名称中包含指定文本的记录。

◎案例操作
数据编辑技巧

01 为报表添加“Report_Load” 02 在“Report_Load”事件过程
事件过程。 中添加筛选代码。

345
Access VBA 活用范例大辞典

03 执行程序过程查看程序运行
基础操作技巧

效果。

◎过程源代码
源文件\第 6 章\打开报表时指定查询条件筛选符合的所有数据记录.accdb
控件和对象

在事件过程中编写对应的 VBA 代码,获取筛选条件,执行筛选操作,


具体的 VBA 代码如下。
Private Sub Report_Load()
Dim sch As String
对象操作技巧

'获取筛选条件
sch = InputBox("请输入要筛选的商品名称", "按名称筛选", "牙刷")
'设置筛选参数
Me.Filter = "[商品名称] Like '*" & sch & "*'"
'执行筛选操作
Me.FilterOn = True
处理数据格式

End Sub

◎执行过程
保存编写的 VBA 代码,打开“R_生活健康用品”报表,在打开的“按
名称筛选”对话框中输入“香皂”文本,单击“确定”按钮,最终筛选出的
数据排序技巧

结果如图 6-36 所示。


数据查询技巧
数据编辑技巧

图 6-36 使打开的报表中只显示筛选出的记录

346
Chapter 06 数据查询技巧

205 在子窗体中筛选指定数据范围内的所有数据记录 初 中 高
205 2003 / 2007 / 2010

基础操作技巧
在子窗体中筛选指定数据范围内的所有数据记录
◎同时显示所有查询记录技巧:Filter 属性、SetFocus 方法、IsNull 函数

如果需要在主窗体中实现对子窗体中的记录的筛选,需要使用如下所示

控件和对象
的代码来完成。
Forms![主窗体名].[子窗体名].Form.Filter=“条件”
Forms![主窗体名].[子窗体名].Form.FilterOn=True

◎应用实例

对象操作技巧
素材\第 6 章\在子窗体中筛选指定数据范围内的所有数据记录.accdb

本例中,需要分别在两个文本框中输入零售价的上、下界,通过单击“筛
选”按钮筛选出子窗体记录集中零售价在该范围内的记录。 处理数据格式

◎案例操作

01 在主窗体插入“零售价”、 02 为 窗 体 添 加 “ cmd_ 筛 选
“至”文本框和“筛选”按钮。 _Click”事件过程。
数据排序技巧

03 在“cmd_筛选_Click”事件 04 执行程序过程查看程序运行
过程中添加代码。 效果。

◎过程源代码
数据查询技巧

源文件\第 6 章\在子窗体中筛选指定数据范围内的所有数据记录.accdb

在事件过程中编写对应的 VBA 代码,判断是否已输入筛选条件,设置


筛选条件,执行筛选操作,具体的 VBA 代码如下。
Private Sub cmd_筛选_Click()
数据编辑技巧

Dim sch As String


Dim sch1 As String
Dim sch2 As String
'判断是否输入筛选的零售价下界

347
Access VBA 活用范例大辞典

If IsNull(txt_下界) Then
基础操作技巧

MsgBox ("请输入零售价下界")
txt_下界.SetFocus
'判断是否输入筛选的零售价下界
ElseIf IsNull(txt_上界) Then
MsgBox ("请输入零售价上界")
txt_上界.SetFocus
控件和对象

Else
'获取筛选条件,在子窗体中执行筛选操作
sch1 = "[零售价]>= " & txt_下界
sch2 = "[零售价]<= " & txt_上界
sch = sch1 & " and " & sch2
对象操作技巧

Forms!F_生活健康用品.FD_生活健康用品.Form.Filter = sch
Forms!F_生活健康用品.FD_生活健康用品.Form.FilterOn = True
End If
End Sub

◎执行过程
处理数据格式

保存编写的 VBA 代码,将窗体的视图模式切换到窗体视图,在两个文


本中均输入数字,单击“筛选”按钮,可以得到筛选的结果,如图 6-37 所示。
数据排序技巧
数据查询技巧

图 6-37 在子窗体中筛选指定范围内的记录

206 将窗体中筛选的所有数据记录显示在报表中 初 中 高
206 2003 / 2007 / 2010

将窗体中筛选的所有数据记录显示在报表中
数据编辑技巧

◎同时显示所有查询记录技巧:Filter 属性、OpenReport 方法

通过窗体打开报表时,如果将报表的筛选条件设置为“Me.Filter”
,则可

348
Chapter 06 数据查询技巧

以在报表中显示当前窗体中筛选出的数据,其具体的语法格式为:

基础操作技巧
[报表].Filter=Me.Filter
[报表].FilterOn=True
本例的方法不适用于在窗体中使用 DAO 或者 ADO 方法执行的筛选。并
且,报表的数据源必须和当前窗体的数据源相同。

控件和对象
◎应用实例
素材\第 6 章\将窗体中筛选的所有数据记录显示在报表中.accdb

本例中,需要在“F_生活健康用品”窗体中单击“打开报表”按钮,打
开报表,并在报表中显示当前窗体中筛选出的数据。

对象操作技巧
◎案例操作

01 在“F_生活健康用品”窗体 02 为 窗 体 添 加 “ cmd_ 报 表
中插入“打开报表”按钮。 _Click”事件过程。
处理数据格式

03 在“cmd_报表_Click”事件 04 执行程序过程查看程序运行
过程中添加代码。 效果。
数据排序技巧

◎过程源代码
源文件\第 6 章\将窗体中筛选的所有数据记录显示在报表中.accdb

在事件过程中编写对应的 VBA 代码,打开指定报表,为报表设置筛选


条件,执行筛选操作,在指定报表中显示筛选记录,具体的 VBA 代码如下。
数据查询技巧

'在报表中显示当前窗体中筛选出的记录
Private Sub cmd_报表_Click()
'打开报表"R_生活健康用品"
DoCmd.OpenReport "R_生活健康用品", acViewPreview
'设置打开的报表的筛选条件
数据编辑技巧

Reports!R_生活健康用品.Filter = Me.Filter
Reports!R_生活健康用品.FilterOn = True
End Sub

349
Access VBA 活用范例大辞典

◎执行过程
基础操作技巧

保存编写的 VBA 代码,将“F_生活健康用品”窗体的视图模式切换到


窗体视图,在窗体中执行筛选操作。然后单击“打开报表”按钮,在报表中
显示当前窗体中筛选的记录,如图 6-38 所示。
控件和对象
对象操作技巧
处理数据格式

图 6-38 将窗体中筛选的所有数据记录显示在报表中
数据排序技巧

207 查询指定截止日期之间数据记录(1) 初 中 高
207 2003 / 2007 / 2010

查询指定截止日期之前数据记录(1)
◎同时显示所有查询记录技巧:Filter 属性、OpenRecordset 方法
数据查询技巧

在 DAO 中,如果需要筛选出指定截止日期之前的记录,可以使用 Filter


属性来实现。日期在条件字符串中,需要在其前后添加上“#”号。

◎应用实例
素材\第 6 章\查询指定截止日期之前数据记录(1).accdb
数据编辑技巧

本例中,需要在“F_销售记录”窗体中筛选出付款期在文本框中指定截
止日期之前的记录。

350
Chapter 06 数据查询技巧

◎案例操作

基础操作技巧
01 在窗体中插入“截止日期” 02 为 窗 体 添 加 “ cmd_ 筛 选
文本框和“筛选”按钮。 _Click”事件过程。

03 在“cmd_筛选_Click”事件 04 执行程序过程查看程序运行

控件和对象
过程中添加代码。 效果。

◎过程源代码
源文件\第 6 章\查询指定截止日期之前数据记录(1).accdb

对象操作技巧
在事件过程中编写对应的 VBA 代码,在文本框中指定截止日期,获取
该筛选条件,单击“确定”按钮执行筛选操作,具体的 VBA 代码如下。
'筛选截止日期之前数据记录
Private Sub cmd_筛选_Click()
处理数据格式

Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb()
Set rs = db.OpenRecordset("T_销售记录", dbOpenDynaset)
'设置筛选参数
rs.Filter = "[付款期]<=#" & txt_日期 & "#"
数据排序技巧

Set rs = rs.OpenRecordset
'将筛选结果设置到窗体中
Set Me.Recordset = rs
Me.Requery
Set rs = Nothing
数据查询技巧

Set db = Nothing
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_销售记录”窗体的视图模式切换到窗体
数据编辑技巧

视图,在文本框中输入截止日期,单击“筛选”按钮,即可筛选出付款期在
该日期之前的记录,如图 6-39 所示。

351
Access VBA 活用范例大辞典
基础操作技巧
控件和对象

图 6-39 筛选付款期在截止日期之前的记录

208 查询指定截至日期之间数据记录(2) 初 中 高
208 2003 / 2007 / 2010

查询指定截止日期之前数据记录(2)
对象操作技巧

◎同时显示所有查询记录技巧:Filter 属性、ControlSource 属性

在 ADO 中,如果需要在非绑定窗体中输出筛选的结果,需要使用 Filter


属性来进行筛选。
处理数据格式

将筛选后的记录集设置为当前窗体的记录集,并将非绑定窗体中的文本
框控件的控件数据源设置为相应的字段名称(默认为代码中打开的表的字段
名称)

◎应用实例
数据排序技巧

素材\第 6 章\查询指定截止日期之前数据记录(2).accdb

本例中,需要筛选出付款期在文本框中指定截止日期之后的记录,并将
筛选后的记录在非绑定窗体“F_销售记录”中显示。
数据查询技巧

◎案例操作

01 在窗体中插入文本框和“筛 02 为 窗 体 添 加 “ cmd_ 筛 选
选”按钮。 _Click”事件过程。
数据编辑技巧

03 在“cmd_筛选_Click”事件 04 执行程序过程查看程序运行
过程中添加代码。 效果。

352
Chapter 06 数据查询技巧

◎过程源代码

基础操作技巧
源文件\第 6 章\查询指定截止日期之前数据记录(2).accdb

在事件过程中编写对应的 VBA 代码,首先连接到数据库,然后在文本


框中设置筛选条件,执行筛选操作,具体的 VBA 代码如下。
'筛选指定日期之前的记录,并将结果在非绑定窗体中显示

控件和对象
Private Sub cmd_筛选_Click()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim sch As String
Set cn = CurrentProject.Connection

对象操作技巧
rs.CursorLocation = adUseClient
rs.Open "T_销售记录", cn, adOpenKeyset, adLockOptimistic
'获取筛选条件
sch = "[付款期]>=#" & Me!txt_日期 & "#"
'进行筛选
rs.Filter = sch
处理数据格式

'将筛选出的记录设置为当前窗体的记录集
Set Me.Recordset = rs
'对筛选出的结果进行处理
If rs.EOF Then
MsgBox "没有满足条件的记录!"
数据排序技巧

Exit Sub
Else
With Me
!ID.ControlSource = "ID"
!编号.ControlSource = "编号"
!名称.ControlSource = "名称"
数据查询技巧

!数量.ControlSource = "数量"
!单价.ControlSource = "单价"
!金额.ControlSource = "金额"
!售出日期.ControlSource = "售出日期"
!付款期.ControlSource = "付款期"
数据编辑技巧

End With
End If
rs.Close: Set rs = Nothing

353
Access VBA 活用范例大辞典

cn.Close: Set cn = Nothing


基础操作技巧

End Sub

◎执行过程
保存编写的 VBA 代码,将“F_销售记录”窗体的视图模式切换到窗体
视图,在文本框中输入日期,可以筛选出付款期在该日期之后的记录,如
图 6-40 所示。
控件和对象
对象操作技巧

图 6-40 筛选付款期在指定日期之后的记录
处理数据格式

209 查询指定日期范围内的所有数据记录(1) 初 中 高
209 2003 / 2007 / 2010

查询指定日期范围内的所有数据记录(1)
◎同时显示所有查询记录技巧:Filter 属性、OpenRecordset 方法
数据排序技巧

在 DAO 中,如果需要筛选出指定日期范围内的记录,可以分别将起始
日期和结束日期写成一个条件,然后使用 AND 关键字将其组合为一个条件。

也可以使用 Between…AND 语句来构造日期范围,使用该方法构造的日


数据查询技巧

期范围可以不考虑输入日期的先后问题。

◎应用实例
素材\第 6 章\查询指定日期范围内的所有数据记录(1).accdb
数据编辑技巧

本例中,需要筛选出“F_销售记录”窗体中,付款期在文本框中指定日
期范围之内的记录。

354
Chapter 06 数据查询技巧

◎案例操作

基础操作技巧
01 在窗体中插入“付款期”、 02 为 窗 体 添 加 “ cmd_ 筛 选
“至”文本框和“筛选”按钮。 _Click”事件过程。

03 在“cmd_筛选_Click”事件 04 执行程序过程查看程序运行

控件和对象
过程中添加代码。 效果。

◎过程源代码
源文件\第 6 章\查询指定日期范围内的所有数据记录(1).accdb

对象操作技巧
在事件过程中编写对应的 VBA 代码,判断日期范围是否输入,设置筛
选条件,执行筛选操作,具体的 VBA 代码如下。
'筛选指定日期范围内的记录
Private Sub cmd_筛选_Click()
处理数据格式

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim sch As String
Dim sch1 As String
Dim sch2 As String
Set db = CurrentDb()
数据排序技巧

Set rs = db.OpenRecordset("T_销售记录", dbOpenDynaset)


'判断是否输入筛选日期上下界
If IsNull(txt_下界) Then
MsgBox "请输入筛选起始日期", , "起始日期未输入"
ElseIf IsNull(txt_上界) Then
数据查询技巧

MsgBox "请输入筛选结束日期", , "结束日期未输入"


Else
'获取筛选参数
sch1 = "[付款期]>=#" & txt_下界 & "#"
sch2 = "[付款期]<=#" & txt_上界 & "#"
数据编辑技巧

sch = sch1 & " and " & sch2


'执行筛选操作
rs.Filter = sch
Set rs = rs.OpenRecordset

355
Access VBA 活用范例大辞典

'将筛选结果设置到窗体中
基础操作技巧

Set Me.Recordset = rs
Me.Requery
End If
Set rs = Nothing
Set db = Nothing
End Sub
控件和对象

◎执行过程
保存编写的 VBA 代码,将“F_销售记录”窗体的视图模式切换到窗体
视图,在文本框中输入起止日期,单击“筛选”按钮,可以筛选出付款期在
指定日期范围的记录,如图 6-41 所示。
对象操作技巧
处理数据格式

图 6-41 筛选付款期在指定日期范围的记录
数据排序技巧

210 查询指定日期范围内的所有数据记录(2) 初 中 高
210 2003 / 2007 / 2010

查询指定日期范围内的所有数据记录(2)
◎同时显示所有查询记录技巧:Filter 属性、Open 方法、AND 关键字
数据查询技巧

在 ADO 中,如果需要筛选出指定日期范围内的记录,也可以分别将起
始日期和结束日期写作一个条件,再使用 AND 关键字将其组合为一个条件。

◎应用实例
素材\第 6 章\查询指定日期范围内的所有数据记录(2).accdb
数据编辑技巧

本例中,需要筛选出“F_销售记录”窗体中付款期在文本框中指定日期
范围之内的记录。

356
Chapter 06 数据查询技巧

◎案例操作

基础操作技巧
01 在窗体中插入“付款期”、 02 为 窗 体 添 加 “ cmd_ 筛 选
“至”文本框和“筛选”按钮。 _Click”事件过程。

03 在“cmd_筛选_Click”事件 04 执行程序过程查看程序运行

控件和对象
过程中添加代码。 效果。

◎过程源代码
源文件\第 6 章\查询指定日期范围内的所有数据记录(2).accdb

对象操作技巧
在事件过程中编写对应的 VBA 代码,连接数据库,判断日期范围是否
输入,设置筛选条件,执行筛选操作,具体的 VBA 代码如下。
'筛选指定日期范围内的记录
Private Sub cmd_筛选_Click()
处理数据格式

Dim cn As New ADODB.Connection


Dim rs As New ADODB.Recordset
Dim sch1 As String
Dim sch2 As String
Dim sch As String
Set cn = CurrentProject.Connection
数据排序技巧

rs.CursorLocation = adUseClient
rs.Open "T_销售记录", cn, adOpenKeyset, adLockOptimistic
'判断是否输入日期上下界,没有输入则将焦点设置到对应文本框中
If txt_下界 = "" Then
txt_下界.SetFocus
数据查询技巧

MsgBox "请输入结束日期"
ElseIf txt_上界 = "" Then
txt_上界.SetFocus
MsgBox "请输入结束日期"
Else
数据编辑技巧

'获取日期
sch1 = "[付款期]>=#" & Me!txt_下界 & "#"
sch2 = "[付款期]<=#" & Me!txt_上界 & "#"
sch = sch1 & " and " & sch2

357
Access VBA 活用范例大辞典

'筛选
基础操作技巧

rs.Filter = sch
'将窗体中的记录集与筛选的记录集同步
Set Me.Recordset = rs
Me.Requery
End If
rs.Close: Set rs = Nothing
控件和对象

cn.Close: Set cn = Nothing


End Sub

◎执行过程
保存编写的 VBA 代码,将“F_窗体记录”窗体的视图模式切换到窗体
对象操作技巧

视图,在文本框中输入日期,单击“筛选”按钮,可以筛选出付款期在指定
日期范围的记录,如图 6-42 所示。
处理数据格式

图 6-42 筛选付款期在指定日期范围的记录
数据排序技巧

211 显示指定的数值范围内的所有数据记录(1) 初 中 高
211 2003 / 2007 / 2010

显示指定的数值范围内的所有数据记录(1)
数据查询技巧

◎同时显示所有查询记录技巧:Filter 属性、OpenRecordset 方法

在 DAO 中,如果要筛选出指定范围内的数值,可以根据实际情况将数
值条件使用 AND、OR 等关键字连接起来。
数据编辑技巧

◎应用实例
素材\第 6 章\显示指定的数值范围内的所有数据记录(1).accdb

本例中,需要在“F_销售记录”窗体中筛选出金额,然后通过文本框指
358
Chapter 06 数据查询技巧

定的范围之内的记录。

基础操作技巧
◎案例操作

01 在窗体中插入两个文本框和 02 为 窗 体 添 加 “ cmd_ 筛 选
“筛选”按钮。 _Click”事件过程。

控件和对象
03 在“cmd_筛选_Click”事件 04 执行程序过程查看程序运行
过程中添加代码。 效果。

◎过程源代码

对象操作技巧
源文件\第 6 章\显示指定的数值范围内的所有数据记录(1).accdb

在事件过程中编写对应的 VBA 代码,判断金额范围是否输入,设置筛


选条件,执行筛选操作,具体的 VBA 代码如下。 处理数据格式

Private Sub cmd_筛选_Click()


Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim sch As String
Dim sch1 As String
Dim sch2 As String
数据排序技巧

Set db = CurrentDb()
Set rs = db.OpenRecordset("T_销售记录", dbOpenDynaset)
'判断是否输入筛选金额上下界
If IsNull(txt_下界) Then
MsgBox "请输入金额下界"
数据查询技巧

txt_下界.SetFocus
ElseIf IsNull(txt_上界) Then
MsgBox "请输入金额上界"
txt_上界.SetFocus
Else
'获取筛选参数
数据编辑技巧

sch1 = "[金额]>=" & txt_下界


sch2 = "[金额]<=" & txt_上界

359
Access VBA 活用范例大辞典

sch = sch1 & " and " & sch2


基础操作技巧

'执行筛选操作
rs.Filter = sch
Set rs = rs.OpenRecordset
'将筛选结果设置到窗体中
Set Me.Recordset = rs
Me.Requery
控件和对象

End If
Set rs = Nothing
Set db = Nothing
End Sub

◎执行过程
对象操作技巧

保存编写的 VBA 代码,将窗体的视图模式切换到窗体视图,在文本框


中输入数值范围,即可筛选出金额在指定范围的记录,如图 6-43 所示。
处理数据格式
数据排序技巧

图 6-43 筛选金额在指定范围的记录

212 显示指定的数值范围内的所有数据记录(2) 初 中 高
212 2003 / 2007 / 2010
数据查询技巧

显示指定的数值范围内的所有数据记录(2)
◎同时显示所有查询记录技巧:Filter 属性、Open 方法、Requery 属性

在 ADO 中,如果需要筛选出指定数值范围内的记录,其方法与筛选指
数据编辑技巧

定日期范围的记录相似,只是不需要使用特定的符号来标识输入的数据为数
值(日期需要使用“#”标识)

360
Chapter 06 数据查询技巧

◎应用实例

基础操作技巧
素材\第 6 章\显示指定的数值范围内的所有数据记录(2).accdb

本例中需要筛选出金额在文本框中指定数值范围之内的记录。

◎案例操作

控件和对象
01 在窗体中插入两个文本框和 02 为 窗 体 添 加 “ cmd_ 筛 选
“筛选”按钮。 Click”事件过程。

03 在“cmd_筛选_Click”事件 04 执行程序过程查看程序运行

对象操作技巧
过程中添加代码。 效果。

◎过程源代码
源文件\第 6 章\显示指定的数值范围内的所有数据记录(2).accdb
处理数据格式

在事件过程中编写对应的 VBA 代码,先连接到数据库,再判断金额范


围是否输入,设置筛选条件,执行筛选操作,具体的 VBA 代码如下。
Private Sub cmd_筛选_Click()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
数据排序技巧

Dim sch1 As String


Dim sch2 As String
Dim sch As String
Set cn = CurrentProject.Connection
rs.CursorLocation = adUseClient
数据查询技巧

rs.Open "T_销售记录", cn, adOpenKeyset, adLockOptimistic


'判断是否输入金额上下界,没有输入则将焦点设置到对应文本框中
If txt_下界 = "" Then
txt_下界.SetFocus
MsgBox "请输入金额下界"
数据编辑技巧

ElseIf txt_上界 = "" Then


txt_上界.SetFocus
MsgBox "请输入金额上界"
Else

361
Access VBA 活用范例大辞典

'获取筛选条件
基础操作技巧

sch1 = "[金额]>=" & Me!txt_下界


sch2 = "[金额]<=" & Me!txt_上界
sch = sch1 & " and " & sch2
'筛选
rs.Filter = sch
'将窗体中的记录集与筛选的记录集同步
控件和对象

Set Me.Recordset = rs
Me.Requery
End If
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
对象操作技巧

End Sub

◎执行过程
保存编写的 VBA 代码,将窗体的视图模式切换到窗体视图,在文本框
中输入数值,即可选出金额在指定数值范围的记录,如图 6-44 所示。
处理数据格式
数据排序技巧

图 6-44 筛选付款期在指定日期范围的记录

213 使用 AND 关键字查询符合条件的所有记录 初 中 高


数据查询技巧

213 2003 / 2007 / 2010

使用 AND 关键字查询符合条件的所有记录
◎同时显示所有查询记录技巧:Filter 属性、OpenRecordset 方法

如果需要筛选出满足多个条件的记录,可以使用 AND 关键字将每一个


数据编辑技巧

条件连接起来。

这些记录需要满足的条件,可以是同一字段,也可以是不同字段。

362
Chapter 06 数据查询技巧

◎应用实例

基础操作技巧
素材\第 6 章\使用 AND 关键字查询符合条件的所有记录.accdb

本例中,需要筛选某个部门中实得工资高于某个数值的记录。

◎案例操作

控件和对象
01 在窗体中插入“部门”、“实 02 为 窗 体 添 加 “ cmd_ 筛 选
得工资>=”文本框和“筛选” _Click”事件过程。
按钮。

对象操作技巧
03 在“cmd_筛选_Click”事件 04 执行程序过程查看程序运行
过程中添加代码。 效果。

◎过程源代码
源文件\第 6 章\使用 AND 关键字查询符合条件的所有记录.accdb
处理数据格式

在事件过程中编写对应的 VBA 代码,判断部门数据和工资数据是否输


入,当都输入后设置筛选条件,执行筛选操作,具体的 VBA 代码如下。
'筛选出满足多个条件的所有记录
数据排序技巧

Private Sub cmd_筛选_Click()


Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim sch As String
Dim sch1 As String
Dim sch2 As String
数据查询技巧

Set db = CurrentDb()
Set rs = db.OpenRecordset("Q_员工工资", dbOpenDynaset)
'判断是否输入筛选条件
If IsNull(txt_部门) Then
MsgBox "请输入欲查询的记录的部门"
数据编辑技巧

txt_部门.SetFocus
ElseIf IsNull(txt_工资) Then
MsgBox "请输入欲查询的实得工资下界"
txt_工资.SetFocus

363
Access VBA 活用范例大辞典

Else
基础操作技巧

'所有条件都输入后,获取筛选条件
sch1 = "[部门] like " & "'*" & txt_部门 & "*'"
sch2 = "[实得工资]>=" & txt_工资
sch = sch1 & " And " & sch2
'筛选
rs.Filter = sch
控件和对象

'将筛选结果保存至当前窗体中
Set rs = rs.OpenRecordset
Set Me.Recordset = rs
Me.Requery
End If
对象操作技巧

Set rs = Nothing
Set db = Nothing
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_员工工资”窗体的视图模式切换到窗体
处理数据格式

视图,在文本框中输入筛选条件,单击“筛选”按钮进行筛选,结果如图 6-45
所示。
数据排序技巧
数据查询技巧

图 6-45 筛选符合多个条件的记录

214 使用 OR 关键字查询符合条件的所有记录 初 中 高
214 2003 / 2007 / 2010

使用 OR 关键字查询符合条件的所有记录
数据编辑技巧

◎同时显示所有查询记录技巧:Filter 属性、OpenRecordset 方法

如果需要筛选出符合多个条件中任意一个条件的记录,可以使用 OR 关

364
Chapter 06 数据查询技巧

键字将所有条件连接起来。

基础操作技巧
◎应用实例
素材\第 6 章\使用 OR 关键字查询符合条件的所有记录.accdb

本例中,需要筛选出“F_员工工资”窗体中,实得工资高于某个值或者
低于某个值的所有记录。

控件和对象
◎案例操作

01 在 窗 体 中 插 入 “ 实 得 工 资 02 为 窗 体 添 加 “ cmd_ 筛 选

>=”“实得工资<=”文本框和 _Click”事件过程。

对象操作技巧
“筛选”按钮。

03 在“cmd_筛选_Click”事件 04 执行程序过程查看程序运行
过程中添加代码。 效果。
处理数据格式

◎过程源代码
源文件\第 6 章\使用 OR 关键字查询符合条件的所有记录.accdb

在事件过程中编写对应的 VBA 代码,判断工资范围数据筛选条件是否


数据排序技巧

输入,设置筛选条件,执行筛选操作,具体的 VBA 代码如下。


'筛选满足多个条件中的一个条件的记录
Private Sub cmd_筛选_Click()
Dim db As DAO.Database
Dim rs As DAO.Recordset
数据查询技巧

Dim sch As String


Dim sch1 As String
Dim sch2 As String
Set db = CurrentDb()
Set rs = db.OpenRecordset("Q_员工工资", dbOpenDynaset)
数据编辑技巧

'判断是否输入筛选条件
If IsNull(txt_工资 1) Then
MsgBox "请输入欲查询条件 1"

365
Access VBA 活用范例大辞典

txt_工资 1.SetFocus
基础操作技巧

ElseIf IsNull(txt_工资 2) Then


MsgBox "请输入欲查询条件 2"
txt_工资 2.SetFocus
Else
'所有条件都输入后,获取筛选条件
sch1 = "[实得工资]<=" & txt_工资 1
控件和对象

sch2 = "[实得工资]>=" & txt_工资 2


sch = sch1 & " Or " & sch2
'筛选
rs.Filter = sch
'将筛选结果保存至当前窗体中
对象操作技巧

Set rs = rs.OpenRecordset
Set Me.Recordset = rs
Me.Requery
End If
Set rs = Nothing
Set db = Nothing
处理数据格式

End Sub

◎执行过程
保存编写的 VBA 代码,将“F_员工工资”窗体的视图模式切换到窗体
视图,在文本框中输入筛选条件,单击“筛选”按钮进行筛选,结果如图 6-46
数据排序技巧

所示。
数据查询技巧
数据编辑技巧

图 6-46 筛选符合多个条件中任意一个的记录

366
Chapter 06 数据查询技巧

215 使用 AND 关键字和 OR 关键字查询符合条件的所有记录


初 中 高
215 2003 / 2007 / 2010

基础操作技巧
使用 AND 关键字和 OR 关键字查询符合条件的所有记录
◎同时显示所有查询记录技巧:Filter 属性、OpenRecordset 方法

在进行记录筛选时,使用 AND 关键字可筛选满足所有条件的记录,使

控件和对象
用 OR 关键字可以筛选满足任一条件的记录。

如果同时使用 AND 关键字和 OR 关键字,可以筛选出满足复杂条件的


记录。

◎应用实例

对象操作技巧
素材\第 6 章\使用 AND 关键字和 OR 关键字查询符合条件的所有记录.accdb

本例中,需要在“F_员工工资”窗体中筛选出两个指定的部门中,实得
工资高于某个值的记录。 处理数据格式

◎案例操作

01 在窗体中插入“部门 1”、
“部 02 为 窗 体 添 加 “ cmd_ 筛 选
门 2”、
“实得工资>=”文本框 _Click”事件过程。
和“筛选”按钮。
数据排序技巧

03 在“cmd_筛选_Click”事件 04 执行程序过程查看程序运行
过程中添加代码。 效果。
数据查询技巧

◎过程源代码
源文件\第 6 章\使用 AND 关键字和 OR 关键字查询符合条件的所有记录.accdb

在事件过程中编写对应的 VBA 代码,判断部门数据和工资数据筛选条


件是否输入,设置筛选条件,执行筛选操作,具体的 VBA 代码如下。
数据编辑技巧

'复杂条件下的筛选
Private Sub cmd_筛选_Click()

367
Access VBA 活用范例大辞典

Dim db As DAO.Database
基础操作技巧

Dim rs As DAO.Recordset
Dim sch As String
Dim sch1 As String
Dim sch2 As String
Dim sch3 As String
'获取记录集
控件和对象

Set db = CurrentDb()
Set rs = db.OpenRecordset("Q_员工工资", dbOpenDynaset)
'判断是否输入筛选条件
If IsNull(txt_部门 1) Then
MsgBox "请输入欲查询的第一个部门"
对象操作技巧

txt_部门 1.SetFocus
ElseIf IsNull(txt_部门 2) Then
MsgBox "请输入欲查询的第二个部门"
txt_部门 2.SetFocus
ElseIf IsNull(txt_工资) Then
MsgBox "请输入欲查询的工资界限"
处理数据格式

txt_工资.SetFocus
Else
'所有条件都输入后,获取筛选条件
sch1 = "[部门] like " & "'*" & txt_部门 1 & "*'"
sch2 = "[部门] like " & "'*" & txt_部门 2 & "*'"
数据排序技巧

sch3 = "[实得工资]>=" & txt_工资


'使用 and 和 or 关键字连接筛选条件
sch = "(" & sch1 & " Or " & sch2 & ")" & "and" & sch3
'筛选
rs.Filter = sch
'将筛选结果保存至当前窗体中
数据查询技巧

Set rs = rs.OpenRecordset
Set Me.Recordset = rs
Me.Requery
End If
Set rs = Nothing
数据编辑技巧

Set db = Nothing
End Sub

368
Chapter 06 数据查询技巧

◎执行过程

基础操作技巧
保存编写的 VBA 代码,将“F_员工工资”窗体的视图模式切换到窗体
视图,在文本框中输入筛选条件,单击“筛选”按钮进行筛选,结果如图 6-47
所示。

控件和对象
对象操作技巧
图 6-47 筛选符合复杂条件的记录

216 将筛选的所有数据按照指定顺序排序 初 中 高
216 2003 / 2007 / 2010

将筛选的所有数据按照指定顺序排序
处理数据格式

◎同时显示所有查询记录技巧:Filter 属性、Sort 属性

在 DAO 中,如果要对筛选出的记录进行排序,可以在使用 Filter 属性筛


选之后,再使用 Sort 属性对筛选出的数据进行排序。
数据排序技巧

◎应用实例
素材\第 6 章\将筛选的所有数据按照指定顺序排序.accdb

本例中,需要筛选出工资大于指定数据的记录,并对筛选出的数据按照
数据查询技巧

指定字段排序。

◎案例操作

01 在窗体中建立“实得工资>=” 02 为窗体添加“cmd_筛选排序
数据编辑技巧

文本框、
“部门”组合框和“筛 _Click”事件过程。
选”按钮。

369
Access VBA 活用范例大辞典

03 在“cmd_筛选排序_Click” 04 执行程序过程查看程序运行
基础操作技巧

事件过程中添加代码。 效果。

◎过程源代码
源文件\第 6 章\将筛选的所有数据按照指定顺序排序.accdb
控件和对象

在事件过程中编写对应的 VBA 代码,判断筛选和排序条件是否输入,


先对记录集进行筛选,然后对筛选的结果进行排序,具体的 VBA 代码如下。
'筛选记录并对筛选结果进行排序
Private Sub cmd_筛选排序_Click()
对象操作技巧

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim sch As String
'获取记录集
Set db = CurrentDb()
处理数据格式

Set rs = db.OpenRecordset("Q_员工工资", dbOpenDynaset)


'判断是否输入筛选条件
If IsNull(txt_工资) Then
MsgBox "请输入欲查询的工资下限"
txt_工资.SetFocus
'判断是否输入排序关键字
数据排序技巧

ElseIf IsNull(cmb_部门) Then


MsgBox "请选择排序的字段"
cmb_部门.SetFocus
Else
'所有条件都输入后,获取筛选条件
数据查询技巧

sch = "[实得工资]>=" & txt_工资


'筛选
rs.Filter = sch
'排序
rs.Sort = cmb_部门
'将结果保存至当前窗体中
数据编辑技巧

Set rs = rs.OpenRecordset
Set Me.Recordset = rs

370
Chapter 06 数据查询技巧

Me.Requery

基础操作技巧
End If
Set rs = Nothing
Set db = Nothing
End Sub

◎执行过程

控件和对象
保存编写的 VBA 代码,将“F_员工工资”窗体的视图模式切换到窗体
视图,在文本框中输入筛选条件,在组合框中选择排序字段,单击“筛选”
按钮,结果如图 6-48 所示。

对象操作技巧
处理数据格式

图 6-48 将筛选的结果排序

217 在打开的窗体中显示所有查询记录 初 中 高
数据排序技巧

217 2003 / 2007 / 2010

在打开的窗体中显示所有查询记录
◎通过编写 SQL 语句查询数据:Where 语句、OpenForm 方法

通过编写 SQL 语句来筛选记录,需要使用 Where 语句来指定筛选的条


数据查询技巧

件,其用法与 DAO 和 ADO 中的 Filter 属性基本相似。

如果要打开已经创建的窗体并在其中显示筛选的结果,可以使用 DoCmd
对象的 OpenForm 方法,并在其 FilteName 参数中设置筛选参数,其具体的
语法格式为:
数据编辑技巧

DoCmd.OpenForm [窗体名], ,[SQL 筛选语句]

371
Access VBA 活用范例大辞典

◎应用实例
基础操作技巧

素材\第 6 章\在打开的窗体中显示所有查询记录.accdb

本例中需要在单击“F_控制窗体”窗体中的“财务部”按钮时,打开“F_
员工工资”窗体,并在其中显示所有部门为财务部的记录。

◎案例操作
控件和对象

01 插入“F_控制窗体”窗体, 02 为窗体添加“cmd_ 财务部


并在其中插入“财务部”按钮。 _Click”事件过程。
对象操作技巧

03 在“cmd_财务部_Click”事 04 执行程序过程查看程序运行
件过程中添加代码。 效果。

◎过程源代码
源文件\第 6 章\在打开的窗体中显示所有查询记录.accdb
处理数据格式

在事件过程中编写对应的 VBA 代码,设置用于筛选的 SQL 语句,打开


窗体并显示筛选结果,具体的 VBA 代码如下。
'打开窗体并显示财务部的记录
数据排序技巧

Private Sub cmd_财务部_Click()


Dim sch As String
'设置用于筛选的 SQL 语句
sch = "select * from Q_员工工资 where 部门='财务部'"
'打开窗体时执行筛选操作
DoCmd.OpenForm "F_员工工资", , sch
数据查询技巧

End Sub

◎执行过程
保存编写的 VBA 代码,将“F_控制窗体”窗体的视图模式切换到窗体
视图,单击“财务部”按钮,可打开“F_员工工资”窗体,在其中显示了所
数据编辑技巧

有部门为财务部的记录,如图 6-49 所示。

372
Chapter 06 数据查询技巧

基础操作技巧
控件和对象
图 6-49 单击按钮打开窗体显示所有部门为财务部的记录

218 在下拉列表中设置筛选条件查询所有记录 初 中 高
218 2003 / 2007 / 2010

对象操作技巧
在下拉列表中设置筛选条件查询所有记录
◎通过编写 SQL 语句查询数据:Where 语句、RecordSource 属性

SQL 语句中也可以使用控件名称,但是需要使用文本连接符(&)来接。
处理数据格式

如果控件的值为字符串,则需要使用引号括起来。

通过 SQL 筛选数据后,可通过窗体的 RecordSource 属性实现数据的筛


选,其具体的语法格式为:
[窗体].RecordSource=[SQL 筛选语句]
数据排序技巧

◎应用实例
素材\第 6 章\在下拉列表中设置筛选条件查询所有记录.accdb

本例中,在“F_员工工资”窗体的“部门”下拉列表框中设置筛选部门
之后,单击筛选按钮筛选出组合框中选择的部门的记录。
数据查询技巧

◎案例操作

01 在窗体中插入“部门”组合 02 为 窗 体 添 加 “ cmd_ 筛 选
框和“筛选”按钮。 _Click”事件过程。
数据编辑技巧

03 在“cmd_筛选_Click”事件 04 执行程序过程查看程序运行
过程中添加代码。 效果。

373
Access VBA 活用范例大辞典

◎过程源代码
基础操作技巧

源文件\第 6 章\在下拉列表中设置筛选条件查询所有记录.accdb

在事件过程中编写对应的 VBA 代码,设置用于筛选的 SQL 语句,具体


的 VBA 代码如下。
'在 SQL 中引用控件
控件和对象

Private Sub cmd_筛选_Click()


Dim sch As String
'设置用于筛选记录的 SQL 语句
sch = "select * from Q_员工工资 where [部门]= '" & cmb_部门 & "' "
'使用 SQL 语句设置当前窗体的 RecordSource
对象操作技巧

Me.RecordSource = sch
'重绘窗体
Me.Requery
End Sub

◎执行过程
处理数据格式

保存编写的 VBA 代码,将“F_员工工资”窗体的视图模式切换到窗体


视图,选择部门,单击“筛选”按钮,结果如图 6-50 所示。
数据排序技巧
数据查询技巧

图 6-50 单击按钮筛选所有设计部的员工工资记录

219 在文本框中设置筛选条件查询所有记录 初 中 高
219 2003 / 2007 / 2010

在文本框中设置筛选条件查询所有记录
数据编辑技巧

◎通过编写 SQL 语句查询数据:Where 语句、RecordSource 属性

在 SQL 语句中使用文本框名称与使用组合框名称的方法相似,但考虑到

374
Chapter 06 数据查询技巧

在文本框中输入文本的随意性,需要在文本框名的前后加上通配符。

基础操作技巧
为了使得输入更简单,可以将 SQL 语句从 Where 语句处分为两段,每
一段使用一个双引号括起来。

◎应用实例
素材\第 6 章\在文本框中设置筛选条件查询所有记录.accdb

控件和对象
本例中,需要在“F_员工工资”窗体中筛选出部门名称中包含文本框中
文本的记录。

◎案例操作

对象操作技巧
01 在窗体中插入“部门”文本 02 为 窗 体 添 加 “ cmd_ 筛 选
框和“筛选”按钮。 _Click”事件过程。

03 在“cmd_筛选_Click”事件 04 执行程序过程查看程序运行
处理数据格式

过程中添加代码。 效果。

◎过程源代码
源文件\第 6 章\在文本框中设置筛选条件查询所有记录.accdb
数据排序技巧

在事件过程中编写对应的 VBA 代码,判断部门数据是否设置,将设置


用于筛选的 SQL 语句,具体的 VBA 代码如下。
'根据文本框中输入的内容进行筛选
Private Sub cmd_筛选_Click()
数据查询技巧

Dim sch As String


If IsNull(txt_部门) Then
MsgBox "请输入筛选条件"
txt_部门.SetFocus
Else
'设置用于筛选记录的 SQL 语句
数据编辑技巧

sch = "select * from Q_员工工资 where" & _


"[部门] like '*" & txt_部门 & "*'"

375
Access VBA 活用范例大辞典

'使用 SQL 语句设置当前窗体的 RecordSource


基础操作技巧

Me.RecordSource = sch
Me.Requery
End If
End Sub

◎执行过程
控件和对象

保存编写的 VBA 代码,将“F_员工工资”窗体的视图模式切换到窗体


视图,在文本框中输入筛选的内容,单击“筛选”按钮,结果如图 6-51 所示。
对象操作技巧
处理数据格式

图 6-51 单击按钮筛选所有销售部的员工工资记录
数据排序技巧

220 快速恢复筛选结果 初 中 高
220 2003 / 2007 / 2010

快速恢复筛选结果
◎通过编写 SQL 语句查询数据:If…Then…Else 语句
数据查询技巧

使用 SQL 语句筛选出记录之后,如果想要恢复显示所有的记录,可以使
用 SQL 语句来实现。只需使用 SELECT…FROM 语句即可,WHERE 语句直
接省略。

本例可以通过 If…Then…Else 语句根据组合框中的选项选择 SQL 语句,


数据编辑技巧

从而实现选择某个选项时显示全部记录。

376
Chapter 06 数据查询技巧

◎应用实例

基础操作技巧
素材\第 6 章\快速恢复筛选结果.accdb

本例中,需要能够在组合框中选择选项后,可以筛选出该选项指定部门
的记录。当选择“显示全部”选项后,显示所有的记录(即恢复筛选之前的
状态)

控件和对象
◎案例操作

01 在“F_员工工资”窗体中插 02 为 窗 体 添 加 “ cmb_ 部 门
入“部门”组合框。 _AfterUpdate”事件过程。

对象操作技巧
03 在“cmb_部门_AfterUpdate” 04 执行程序过程查看程序运行
事件过程中添加代码。 效果。

◎过程源代码
处理数据格式

源文件\第 6 章\快速恢复筛选结果.accdb

在事件过程中编写对应的 VBA 代码,根据选择选项追加 SQL 语句,具


体的 VBA 代码如下。
数据排序技巧

'根据组合框的选项追加代码,实现选择“显示全部”选项时显示全部记录
Private Sub cmb_部门_AfterUpdate()
Dim sch1 As String
Dim sch2 As String
sch1 = "select * from Q_员工工资"
'根据选项选择追加的代码
数据查询技巧

If cmb_部门 = "显示全部" Then


sch2 = ""
Else
sch2 = " where [部门] like '" & cmb_部门 & "'"
End If
数据编辑技巧

'追加代码
sch1 = sch1 & sch2
'设置当前窗体的 RecordSource

377
Access VBA 活用范例大辞典

Me.RecordSource = sch1
基础操作技巧

Me.Requery
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_员工工资”窗体的视图模式切换到窗体
视图,在组合框中选择“显示全部”选项,可以显示所有记录(即没有进行
控件和对象

筛选的效果)
,如图 6-52 所示。
对象操作技巧
处理数据格式

图 6-52 显示所有的记录

221 使用 Where 语句实现多条件筛选 初 中 高


221 2003 / 2007 / 2010

使用 Where 语句实现多条件筛选
数据排序技巧

◎通过编写 SQL 语句查询数据:If…Then…Else 语句

如果需要实现多条件筛选,且不要求每一个筛选条件都必须输入。可通
过 If…Then…Else 语句和 Where 语句根据设置的条件来逐步追加筛选条件,
数据查询技巧

从而实现多条件筛选。

◎应用实例
素材\第 6 章\使用 Where 语句实现多条件筛选.accdb

本例中,需要实现通过在组合框和文本框设置一个或几个筛选条件,然
数据编辑技巧

后根据设置的条件进行筛选。

378
Chapter 06 数据查询技巧

◎案例操作

基础操作技巧
01 在窗体中插入所需的各种控 02 为 窗 体 添 加 “ cmd_ 筛 选
件,如组合框、文本框等。 _Click”事件过程。

03 在“cmd_筛选_Click”事件 04 执行程序过程查看程序运行

控件和对象
过程中添加代码。 效果。

◎过程源代码
源文件\第 6 章\使用 Where 语句实现多条件筛选.accdb

对象操作技巧
在事件过程中编写对应的 VBA 代码,根据设置的筛选条件追加 SQL 语
句,具体的 VBA 代码如下。
'通过追加 SQL 语句实现多条件筛选
Private Sub cmd_筛选_Click()
处理数据格式

Dim sch1 As String


Dim sch2 As String
Dim sch3 As String
'设置字符串的初始值
sch1 = "select * from Q_员工工资 where "
sch2 = ""
数据排序技巧

sch3 = " And "


'判断部门筛选条件是否为空,不为空时追加筛选条件
If cmb_部门 <> "" Then
sch2 = sch2 & "[部门] like '" & cmb_部门 & "'"
End If
数据查询技巧

If cmb_性别 <> "" Then


'判断 sch2 是否为空,为空则追加 AND 关键字
If sch2 <> "" Then
sch2 = sch2 & sch3
End If
数据编辑技巧

sch2 = sch2 & "[性别] like '" & cmb_性别 & "'"
End If

379
Access VBA 活用范例大辞典

If txt_提成 <> "" Then


基础操作技巧

If sch2 <> "" Then


sch2 = sch2 & sch3
End If
sch2 = sch2 & "[提成] >=" & txt_提成
End If
If txt_基本工资 <> "" Then
控件和对象

If sch2 <> "" Then


sch2 = sch2 & sch3
End If
sch2 = sch2 & "[基本工资] >=" & txt_基本工资
End If
对象操作技巧

If txt_实得工资 <> "" Then


If sch2 <> "" Then
sch2 = sch2 & sch3
End If
sch2 = sch2 & "[实得工资] >=" & txt_实得工资
End If
处理数据格式

'判断 sch2 是否为空,为空则表示一个筛选条件也没有设置


If sch2 = "" Then
MsgBox "没有输入筛选条件"
Exit Sub
End If
数据排序技巧

'根据输入的筛选条件得到最终用于筛选数据的 SQL 语句
sch1 = sch1 & sch2
'通过 RecordSource 属性和 SQL 语句实现筛选
Me.RecordSource = sch1
Me.Requery
End Sub
数据查询技巧

◎执行过程
保存编写的 VBA 代码,将“F_员工工资”窗体的视图模式切换到窗体
视图,设置筛选条件,单击“筛选”按钮,可以得到所有符合筛选条件的记
录,如图 6-53 所示。
数据编辑技巧

380
Chapter 06 数据查询技巧

基础操作技巧
控件和对象
图 6-53 使用 Where 语句实现多条件筛选

222 使用 Where 语句在打开的窗体显示查询结果 初 中 高


222 2003 / 2007 / 2010

使用 Where 语句在打开的窗体显示查询结果

对象操作技巧
◎通过编写 SQL 语句查询数据:If…Then…Else 语句、OpenForm 方法

如果需要在一个窗体中实现对表或者查询中记录的查询,并在另一个窗
口之中显示查询结果。
处理数据格式

可以使用 DoCmd 对象的 OpenForm 方法,并将其 FilterName 参数设置


为用于筛选的 SQL 语句。

◎应用实例
素材\第 6 章\使用 Where 语句在打开的窗体显示查询结果.accdb
数据排序技巧

本例中,需要实现在“F_查询”窗体中设置查询条件查询“Q_员工工资”
中的记录,并将查询的结果在打开的“F_员工工资”窗体中显示出来。

◎案例操作
数据查询技巧

01 在窗体中插入所需的各种控 02 为“F_查询”窗体添加“cmd_
件,如组合框、文本框等。 查询_Click”事件过程。

03 在“cmd_查询_Click”事件 04 执行程序过程查看程序运行
数据编辑技巧

过程中添加代码。 效果。

381
Access VBA 活用范例大辞典

◎过程源代码
基础操作技巧

源文件\第 6 章\使用 Where 语句在打开的窗体显示查询结果.accdb

在事件过程中编写对应的 VBA 代码,根据设置的筛选条件追加 SQL 语


句,打开窗体显示查询结果,具体的 VBA 代码如下。
'设置复杂的查询条件,并在新的窗口中显示查询结果
控件和对象

Private Sub cmd_查询_Click()


Dim Sch1 As String
Dim Sch2 As String
Dim Sch3 As String
'为字符串设置初始值
对象操作技巧

Sch1 = "select * from Q_员工工资 where "


Sch2 = ""
Sch3 = " And "
If txt_姓名 <> "" Then
Sch2 = Sch2 & "[姓名] like '*" & txt_姓名 & "*'"
End If
处理数据格式

'部门查询条件不为空时执行
If cmb_部门 <> "" Then
'判断字符串字符串变量 Sch2 是否为空,不为空时添加 And 关键字
If Sch2 <> "" Then
Sch2 = Sch2 & Sch3
数据排序技巧

End If
Sch2 = Sch2 & "[部门] like '" & cmb_部门 & "'"
End If
If cmb_性别 <> "" Then
If Sch2 <> "" Then
Sch2 = Sch2 & Sch3
数据查询技巧

End If
Sch2 = Sch2 & "[性别] like '" & cmb_性别 & "'"
End If
If txt_职务 <> "" Then
If Sch2 <> "" Then
数据编辑技巧

Sch2 = Sch2 & Sch3


End If
Sch2 = Sch2 & "[职务] like '*" & txt_职务 & "*'"
End If

382
Chapter 06 数据查询技巧

If txt_提成下界 <> "" Then

基础操作技巧
If Sch2 <> "" Then
Sch2 = Sch2 & Sch3
End If
Sch2 = Sch2 & "[提成] >=" & txt_提成下界
End If
If txt_提成上界 <> "" Then

控件和对象
If Sch2 <> "" Then
Sch2 = Sch2 & Sch3
End If
Sch2 = Sch2 & "[提成] <=" & txt_提成上界
End If

对象操作技巧
If txt_基本下界 <> "" Then
If Sch2 <> "" Then
Sch2 = Sch2 & Sch3
End If
Sch2 = Sch2 & "[基本工资] >=" & txt_基本下界
End If
处理数据格式

If txt_基本上界 <> "" Then


If Sch2 <> "" Then
Sch2 = Sch2 & Sch3
End If
Sch2 = Sch2 & "[基本工资] <=" & txt_基本上界
数据排序技巧

End If
If txt_实得下界 <> "" Then
If Sch2 <> "" Then
Sch2 = Sch2 & Sch3
End If
Sch2 = Sch2 & "[实得工资] >=" & txt_实得下界
数据查询技巧

End If
If txt_实得上界 <> "" Then
If Sch2 <> "" Then
Sch2 = Sch2 & Sch3
End If
数据编辑技巧

Sch2 = Sch2 & "[实得工资] <=" & txt_实得上界


End If
'判断是否一个查询条件也没有输入
If Sch2 = "" Then

383
Access VBA 活用范例大辞典

'没有输入查询条件时,弹出提示信息框,退出程序
基础操作技巧

MsgBox "没有输入筛选条件"
Exit Sub
End If
Sch1 = Sch1 & Sch2
Debug.Print Sch1
DoCmd.OpenForm "F_员工工资", , Sch1
控件和对象

End Sub

◎执行过程
保存编写的 VBA 代码,将“F_查询”窗体的视图模式切换到窗体视图,
设置查询条件,单击“查询”按钮可打开“F_员工工资”窗体,在该窗体中
对象操作技巧

显示了所有的查询结果,如图 6-54 所示。


处理数据格式
数据排序技巧
数据查询技巧

图 6-54 在打开窗体中显示多条件查询结果
数据编辑技巧

384
Chapter 07
数据记录的追加、删除和更新技巧

在 Access 中,对数据库中的数据进行追加、删除和更新,是
最为常见的操作。在使用 VBA 代码操作数据库的时候,也不可
避免地要进行这些操作。
本章将通过不同的案例来展示对数据库中数据的追加、删除
和更新技巧。

▼主要内容
◎追加数据技巧
DoCmd 对象、GoToRecord 属性、Dcount 函数、BeforeInsert 事件……
◎删改数据技巧
Application 对象、SetOption 方法、SELECT…FROM 语句、MAX 函数……
◎通过编写 SQL 语句编辑记录
Update 语句、Exeute 方法、DELETE 语句、RunSQL 方法……

▼涉及案例
◎在数据表追加记录
◎在追加记录时自动添加主键
◎删除第一条数据记
◎删除所有符合指定条件的记录
◎删除指定数值范围内的所有数据记录
◎在数据表中追加查询记录
◎在数据表中新增字段
◎在数据表中修改字段类型
……
Access VBA 活用范例大辞典

223 在数据表追加记录 初 中 高
223
基础操作技巧

2003 / 2007 / 2010

在数据表追加记录
◎追加数据技巧:DoCmd 对象、GoToRecord 属性、acNewRec 常量

如果需要在绑定的窗体中为数据表添加数据,可以通过 DoCmd 对象的


控件和对象

GoToRecord 属性来实现新记录的添加,其具体的语法格式如下所示:
DoCmd.GoToRecord , , acNewRec

◎应用实例
素材\第 7 章\在数据表追加记录.accdb
对象操作技巧

本例需要在 “F_生活健康用品”绑定窗体中单击“新增数据”按钮后,
跳转至数据源表中可以添加新记录的位置,为数据表添加记录。

◎案例操作
处理数据格式

01 创建一个以数据表“生活健 02 在窗体中插入“新增数据”
康用品”为来源的窗体。 按钮。

03 为 “ 员 工 档 案 ” 窗 体 添 加 04 在“cmd_新增_Click”事件
数据排序技巧

“cmd_新增_Click”事件过程。 过程中添加代码。

05 执行程序过程查看程序运行
效果。
数据查询技巧

◎过程源代码
源文件\第 7 章\在数据表追加记录.accdb

在事件过程中编写对应的 VBA 代码,跳转至可以添加新记录的位置,


其具体的 VBA 代码如下。
数据编辑技巧

Private Sub cmd_新增_Click()


DoCmd.GoToRecord , , acNewRec
End Sub

386
Chapter 07 数据记录的追加、删除和更新技巧

◎执行过程

基础操作技巧
保存编写的 VBA 代码,将“F_生活健康用品”窗体的视图模式切换到
窗体视图,单击“新增数据”按钮,输入新增数据信息,打开数据表(如果
数据表已经打开,需要按【F5】键刷新)可以看到新增的记录,如图 7-1
所示。

控件和对象
对象操作技巧
处理数据格式
数据排序技巧

图 7-1 通过窗体新增记录

提示:使用 RunCommand 属性新增记录


数据查询技巧

通过绑定窗体为数据表添加记录,实质上是跳转至数据表中新增记录行,然后在
该行中添加记录。
使用 DoCmd 属性的 RunCommand 属性也可以实现添加新记录的功能,本例
使用该属性的代码如下所示( 源文件\第 7 章\在数据表追加记录.accdb) 。
数据编辑技巧

Private Sub cmd_新增_Click()


DoCmd.RunCommand acCmdRecordsGoToNew
End Sub

387
Access VBA 活用范例大辞典

224 判断新增记录是否已经成功 初 中 高
224
基础操作技巧

2003 / 2007 / 2010

判断新增记录是否已经成功
◎追加数据技巧:DoCmd 对象、GoToRecord 属性、Dcount 函数

如果需要在新增记录之后,通过对话框返回新增记录是否成功,可以通
控件和对象

过判断新增数据前后数据表中的记录条数来实现。

统计记录集中记录的条数,可以通过统计记录集中主键个数来实现,其
具体的语法格式如下所示:
DCount("[主键字段名]", "[表或查询名]")
对象操作技巧

◎应用实例
素材\第 7 章\判断新增记录是否已经成功.accdb

本例需要判断单击“新增记录”按钮之后,判断“生活健康用品”表中
是否添加了新的数据记录。
处理数据格式

◎案例操作

01 创建一个以数据表“生活健 02 在窗体中插入“cmd_新增”
康用品”为来源的窗体。 按钮。
数据排序技巧

03 为 “ 员 工 档 案 ” 窗 体 添 加 04 在“cmd_排序_Click”事件
“cmd_新增_Click”事件过程。 过程中添加代码。
数据查询技巧

05 执行程序过程查看程序运行
效果。

◎过程源代码
源文件\第 7 章\判断新增记录是否已经成功.accdb
数据编辑技巧

在事件过程中编写对应的 VBA 代码,统计单击“新增数据”按钮前后


数据表中记录的条数,通过比较这两个数字的大小判断是否新增了记录,其

388
Chapter 07 数据记录的追加、删除和更新技巧

具体的 VBA 代码如下。

基础操作技巧
'判断单击“新增数据”按钮后是否为数据表中新增了记录
Private Sub cmd_新增_Click()
Dim a As Integer
Dim b As Integer
'得到新增之前的记录数
a = DCount("ID", "生活健康用品")

控件和对象
DoCmd.GoToRecord , , acNewRec
'得到新增之后的记录数
b = DCount("ID", "生活健康用品")
'判断是否新增记录
If b > a Then

对象操作技巧
'记录条数变大,弹出新增记录成功提示
MsgBox "新增记录成功"
Else
'记录条数没变大,弹出没有新增记录提示
MsgBox "没有新增记录"
处理数据格式

End If
End Sub

◎执行过程
保存编写的 VBA 代码,将窗体的视图模式切换到窗体视图,在图 7-2
数据排序技巧

中显示了两种情况下单击“新增数据”按钮的结果。
数据查询技巧
数据编辑技巧

图 7-2 判断单击“新增数据”按钮后是否新增数据

389
Access VBA 活用范例大辞典

225 在追加记录时自动添加主键 初 中 高
225 2003 / 2007 / 2010
基础操作技巧

在追加记录时自动添加主键
◎追加数据技巧:DoCmd 对象、GoToRecord 属性、DoCmd 函数

在数据库的数据表中,一般都会有一个主键。该主键一般为数值型,为
控件和对象

了避免新增的数据不成功(主键重复)
,可以在新增记录时,通过 Dmax()函
数来得到数据表中数值主键的最大值,然后在该值上增加 1 作为新增记录的
主键,其具体的语法格式为:
Me.[主键名] = DMax("[主键名]", "[表或查询名]") + 1
对象操作技巧

◎应用实例
素材\第 7 章\在追加记录时自动添加主键.accdb

本例需要在单击“F_生活健康用品”窗体中的“新增数据”按钮后,窗
体跳转至添加新记录的准备状态,该状态中要求主键名称自动显示,其余的
处理数据格式

位置为空。

◎案例操作

01 创建一个以数据表“生活健 02 在窗体中插入“新增数据”
数据排序技巧

康用品”为来源的窗体。 按钮。

03 为 窗 体 添 加 “ cmd_ 新 增 04 在“cmd_新增_Click”事件
_Click”事件过程。 过程中添加代码。
数据查询技巧

05 执行程序过程查看程序运行
效果。

◎过程源代码
数据编辑技巧

源文件\第 7 章\在追加记录时自动添加主键.accdb

在事件过程中编写对应的 VBA 代码,跳转至可以添加新记录的位置,

390
Chapter 07 数据记录的追加、删除和更新技巧

自动获取主键,其具体的 VBA 代码如下。

基础操作技巧
'添加新记录时自动获取数值型主键
Private Sub cmd_新增_Click()
'跳转至添加新记录出
DoCmd.GoToRecord , , acNewRec
'自动获取主键
Me.ID = DMax("ID", "生活健康用品") + 1

控件和对象
End Sub

◎执行过程
保存编写的 VBA 代码,将窗体的视图模式切换到窗体视图,单击“新

对象操作技巧
增数据”按钮,可以自动获取数值型主键,如图 7-3 所示。

处理数据格式

图 7-3 新建记录时自动获取主键

提示:使用本例中的方法的注意事项
数据排序技巧

如果数据表中主键的数据类型为自动编号,则本例中的方法不可用。但是新建记
录时 ID 不可修改,Access 将自动为其编号。
如果连续多次单击“新增数据”按钮,就会添加一些只含有 ID 的记录。
数据查询技巧

226 确认是否需要追加记录 初 中 高
226 2003 / 2007 / 2010

确认是否需要追加记录
◎追加数据技巧:BeforeInsert 事件、MsgBox()函数
数据编辑技巧

如果需要在追加记录前,通过对话框的形式确认是否需要追加记录,可
以使用窗体的 BeforeInsert 事件。BeforeInsert 事件发生在为新记录输入第一
个字符的时候,其具体的语法格式为:

391
Access VBA 活用范例大辞典

Private Sub Form_BeforeInsert(Cancel As Integer)


基础操作技巧

[数据插入之前执行的代码]
End Sub
在使用 MsgBox()函数得到反馈的结果时,可以使用一个字符串变量来保
存反馈的结果,其具体的语法格式如下所示:
[字符串变量] = MsgBox("[对话框说明文字]", [显示按钮])
控件和对象

在得到对话框反馈的结果之后,可以使用 If…Then…Else 语句根据反馈


的结果做出适当的处理,其具体的语法格式为:
If [字符串变量] = [按钮代码或值] Then
[单击该按钮处理代码]
对象操作技巧

Else
[单击另一个按钮处理代码]
End If
处理数据格式

◎应用实例
素材\第 7 章\确认是否需要追加记录.accdb

在绑定窗体中操作数据记录时,不小心就会在数据表中添加不必要的数
据。本例中就需要通过在数据库中添加一段代码,以实现在数据表或查询中
数据排序技巧

添加新数据时,会打开提示对话框提示是否需要添加数据,从而避免添加不
必要的记录。

◎案例操作

01 为窗体添加“Form_Before 02 在“Form_BeforeInsert”事件
数据查询技巧

Insert”事件过程。 过程中添加对话框确认代码。

03 执行程序过程查看程序运行
效果。
数据编辑技巧

392
Chapter 07 数据记录的追加、删除和更新技巧

◎过程源代码

基础操作技巧
源文件\第 7 章\确认是否需要追加记录.accdb

在事件过程中编写对应的 VBA 代码,并根据选择按钮处理结果,其具


体的 VBA 代码如下。
'通过对话框确认是否需要为数据表添加新的记录

控件和对象
Private Sub Form_BeforeInsert(Cancel As Integer)
Dim Msg As Integer
'获取对话框选择按钮信息
Msg = MsgBox("需要追加新的数据记录吗?", vbOKCancel)
'如果选择“取消”按钮,则不追加记录

对象操作技巧
If Msg = vbCancel Then
Cancel = True
End If
End Sub

◎执行过程
处理数据格式

保存编写的 VBA 代码,将“F_生活健康用品”窗体的视图模式切换到


窗体视图,在任意文本框中输入数据,打开提示对话框,单击“确定”按钮
后,即可开始追加数据记录,如图 7-4 所示。
数据排序技巧
数据查询技巧
数据编辑技巧

图 7-4 确认是否需要追加数据

393
Access VBA 活用范例大辞典

227 在非绑定窗体追加记录(1) 初 中 高
227
基础操作技巧

2003 / 2007 / 2010

在非绑定窗体追加记录(1)
◎追加数据技巧:AddNew 方法、Update 方法

在绑定窗口中新增数据,有着许多不便,且容易出现误操作。可以考虑
控件和对象

使用非绑定窗口来实现记录的追加。

如果使用 DAO 新增记录,可以使用 AddNew 方法和 Update 方法,其具


体的语法格式如下所示:
[DAO 记录集].AddNew
对象操作技巧

[DAO 记录集]![字段名]= Me![对应的文本框]


……
[DAO 记录集].Update

◎应用实例
处理数据格式

素材\第 7 章\在非绑定窗体追加记录(1).accdb

本例需要在非绑定窗口“F_生活健康用品”中输入需要录入的记录,然
后单击“新增数据”按钮,实现将“F_生活健康用品”窗口中输入的信息录
入到数据表“生活健康用品”中。
数据排序技巧

◎案例操作

01 在“F_生活健康用品”窗体 02 在“F_生活健康用品”窗体
中建立输入文本框,其命名为 中插入“新增数据”按钮。
数据查询技巧

“txt_字段名”

03 为 窗 体 添 加 “ cmd_ 新 增 04 在“cmd_新增_Click”事件
_Click”事件过程。 过程中添加程序代码。
数据编辑技巧

05 切换至窗体视图查看程序运
行效果。

394
Chapter 07 数据记录的追加、删除和更新技巧

◎过程源代码

基础操作技巧
源文件\第 7 章\在非绑定窗体追加记录(1).accdb

在事件过程中编写对应的 VBA 代码,录入数据记录,判断主键是否为


空,更新数据,具体的 VBA 代码如下。
'使用 DAO 在非绑定窗体中为数据表新增记录

控件和对象
Private Sub cmd_新增_Click()
Dim Db As DAO.Database
Dim Rs As DAO.Recordset
'得到“生活健康用品”数据表中的数据集
Set Db = CurrentDb()

对象操作技巧
Set Rs = Db.OpenRecordset("生活健康用品", dbOpenDynaset)
'新增记录
Rs.AddNew
Rs!ID = Me!txt_ID
Rs!商品名称 = Me!txt_商品名称
Rs!条形码 = Me!txt_条形码
处理数据格式

Rs!供应价 = Me!txt_供应价
Rs!零售价 = Me!txt_零售价
Rs!月销量 = Me!txt_月销量
'判断是否输入主键,主键为空时打开提示对话框
If IsNull(txt_ID) Then
数据排序技巧

MsgBox "没输入主键"
Else
'更新记录
Rs.Update
'更新记录后弹出已经新增记录提示
MsgBox "已新增"
数据查询技巧

End If
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_生活健康用品”窗体的视图模式切换到
数据编辑技巧

窗体视图,在窗体中输入欲新增的记录数据,单击“新增数据”按钮,弹出
“已新增”提示信息,打开数据表或切换到已打开的数据表,然后按【F5】
键刷新,即可查看到新添加的记录,如图 7-5 所示。

395
Access VBA 活用范例大辞典
基础操作技巧
控件和对象
对象操作技巧

图 7-5 使用非绑定窗体新增记录

228 在非绑定窗体追加记录(2) 初 中 高
228 2003 / 2007 / 2010
处理数据格式

在非绑定窗体追加记录(2)
◎追加数据技巧:Open 方法、AddNew 方法、Update 方法

使用 ADO 在窗体中为数据表增加记录,与使用 DAO 的方法相似,都是


数据排序技巧

使用 AddNew 方法和 Update 方法来实现数据的追加与更新。

在 ADO 中,得到数据表中的数据集的方法采用的是 Open 方法,其具体


的语法格式如下所示:
[ADO 的记录集].Open "[表或查询名]",[ADO 连接], _
数据查询技巧

adOpenKeyset, adLockOptimistic

◎应用实例
素材\第 7 章\在非绑定窗体追加记录(2).accdb

本例需要在非绑定窗体“F_生活健康用品”中输入需要录入的信息之后,
数据编辑技巧

单击“新增数据”按钮将窗体中输入的数据录入“生活健康用品”数据表中。

要求 ID 自动输入并可更改,必须输入商品名称,否则输入的数据是不

396
Chapter 07 数据记录的追加、删除和更新技巧

合法的。

基础操作技巧
◎案例操作

01 在非绑定窗体“F_生活健康 02 在“F_生活健康用品”窗体
用品”中建立输入文本框。 中插入按钮“新增数据”。

控件和对象
03 在窗体中添加“cmd_ 新增 04 在“cmd_新增_Click”事件
_Click”事件过程。 过程中添加程序代码。

05 切换至窗体视图查看程序运

对象操作技巧
行效果。

◎过程源代码
源文件\第 7 章\在非绑定窗体追加记录(2).accdb
处理数据格式

在事件过程中编写对应的 VBA 代码,获取新增的数值主键,新增记录,


判断商品名称是否输入,更新记录集,具体的 VBA 代码如下。
'通过 ADO 在非绑定窗体中卫数据表新增记录
Private Sub cmd_新增_Click()
数据排序技巧

Dim cn As New ADODB.Connection


Dim rs As New ADODB.Recordset
Set cn = CurrentProject.Connection
rs.Open "生活健康用品", cn, adOpenKeyset, adLockOptimistic
Me!txt_ID = DMax("ID", "生活健康用品") + 1
数据查询技巧

'新增记录
rs.AddNew
rs!ID = Me!txt_ID
rs!商品名称 = Me!txt_商品名称
rs!条形码 = Me!txt_条形码
rs!供应价 = Me!txt_供应价
数据编辑技巧

rs!零售价 = Me!txt_零售价
rs!月销量 = Me!txt_月销量
'判断是否输入数据,以商品名称的输入为参考

397
Access VBA 活用范例大辞典

If IsNull(txt_商品名称) Then
基础操作技巧

MsgBox "没输入数据"
Else
'更新记录
rs.Update
MsgBox "已新增"
End If
控件和对象

End Sub

◎执行过程
保存编写的 VBA 代码,将窗体的视图模式切换到窗体视图,在窗体中输入
欲新增的记录,单击按钮,弹出“已新增”的提示,打开数据表或切换到已打
对象操作技巧

开的数据表,然后按【F5】键刷新,即可查看到添加的记录,如图 7-6 所示。


处理数据格式
数据排序技巧

图 7-6 使用非绑定窗体新增记录
数据查询技巧

229 删除第一条数据记录 初 中 高
229 2003 / 2007 / 2010

删除第一条数据记录
数据编辑技巧

◎删改数据技巧:DoCmd 对象、RunCommand 方法

如果需要删除第一条数据记录,可以先跳转至第一条记录,再使用

398
Chapter 07 数据记录的追加、删除和更新技巧

DoCmd 对象的 RunCommand 方法,将其参数设置为 acCmdDeleteRecord,其

基础操作技巧
具体的语法格式如下所示:
DoCmd.RunCommand acCmdDeleteRecord

◎应用实例
素材\第 7 章\删除第一条数据记录.accdb

控件和对象
本例需要在窗体“F_生活用品”中显示“生活健康用品”表中的第一条
记录,并且可通过单击“删除第一条”按钮删除该条记录。

◎案例操作

对象操作技巧
01 在窗体“F_生活用品”中添 02 在窗体中添加“cmd_删第一
加按钮“删除第一条”。 条_Click”事件过程。

03 在“cmd_删第一条_Click” 04 切换至窗体视图查看程序运
处理数据格式

事件过程中添加程序代码。 行效果。

◎过程源代码
源文件\第 7 章\删除第一条数据记录.accdb
数据排序技巧

在事件过程中编写对应的 VBA 代码,跳转至数据表“生活健康用品”


的第一条记录,删除该记录(系统自动打开删除提示对话框)
,当选择取消删
除时,跳转至程序的最后退出程序,具体的 VBA 代码如下。
'删除数据表“生活健康用品”的第一条记录
数据查询技巧

Private Sub cmd_删第一条_Click()


On Error GoTo 退出
'跳转至第一条记录
DoCmd.GoToRecord , , acFirst
'删除第一条记录
DoCmd.RunCommand acCmdDeleteRecord
数据编辑技巧

'单击“否”按钮时,退出程序
退出:
End Sub

399
Access VBA 活用范例大辞典

◎执行过程
基础操作技巧

保存编写的 VBA 代码,将“F_生活健康用品”窗体的视图模式切换到


窗体视图,单击“删除第一条”按钮,根据提示操作即可删除第一条记录,
如图 7-7 所示。
控件和对象
对象操作技巧
处理数据格式

图 7-7 在绑定窗体中删除第一条记录
数据排序技巧

230 删除最后一条数据记录 初 中 高
230 2003 / 2007 / 2010

删除最后一条数据记录
◎删改数据技巧:DoCmd 对象、RunCommand 方法
数据查询技巧

如果需要删除最后一条记录,可以先跳转至最后一条记录,然后使用
DoCmd 对象的 RunCommand 方法,并将其参数设置为 acCmdDeleteRecord。

◎应用实例
数据编辑技巧

素材\第 7 章\删除最后一条数据记录.accdb

本例需要在窗体“F_生活用品”中显示“生活健康用品”表中的最后一

400
Chapter 07 数据记录的追加、删除和更新技巧

条记录,并且可以通过单击“删除最后一条”按钮删除该条记录。

基础操作技巧
◎案例操作

01 在窗体“F_生活用品”中添 02 在窗体中添加“cmd_删最后
加 “删除最后一条”按钮。 _Click”事件过程。

控件和对象
03 在“cmd_删最后_Click”事 04 切换至窗体视图查看程序运
件过程中添加程序代码。 行效果。

◎过程源代码

对象操作技巧
源文件\第 7 章\删除最后一条数据记录.accdb

在事件过程中编写对应的 VBA 代码,具体的 VBA 代码如下。


'删除数据表“生活健康用品”最后一条记录
处理数据格式

Private Sub cmd_删最后_Click()


On Error GoTo 退出
'跳转至最后一条记录
DoCmd.GoToRecord , , acLast
DoCmd.RunCommand acCmdDeleteRecord
MsgBox "已删除"
数据排序技巧

'取消删除时的处理
退出:
End Sub

◎执行过程
数据查询技巧

保存编写的 VBA 代码,将窗体的视图模式切换到窗体视图,单击“删


除最后一条”按钮,根据提示操作可删除最后一条记录,如图 7-8 所示。
数据编辑技巧

图 7-8 在绑定窗体中删除最后一条记录

401
Access VBA 活用范例大辞典
初 中 高
231删除指定位置的数据记录
231 2003 / 2007 / 2010
基础操作技巧

删除指定位置的数据记录
◎删改数据技巧:DoCmd 对象、RunCommand 方法

删除指定位置的代码,可以分为两步来完成。第一步通过输入的参数跳
转至指定的记录,第二步删除记录。
控件和对象

第一步跳转至指定记录,可以在文本框的 AfterUpdate 事件中使用


DoCmd 对象的 GoToRecord 方法来实现,其具体的语法格式如下所示:
Private Sub [文本框名]_AfterUpdate()
DoCmd.GoToRecord , , acGoTo,[文本框名称]
对象操作技巧

End Sub
第二步删除当前记录,
可使用 DoCmd 对象的 RunCommand 方法来实现。

◎应用实例
处理数据格式

素材\第 7 章\删除指定位置的数据记录.accdb

本例需要在“F_生活用品”窗体中删除“生活健康用品”数据表中指定
条数的记录。

在文本框中输入一个数字之后,窗体中即刻显示该条数据,然后单击“删
数据排序技巧

除”按钮即可删除该条记录。

◎案例操作

01 在绑定窗体中插入文本框。 02 为 窗 体 添 加 “ txt_ 记 录
数据查询技巧

_AfterUpdate”事件过程。

03 在 “ txt_ 记 录 _AfterUpdate” 04 在窗体中插入“删除”按钮。


事件过程中添加程序代码。
数据编辑技巧

05 为 窗 体 添 加 “ cmd_ 删 除 06 在“cmd_删除_Click”事件
_Click”事件过程。 过程中添加程序代码。

402
Chapter 07 数据记录的追加、删除和更新技巧

07 切换至窗体视图查看程序运

基础操作技巧
行效果。

◎过程源代码
源文件\第 7 章\删除指定位置的数据记录.accdb

控件和对象
在对应的事件过程中编写 VBA 代码,第一个事件过程为文本框中的数
据关系之后执行,第二个事件过程为单击“删除”按钮时执行,具体的 VBA
代码如下。
'文本框中输入数值且焦点离开之后,跳转至指定记录

对象操作技巧
Private Sub txt_记录_AfterUpdate()
'跳转至文本框指定条数的记录
DoCmd.GoToRecord , , acGoTo, txt_记录
End Sub 处理数据格式

'删除当前选中记录
Private Sub cmd_删除_Click()
'取消删除时出错,退出程序
On Error GoTo 退出
'删除当前记录
数据排序技巧

DoCmd.RunCommand acCmdDeleteRecord
'删除数据后,弹出“已删除”提示
MsgBox "已删除"
'出错时的处理方法
退出:
Exit Sub
数据查询技巧

End Sub

◎执行过程
保存编写的 VBA 代码,将“F_生活用品”窗体的视图模式切换到窗体
视图,在文本框中输入欲删除的第几条记录,窗体中的数据跳转至文本框中
数据编辑技巧

的数据指定的记录,单击“删除”按钮,按照提示操作即可删除该条记录,
如图 7-9 所示。

403
Access VBA 活用范例大辞典
基础操作技巧
控件和对象
对象操作技巧

图 7-9 删除指定的数据记录

232 逐条删除符合条件的记录
处理数据格式

初 中 高
232 2003 / 2007 / 2010

逐条删除符合条件的记录
◎删改数据技巧:DoCmd 对象、RunCommand 方法
数据排序技巧

如果需要逐条删除符合指定条件的记录,可先使用 Filter 属性筛选出符


合要求的记录,再使用 RunCommand 方法删除筛选出的记录中的第一条,然
后逐条删除符合条件的记录。

◎应用实例
数据查询技巧

素材\第 7 章\逐条删除符合条件的记录.accdb

本例需要在“F_员工工资”窗体中逐条删除数据表中指定部门的记录。

◎案例操作
数据编辑技巧

01 在绑定窗体中插入“部门” 02 为 窗 体 添 加 “ cmd_ 删 除
文本框和“删除”按钮。 _Click”事件过程。

404
Chapter 07 数据记录的追加、删除和更新技巧

03 在“cmd_删除_Click”事件过 04 切换至窗体视图查看程序运

基础操作技巧
程中添加程序代码。 行效果。

◎过程源代码
源文件\第 7 章\逐条删除符合条件的记录.accdb

控件和对象
在事件过程中编写对应的 VBA 代码,判断是否输入删除的条件,筛选出
符合指定条件的记录,判断是否删除完毕,如查没有删除完毕,对取消删除引
起的错误作出处理;没有出错则删除当前的记录,具体的 VBA 代码如下。
'逐条删除指定部门的记录

对象操作技巧
Private Sub cmd_删除_Click()
'判断是否输入删除条件
If IsNull(txt_部门) Then
'没有输入删除条件时打开提示对话框
MsgBox "没有输入删除条件"
处理数据格式

Else
'取消删除时程序出错处理
On Error GoTo 错误处理
'筛选出符合条件的记录
Me.Filter = "[部门] like '*" & txt_部门 & "*'"
Me.FilterOn = True
数据排序技巧

'通过筛选出的记录的书签判断是否删除完毕
If Me.Recordset.EOF = True Then
'书签位置大于最后一条记录,删除完毕
MsgBox "删除完毕!"
Exit Sub
数据查询技巧

Else
'删除当前记录,然后退出程序
DoCmd.RunCommand acCmdDeleteRecord
Exit Sub
End If
错误处理:
数据编辑技巧

MsgBox "已取消删除!"
End If
End Sub

405
Access VBA 活用范例大辞典

◎执行过程
基础操作技巧

保存编写的 VBA 代码,将“F_员工工资”窗体的视图模式切换到窗体


视图,在“部门”文本框中输入欲删除记录的部门,单击“删除”按钮删除
记录筛选出的第一条记录。

继续单击“删除”按钮直到打开“删除完毕”提示对话框,打开与“F_
员工工资”窗体相关联的表和查询,即可看出其中的相关记录已经删除,如
控件和对象

图 7-10 所示。
对象操作技巧
处理数据格式
数据排序技巧

图 7-10 逐条删除符合指定条件的记录
数据查询技巧

233 删除所有符合指定条件的记录 初 中 高
233 2003 / 2007 / 2010

删除所有符合指定条件的记录
◎删改数据技巧:SetOption 方法、Do While…Loop 语句
数据编辑技巧

如果需要一次性删除所有符合条件的记录,可以先通过 Filter 属性筛选


出所有符合条件的记录,再使用 RunCommand 方法和 Do While…Loop 语句

406
Chapter 07 数据记录的追加、删除和更新技巧

逐条删除符合条件的所有记录,其具体的语法格式为:

基础操作技巧
Do While [循环结束的条件]
Me.Filter =[筛选条件]
Me.FilterOn = True
DoCmd.RunCommand acCmdDeleteRecord
Loop

控件和对象
为了避免 Access 内置对话框的干扰,需要使用 Application 对象的
SetOption 方法在程序运行过程中进行屏蔽,其具体的语法格式如下所示:
Application.SetOption "Confirm Action Queries", 0

对象操作技巧
Application.SetOption "Confirm Document Deletions", 0
Application.SetOption "Confirm Record Changes", 0
在程序结束运行前,还需要解除内置对话框的屏蔽,否者会使程序在其
他 Access 应用时出现内置对话框不能使用的情况。解除屏蔽的方法为,将上
述 3 条代码中的“0”改为“1”

处理数据格式

◎应用实例
素材\第 7 章\删除所有符合指定条件的记录.accdb

本例需要在单击“F_员工工资”窗体中的“删除”按钮时,删除“F_员
数据排序技巧

工工资”窗体及所有相关表和查询中的部门为指定部门的所有记录。

◎案例操作

01 在绑定窗体“F_员工工资” 02 为 窗 体 添 加 “ cmd_ 删 除
数据查询技巧

中插入“部门”文本框和“删 _Click”事件过程。
除”按钮。

03 在“cmd_删除_Click”事件 04 切换至窗体视图查看程序运
过程中添加程序代码。 行效果。
数据编辑技巧

407
Access VBA 活用范例大辞典

◎过程源代码
基础操作技巧

源文件\第 7 章\删除所有符合指定条件的记录.accdb

在事件过程中编写对应的 VBA 代码,禁用内置对话框,删除符合条件


的对话框,启用内置对话框,具体的 VBA 代码如下。
'删除所有部门符合指定条件的记录
控件和对象

Private Sub cmd_删除_Click()


'当所有符合条件的数据删除完毕,或者没有符合条件的 _
记录时,单击“删除”按钮出错
On Error GoTo 删除完毕
'禁用系统内置的删除提示对话框
对象操作技巧

Application.SetOption "Confirm Action Queries", 0


Application.SetOption "Confirm Document Deletions", 0
Application.SetOption "Confirm Record Changes", 0
'自定义删除提示对话框
Dim Msg As Integer
Msg = MsgBox("确认全部删除?", vbOKCancel)
处理数据格式

'删除符合条件的对话框
If Msg = vbOK Then
'删除所有符合条件的记录
Do While Me.Recordset.EOF = False
Me.Filter = "[部门] like '*" & txt_部门 & "*'"
数据排序技巧

Me.FilterOn = True
DoCmd.RunCommand acCmdDeleteRecord
Loop
删除完毕:
MsgBox "删除完毕!"
Else
数据查询技巧

MsgBox "已取消删除!"
End If
'显示删除所有符合条件的记录后剩余的记录
Me.FilterOn = False
'启用系统的内置对话框
数据编辑技巧

Application.SetOption "Confirm Action Queries", 1


Application.SetOption "Confirm Document Deletions", 1
Application.SetOption "Confirm Record Changes", 1
End Sub

408
Chapter 07 数据记录的追加、删除和更新技巧

◎执行过程

基础操作技巧
保存编写的 VBA 代码,将窗体的视图模式切换到窗体视图,输入删除
记录满足的条件,根据提示操作,如图 7-11 所示。

控件和对象
对象操作技巧
处理数据格式
数据排序技巧

图 7-11 删除所有符合指定条件的记录

234 删除指定数值范围内的所有数据记录 初 中 高
234 2003 / 2007 / 2010
数据查询技巧

删除指定数值范围内的所有数据记录
◎删改数据技巧:Application 对象、SetOption 方法

如果需要一次性删除指定数值范围内的所有数据记录,可以先通过 Filter
属性筛选出所有符合条件的记录,再使用 RunCommand 方法删除记录。
数据编辑技巧

为了达到一次性删除所有数据的目的,可以使用 Do While…Loop 循环
语句删除符合条件的记录,直到所有符合条件的记录均删除为止。

409
Access VBA 活用范例大辞典

为了避免 Access 内置对话框在删除过程中的干扰,需要使用 Application


基础操作技巧

对象的 SetOption 方法屏蔽删除时的对话框,然后自定义对话框。

◎应用实例
素材\第 7 章\删除指定数值范围内的所有数据记录.accdb

本例需要在单击“F_销售记录”窗体中的“删除”按钮时,删除“F_销
控件和对象

售记录”窗体及所有相关表和查询金额在指定范围内的所有记录。

◎案例操作

01 在绑定窗体中插入两个文本 02 为 窗 体 添 加 “ cmd_ 删 除
对象操作技巧

框和“删除”按钮。 _Click”事件过程。

03 在“cmd_删除_Click”事件过 04 切换至窗体视图查看程序运
程中添加程序代码。 行效果。
处理数据格式

◎过程源代码
源文件\第 7 章\删除指定数值范围内的所有数据记录.accdb

在事件过程中编写对应的 VBA 代码,判断是否输入删除记录的条件,


数据排序技巧

确认是否需要删除满足条件的记录,删除记录,显示删除后的所有记录,具
体的 VBA 代码如下。
'删除金额在指定数值范围内的所有记录
Private Sub cmd_删除_Click()
数据查询技巧

'没有符合条件的记录时出错,将出错信息转换为删除完毕
On Error GoTo 删除完毕
'屏蔽默认的对话框
Application.SetOption "Confirm Action Queries", 0
Application.SetOption "Confirm Document Deletions", 0
Application.SetOption "Confirm Record Changes", 0
数据编辑技巧

Dim Msg As Integer


Dim sch As String
Dim sch1 As String
Dim sch2 As String

410
Chapter 07 数据记录的追加、删除和更新技巧

'获取筛选条件

基础操作技巧
If IsNull(txt_下界) Then
'没有输入金额下界时,打开提示对话框,下界文本框获取焦点
MsgBox "请输入金额下界"
txt_下界.SetFocus
ElseIf IsNull(txt_上界) Then
'没有输入金额上界时,打开提示对话框,上界文本框获取焦点

控件和对象
MsgBox "请输入金额上界"
txt_上界.SetFocus
Else
'上下界均输入后,将上下界转换为条件字符串
sch1 = "[金额]>=" & txt_下界

对象操作技巧
sch2 = "[金额]<=" & txt_上界
sch = sch1 & " and " & sch2
'打开对话框,确认是否需要删除
Msg = MsgBox("确认全部删除?", vbOKCancel)
If Msg = vbOK Then
'逐条删除符合条件的记录,直到删除完为止
处理数据格式

Do While Me.Recordset.EOF = False


'删除出符合条件的记录
Me.Filter = sch
Me.FilterOn = True
'删除筛选出的记录的第一条
数据排序技巧

DoCmd.RunCommand acCmdDeleteRecord
Loop
删除完毕:
MsgBox "删除完毕!"
Else
MsgBox "已取消删除!"
数据查询技巧

End If
End If
'显示删除之后的所有记录
Me.FilterOn = False
'恢复默认的对话框设置
数据编辑技巧

Application.SetOption "Confirm Action Queries", 1


Application.SetOption "Confirm Document Deletions", 1
Application.SetOption "Confirm Record Changes", 1
End Sub

411
Access VBA 活用范例大辞典

◎执行过程
基础操作技巧

保存编写的 VBA 代码,将“F_销售记录”窗体的视图模式切换到窗体


视图,输入删除记录金额的范围,根据提示操作,如图 7-12 所示。
控件和对象
对象操作技巧
处理数据格式
数据排序技巧

图 7-12 删除指定数值范围内的所有数据记录
数据查询技巧

235 删除指定日期范围内的所有数据记录 初 中 高
235 2003 / 2007 / 2010

删除指定日期范围内的所有数据记录
◎删改数据技巧:Application 对象、SetOption 方法
数据编辑技巧

一次性删除指定日期范围内的所有数据记录,与一次性删除数值范围内
的方法相似,同样可以先通过 Filter 属性筛选出所有符合条件的记录,再使

412
Chapter 07 数据记录的追加、删除和更新技巧

用 DoCmd 对象的 RunCommand 方法删除记录。

基础操作技巧
可以使用 Do While…Loop 循环语句删除符合条件的记录,直到删除符
合条件的所有记录为止,从而达到一次性删除所有记录的目的。

使用 Application 对象的 SetOption 方法屏蔽删除时的对话框,再自定义


对话框,可避免 Access 内置对话框在删除过程中的干扰。

控件和对象
◎应用实例
素材\第 7 章\删除指定日期范围内的所有数据记录.accdb

本例需要删除“F_销售记录”窗体及其数据源数据表中的付款期在指定
日期范围内的记录。

对象操作技巧
◎案例操作

01 在绑定窗体中插入两个文本 02 为 窗 体 添 加 “ cmd_ 删 除
框 和“删除”按钮。 _Click”事件过程。
处理数据格式

03 在“cmd_删除_Click”事件过 04 切换至窗体视图查看程序运
程中添加程序代码。 行效果。
数据排序技巧

◎过程源代码
源文件\第 7 章\删除指定日期范围内的所有数据记录.accdb

在事件过程中编写对应的 VBA 代码,判断是否输入删除记录的条件,


确认是否需要删除满足条件的记录,删除记录,显示删除后的所有记录,具
数据查询技巧

体的 VBA 代码如下。
'删除所有付款期在指定日期范围内的记录
Private Sub cmd_删除_Click()
'没有符合条件的记录时出错,显示删除完毕
On Error GoTo 删除完毕
数据编辑技巧

'屏蔽默认的对话框
Application.SetOption "Confirm Action Queries", 0
Application.SetOption "Confirm Document Deletions", 0

413
Access VBA 活用范例大辞典

Application.SetOption "Confirm Record Changes", 0


基础操作技巧

Dim Msg As Integer


Dim sch As String
Dim sch1 As String
Dim sch2 As String
'获取筛选条件
If IsNull(txt_下界) Then
控件和对象

'没有输入起始日期时弹出提示信息
MsgBox "请输入起始日期", , "起始日期未输入"
ElseIf IsNull(txt_上界) Then
'输入起始日期但是没有输入结束日期弹出的提示信息
MsgBox "请输入结束日期", , "结束日期未输入"
对象操作技巧

Else
'日期范围完整输入后,将日期范围转换为条件字符串
sch1 = "[付款期]>=#" & txt_下界 & "#"
sch2 = "[付款期]<=#" & txt_上界 & "#"
sch = sch1 & " and " & sch2
'打开对话框,确认是否需要删除
处理数据格式

Msg = MsgBox("确认全部删除?", vbOKCancel)


If Msg = vbOK Then
'逐条删除指定日期范围内的记录,直至完全删除
Do While Me.Recordset.EOF = False
'筛选出付款期在指定日期范围的记录
数据排序技巧

Me.Filter = sch
Me.FilterOn = True
'删除筛选出的记录的第一条
DoCmd.RunCommand acCmdDeleteRecord
Loop
删除完毕:
数据查询技巧

MsgBox "删除完毕!"
Else
MsgBox "已取消删除!"
End If
End If
数据编辑技巧

'显示删除之后的所有记录
Me.FilterOn = False
'启用系统内置对话框
Application.SetOption "Confirm Action Queries", 1

414
Chapter 07 数据记录的追加、删除和更新技巧

Application.SetOption "Confirm Document Deletions", 1

基础操作技巧
Application.SetOption "Confirm Record Changes", 1
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_销售记录”窗体的视图模式切换到窗体
视图,输入删除记录的付款期日期范围,根据提示操作,如图 7-13 所示。

控件和对象
对象操作技巧
处理数据格式
数据排序技巧

图 7-13 删除指定日期范围内的所有数据记录
数据查询技巧

236 修改指定位置的数据 初 中 高
236 2003 / 2007 / 2010

修改指定位置的数据
◎删改数据技巧:BeforeUpdate 事件、AfterUpdate 事件
数据编辑技巧

如果需要修改某一条数据,
可以通过绑定窗体跳转至该条数据进行修改,
这可以通过文本框的 AfterUpdate 事件来实现。

415
Access VBA 活用范例大辞典

为了避免意外修改数据,需要使用对话框来提示数据的修改是否需要进
基础操作技巧

行,这需要在窗体的 BeforeUpdate 事件中进行,其具体的语法格式如下所示:


Private Sub Form_BeforeUpdate(Cancel As Integer)
[记录更新前处理代码]
End Sub
控件和对象

◎应用实例
素材\第 7 章\修改指定位置的数据.accdb

本例需要在 “员工基本资料” 绑定窗体中实现对 “员工基本资料” 表


中记录的修改。首先需要通过更新第几条记录定位至欲更新的记录,然后在
对象操作技巧

窗体中修改指定记录,当离开该条记录时,提示是否修改该条信息。

◎案例操作

01 在绑定窗体中插入“更新第 02 为窗体添加“txt_定位_After
处理数据格式

几条:
”文本框。 Update”事件过程。

03 在“txt_定位_AfterUpdate” 04 为窗体添加“Form_BeforeUp
事件过程中添加程序代码。 date”事件过程。
数据排序技巧

05 在“Form_BeforeUpdate”事 06 切换至窗体视图查看程序运
件过程中添加程序代码。 行效果。

◎过程源代码
数据查询技巧

源文件\第 7 章\修改指定位置的数据.accdb

分别在两个事件过程中编写对应的 VBA 代码,具体的 VBA 代码如下。


'确认数据的更新
数据编辑技巧

Private Sub Form_BeforeUpdate(Cancel As Integer)


Dim Msg As Integer
Msg = MsgBox("确定要更新吗?", vbOKCancel)
If Msg = vbCancel Then

416
Chapter 07 数据记录的追加、删除和更新技巧

Cancel = True

基础操作技巧
End If
End Sub

'跳转至指定数据,如果跳转之前修改了数据,提示是否需要修改
Private Sub txt_定位_AfterUpdate()
On Error GoTo 取消更新

控件和对象
DoCmd.GoToRecord , , acGoTo, txt_定位
取消更新:
End Sub

◎执行过程

对象操作技巧
保存编写的 VBA 代码,将“员工基本信息”窗体的视图模式切换到窗
体视图,输入欲跳转至的记录为第几条,然后修改记录,再次跳转或者离开
窗体时会弹出提示信息,如图 7-14 所示。
处理数据格式
数据排序技巧

图 7-14 在绑定窗体中关系数据
数据查询技巧

237 使用 SQL 语句取得新增主键新增记录 初 中 高


237 2003 / 2007 / 2010

使用 SQL 语句取得新增主键新增记录
◎通过编写 SQL 语句编辑记录:SELECT…FROM 语句、MAX()函数
数据编辑技巧

在新增记录时,可以使用 SQL 语句来获得新增记录的数值型主键,可使


用 MAX()函数获取目前数值型主键的最大值,然后在该数值的基础上+1 得
到新的主键,其具体的语法格式为:

417
Access VBA 活用范例大辞典

[SQL 语句]=select max([数值型主键名]) as 最大主键 from [表名]


基础操作技巧

Set [记录集] = [数据库].OpenRecordset([SQL 语句], bOpenDynaset)


Me!txt_[主键名] = [记录集]![最大主键] + 1
在获取了主键之后,还需要将窗体中文本框中的数据清空,为新增数据
做准备。

在窗体中的对应文本框中输入数据之后,就可以通过 AddNew 方法将窗


控件和对象

体中的数据设置到打开的数据集中,然后使用 Update 方法更新数据。

◎应用实例
素材\第 7 章\使用 SQL 语句取得新增主键新增记录.accdb
对象操作技巧

本例需要在非绑定窗体“员工基本资料”中单击“获取主键”按钮实现
新增记录的准备,包括自动得到数值型主键和清空其他文本框中的数据;单
击“追加记录”按钮将窗体中的记录追加至“员工基本资料”数据表中。

◎案例操作
处理数据格式

01 在绑定窗体中插入“获取主 02 为 窗 体 添 加 “ cmd_ 主 键
键”和“追加记录”按钮。 _Click”事件过程。
数据排序技巧

03 在“cmd_主键_Click”事件 04 为 窗 体 添 加 “ cmd_ 追 加
过程中添加程序代码。 _Click”事件过程。

05 在“cmd_追加_Click”事件 06 切换至窗体视图查看程序运
数据查询技巧

过程中添加程序代码。 行效果。

◎过程源代码
源文件\第 7 章\使用 SQL 语句取得新增主键新增记录.accdb
数据编辑技巧

分别在两个事件过程中编写对应的 VBA 代码,为新增记录做准备并将


新增的记录添加至“员工基本资料”数据表中,具体的 VBA 代码如下。
'获取数值型主键,清空其余文本框中数据

418
Chapter 07 数据记录的追加、删除和更新技巧

Private Sub cmd_主键_Click()

基础操作技巧
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim Sql As String
Set db = CurrentDb()
'通过 SQL 语句获取最大主键
Sql = "select max(员工编号) as 最大主键 from 员工基本资料"

控件和对象
Set rs = db.OpenRecordset(Sql, dbOpenDynaset)
rs.MoveFirst
'新增记录预处理
Me!txt_员工编号 = rs![最大主键] + 1
Me!txt_姓名 = ""

对象操作技巧
Me!txt_性别 = ""
Me!txt_部门 = ""
Me!txt_职务 = ""
Me!txt_联系电话 = ""
End Sub 处理数据格式

'追加记录
Private Sub cmd_追加_Click()
'资料不完整时出错,跳转至“资料不完整”标签
On Error GoTo 资料不完整
Dim db As DAO.Database
数据排序技巧

Dim rs As DAO.Recordset
Set db = CurrentDb()
Set rs = db.OpenRecordset("员工基本资料", dbOpenDynaset)
'新增记录
rs.AddNew
数据查询技巧

rs!员工编号 = Me!txt_员工编号
rs!姓名 = Me!txt_姓名
rs!性别 = Me!txt_性别
rs!部门 = Me!txt_部门
rs!职务 = Me!txt_职务
rs!联系电话 = Me!txt_联系电话
数据编辑技巧

rs.Update
MsgBox "已经追加一条记录"
'将“资料不完整”标签放置在一个正常情况下不执行的 IF 语句中 _

419
Access VBA 活用范例大辞典

以实现只有跳转进入才会执行对应代码的作用
基础操作技巧

If 0 Then
资料不完整:
MsgBox "资料没有输入完整,请输入完整后重试!"
End If
End Sub

◎执行过程
控件和对象

保存编写的 VBA 代码,将窗体的视图模式切换到窗体视图,单击“获


取主键”按钮准备新增记录,输入数据,单击“追加记录”按钮向表中追加
记录,如图 7-14 所示。
对象操作技巧
处理数据格式
数据排序技巧

图 7-14 在绑定窗体中关系数据
数据查询技巧

238 使用 Update 语句更新数据(1) 初 中 高


238 2003 / 2007 / 2010

使用 Update 语句更新数据(1)
◎通过编写 SQL 语句编辑记录:Update 语句、Exeute 方法
数据编辑技巧

在 DAO 中,可以通过 Update 语句更新记录,其具体的语法格式为:


Update [表名] Set [字段名]=[关系内容]
如果需要在对象中运行查询语句或者 SQL 语句,可以使用对象的 Exeute
420
Chapter 07 数据记录的追加、删除和更新技巧

方法,其具体的语法格式为:

基础操作技巧
[对象].Execute [查询或 SQL 语句]

◎应用实例
素材\第 7 章\使用 Update 语句更新数据(1).accdb

本例中,需要在 DAO 中使用含有 Update 语句的 SQL 语句,将“T_生

控件和对象
活用品”表中的“利润”字段(原来为空白的字段)更新。

◎案例操作

01 在“M_更新记录”模块中插 02 在“利润”过程中编写更新

对象操作技巧
入“利润”过程。 记录的 VBA 代码。

03 运行“利润”过程,查看过
程运行效果。
处理数据格式

◎过程源代码
源文件\第 7 章\使用 Update 语句更新数据(1).accdb

在“利润”过程中编写 VBA 代码,更新“T_生活用品”表中的“利润”


数据排序技巧

字段,具体的 VBA 代码如下。


'更新“利润”字段
Sub 利润()
Dim Sql As String
Dim db As DAO.Database
数据查询技巧

Set db = CurrentDb
'用于更新“利润”字段的 SQL 语句
Sql = "Update T_生活用品 set 利润=(零售价-供应价)*月销量"
'在当前数据库中运行 SQL 语句
db.Execute Sql
数据编辑技巧

db.Close: Set db = Nothing


End Sub

421
Access VBA 活用范例大辞典

◎执行过程
基础操作技巧

保存编写的 VBA 代码,然后按【F5】键运行“利润”过程,打开“T_


生活用品”表,查看过程运行效果,如图 7-15 所示。
控件和对象
对象操作技巧

图 7-15 “利润”过程运行前后的效果

239 使用 Update 语句更新数据(2) 初 中 高


239 2003 / 2007 / 2010

使用 Update 语句更新数据(2)
处理数据格式

◎通过编写 SQL 语句编辑记录:Update 语句

在 ADO 中更新记录的方法与 DAO 中更新记录的方法是相似的,在连接


至数据库之后,也可以通过 Update 语句和 Exeute 方法更新记录。
数据排序技巧

◎应用实例
素材\第 7 章\使用 Update 语句更新数据(2).accdb

本例中,需要在 ADO 中使用含有 Update 语句的 SQL 语句,将“T_生


数据查询技巧

活用品”表中的“平均利润”字段(原来为空白的字段)更新。

◎案例操作

01 在“M_更新记录”模块中插 02 在“平均利润” 过程中编写


入“平均利润”过程。 更新记录的 VBA 代码。
数据编辑技巧

422
Chapter 07 数据记录的追加、删除和更新技巧

03 运行“平均利润”过程,查

基础操作技巧
看过程运行效果。

◎过程源代码
源文件\第 7 章\使用 Update 语句更新数据(2).accdb

控件和对象
在“平均利润”过程中编写 VBA 代码,更新“T_生活用品”表中的“平
均利润”字段,具体的 VBA 代码如下。
'更新“平均利润”字段
Sub 平均利润()

对象操作技巧
Dim Sql As String
Dim cn As New ADODB.Connection
Set cn = CurrentProject.Connection
'用于更新“平均利润”字段的 SQL 语句
Sql = "Update T_生活用品 set 平均利润=零售价-供应价"
'在当前数据库中运行 SQL 语句
处理数据格式

cn.Execute Sql
cn.Close: Set cn = Nothing
End Sub

◎执行过程
数据排序技巧

保存编写的 VBA 代码,然后按【F5】键运行“平均利润”过程,打开


“T_生活用品”表,查看过程运行效果,如图 7-16 所示。
数据查询技巧
数据编辑技巧

图 7-16 “平均利润”过程运行前后的效果

423
Access VBA 活用范例大辞典

240 在数据表中追加查询记录 初 中 高
240
基础操作技巧

2003 / 2007 / 2010

在数据表中追加查询记录
◎通过编写 SQL 语句编辑记录:INSERT INTO 语句、RunSQL 方法

使用 SQL 语句中的 INSERT INTO 语句,可以在表中插入新的记录,其


控件和对象

具体的语法格式为:
INSERT INTO [表名] [记录]
如果需要将其他的表或者查询中的记录添加至表中,可以使用 INSERT
INTO 语句将 SELECT…FROM 语句选取的记录插入。
对象操作技巧

在 DAO 和 ADO 中,可以使用 Excute 方法执行 SQL 语句。在没有使用


DAO 和 ADO 时,也可以使用 DoCmd 对象的 RunSQL 方法执行 SQL 语句,
其具体的语法格式为:
DoCmd.RunSQL [SQL 语句]
处理数据格式

◎应用实例
素材\第 7 章\在数据表中追加查询记录.accdb

本例中,需要在运行“追加查询记录”过程时,可以在“T_生活用品 2”
表中追加“T_生活用品 1”表中“平均利润”大于等于 5 元的记录。
数据排序技巧

◎案例操作

01 在“M_追加记录”模块中插 02 在“追加查询记录”过程中
入“追加查询记录”过程。 编写追加记录的 VBA 代码。
数据查询技巧

03 运行“追加查询记录”过程,
查看过程运行效果。
数据编辑技巧

◎过程源代码
源文件\第 7 章\在数据表中追加查询记录.accdb

在“追加查询记录”过程中编写 VBA 代码,将查询到的平均利润大于 5


424
Chapter 07 数据记录的追加、删除和更新技巧

的记录追加至“T_生活用品 2”表中,具体的 VBA 代码如下。

基础操作技巧
'将“T_生活用品 1”中平均利润大于 5 的记录添加至“T_生活用品 2”中
Sub 追加查询记录()
Dim Sql As String
Sql = "INSERT INTO T_生活用品 2 " _
& "SELECT * FROM T_生活用品 1 WHERE 平均利润>=5"
DoCmd.RunSQL Sql

控件和对象
End Sub

◎执行过程
保存编写的 VBA 代码,然后按【F5】键运行“追加查询记录”过程,

对象操作技巧
打开“T_生活用品 2”表,查看过程运行效果,如图 7-17 所示。

处理数据格式

图 7-17 在“T_生活用品 2”表中追加的查询记录

241 在数据表中删除记录 初 中 高
数据排序技巧

241 2003 / 2007 / 2010

在数据表中删除记录
◎通过编写 SQL 语句编辑记录:DELETE 语句、RunSQL 方法

使用 SQL 语句中的 DELETE 语句,可以删除表中满足指定条件的记录,


数据查询技巧

其具体的语法格式为:
DELETE FROM [表名] WHERE [字段] [字段满足的条件]

◎应用实例
数据编辑技巧

素材\第 7 章\在数据表中删除记录.accdb

本例中,需要在运行“删除记录”过程时,将“T_生活用品”表中平均
利润小于 2 的记录删除。

425
Access VBA 活用范例大辞典

◎案例操作
基础操作技巧

01 在“M_删除记录”模块中插 02 在“删除记录”过程中编写
入“删除记录”过程。 删除记录的 VBA 代码。

03 运行“删除记录”过程,查
控件和对象

看过程运行效果。

◎过程源代码
源文件\第 7 章\在数据表中删除记录.accdb
对象操作技巧

在“删除记录”过程中编写 VBA 代码,删除“T_生活用品”表中平均


利润小于 2 的记录,具体的 VBA 代码如下。
'在“T_生活用品”表中删除平均利润小于 2 的记录
Sub 删除记录()
处理数据格式

Dim Sql As String


Sql = "DELETE FROM T_生活用品 WHERE 平均利润<2"
DoCmd.RunSQL Sql
End Sub

◎执行过程
数据排序技巧

保存编写的 VBA 代码,然后按【F5】键运行“删除记录”过程,打开


“T_生活用品”表,查看过程运行效果,如图 7-18 所示。
数据查询技巧
数据编辑技巧

图 7-18 将“T_生活用品”表中平均利润小于 2 的记录删除

426
Chapter 07 数据记录的追加、删除和更新技巧

242 在数据表中新增字段 初 中 高
242

基础操作技巧
2003 / 2007 / 2010

在数据表中新增字段
◎通过编写 SQL 语句编辑记录:ALTER TABLE…ADD 语句

使用 SQL 语句中的 ALTER TABLE 语句,可以在已有的表中添加、修改

控件和对象
或者删除字段。

使用 ALTER TABLE…ADD 语句可以在表中添加新的字段,其具体的语


法格式为:
ALTER TABLE [表名] ADD [字段] [字段类型]

对象操作技巧
字段类型需要使用 Microsoft Access 的数据类型,如表 7-1 所示。

表 7-1 Microsoft Access 数据类型

数据类型 说明 数据类型 说明
文本 超长文本
处理数据格式

Text Memo
Byte 0 到 255 的数字 Integer 整数型
Long 长整型 Single 单精度浮点数
Double 双精度浮点数 Currency 货币型
AutoNumber 自动编号数字 Date/Time 日期和时间型数据
数据排序技巧

Yes/No 逻辑型 Hyperlink 超链接


Ole Object 二进制大型对象 Lookup Wizard 选项列表

◎应用实例
数据查询技巧

素材\第 7 章\在数据表中新增字段.accdb

本例中,需要在运行“新增字段”过程时,为“T_生活用品”表添加一
个单精度浮点数类型的“折扣”字段。

◎案例操作
数据编辑技巧

01 在“M_新增字段”模块中插 02 在“新增字段”过程中编写
入“新增字段”过程。 新增字段的 VBA 代码。

427
Access VBA 活用范例大辞典

03 运行“新增字段”过程,查
基础操作技巧

看过程运行效果。

◎过程源代码
源文件\第 7 章\在数据表中新增字段.accdb
控件和对象

在“新增字段”过程中编写 VBA 代码,为“T_生活用品”表新增字段,


具体的 VBA 代码如下。
'在“T_生活用品”表中新增“折扣”字段
Sub 新增字段()
对象操作技巧

Dim Sql As String


Sql = "ALTER TABLE T_生活用品 ADD 折扣 Single"
DoCmd.RunSQL Sql
End Sub

◎执行过程
处理数据格式

保存编写的 VBA 代码,然后按【F5】键运行“新增字段”过程,打开


“T_生活用品”表,查看过程运行前后的效果,如图 7-19 所示。
数据排序技巧
数据查询技巧

图 7-19 为“T_生活用品”表新增“折扣”字段

243 在数据表中删除字段 初 中 高
243 2003 / 2007 / 2010

在数据表中删除字段
数据编辑技巧

◎通过编写 SQL 语句编辑记录:ALTER TABLE…DROP COLUMN 语句

使用 ALTER TABLE…DROP COLUMN 语句可以删除表中已有的字段,

428
Chapter 07 数据记录的追加、删除和更新技巧

其具体的语法格式为:

基础操作技巧
ALTER TABLE [表名] DROP COLUMN [字段]

◎应用实例
素材\第 7 章\在数据表中删除字段.accdb

本例中,需要在运行“删除字段”过程时,将“T_生活用品”表中的“利

控件和对象
润”字段删除。

◎案例操作

01 在“M_删除字段”模块中插 02 在“删除字段”过程中编写

对象操作技巧
入“删除字段”过程。 删除字段的 VBA 代码。

03 运行“删除字段”过程,查
看过程运行效果。
处理数据格式

◎过程源代码
源文件\第 7 章\在数据表中删除字段.accdb

在“删除字段”过程中编写 VBA 代码,将“T_生活用品”表中的“利


数据排序技巧

润”字段删除,具体的 VBA 代码如下。


'删除“T_生活用品”表中的“利润”字段
Sub 删除字段()
Dim Sql As String
Sql = "ALTER TABLE T_生活用品 DROP COLUMN 利润"
数据查询技巧

DoCmd.RunSQL Sql
End Sub

◎执行过程
保存编写的 VBA 代码,然后按【F5】键运行“删除字段”过程,打开
数据编辑技巧

“T_生活用品”表,查看过程运行前后的效果,如图 7-20 所示。

429
Access VBA 活用范例大辞典
基础操作技巧
控件和对象

图 7-20 将“T_生活用品”表的“利润”字段删除

244 在数据表中修改字段类型 初 中 高
244 2003 / 2007 / 2010
对象操作技巧

在数据表中修改字段类型
◎通过编写 SQL 语句编辑记录:ALTER TABLE…DROP COLUMN 语句

使用 ALTER TABLE…ALTER COLUMN 语句,可以修改数据表中字段


的数据类型,其具体的语法格式为:
处理数据格式

ALTER TABLE [表名] ALTER COLUMN [字段] [新的类型]


需要注意在某些情况下对数据类型的修改可能不会成功,比如在数据表
中有记录时,将某个字段的类型修改为自动编号类型;或者在数据表打开时,
修改任意字段的数据类型。
数据排序技巧

◎应用实例
素材\第 7 章\在数据表中修改字段类型.accdb

本例中,需要在运行“修改字段类型”过程时,将“T_员工资料”表中
的“员工编号”字段的类型由“文本型”修改为“整数型”

数据查询技巧

◎案例操作

01 在“M_修改字段类型”模块 02 在“修改字段类型”过程中
插入“修改字段类型”过程。 编写 VBA 代码。
数据编辑技巧

430
Chapter 07 数据记录的追加、删除和更新技巧

03 运行“修改字段类型”过程,

基础操作技巧
查看过程运行效果。

◎过程源代码
源文件\第 7 章\在数据表中修改字段类型.accdb

控件和对象
在“修改字段类型”过程中编写 VBA 代码,将“T_员工资料”表中的
“员工编号”字段类型修改为整数型,具体的 VBA 代码如下。
'修改“员工编号”字段的数据类型为整数型
Sub 修改字段类型()

对象操作技巧
Dim Sql As String
Sql = "ALTER TABLE T_员工资料 ALTER COLUMN 员工编号 Integer"
DoCmd.RunSQL Sql
End Sub

◎执行过程
处理数据格式

保存编写的 VBA 代码,然后按【F5】键运行“修改字段类型”过程,


以设计视图模式打开“T_员工资料”表,查看过程运行前后的效果,如图 7-21
所示。
数据排序技巧
数据查询技巧

图 7-21 将“T_员工资料”表的“员工编号”字段修改为整数型
数据编辑技巧

431
Chapter 08
数据记录的统计和打印技巧

对数据库中的记录进行统计,是数据处理过程中比较重要的
环节之一。本章将通过一些实例讲解数据记录统计中的一些常用
技巧和方法。
将数据库中的数据创建为报表并进行打印,也是一种常见的
数据库操作,本章也将就这方面的一些方法和技巧进行实例演练。

▼主要内容
◎统计数据记录技巧
Dcount()函数、AND 关键字……
◎打印数据记录技巧
DoCmd 对象、PrintOut 方法、OpenTable 方法、Print 方法、RGB()函数……

▼涉及案例
◎统计数据表中有多少条数据记录
◎通过下拉列表设置统计条件
◎打印窗体当前的显示页
◎打印数据表中的数据
◎将报表内容打印成彩色
◎设置打印页面的大小
◎在报表页面打印水印效果
◎将指定数据圈释出来打印
……
Chapter 08 数据记录的统计和打印技巧

245 统计数据表中有多少条数据记录 初 中 高
245 2003 / 2007 / 2010

统计和打印
统计数据表中有多少条数据记录
◎统计数据记录技巧:Dcount()函数

如果需要统计数据表或者查询中的记录条数,可以通过统计其中的主键的
个数来得到。这可以使用 Dcount()函数来实现,其具体的语法格式如下所示:

数据交换
DCount("[主键名]", "[表或查询名]")

◎应用实例
素材\第 8 章\统计数据表中有多少条数据记录.accdb

其他应用
本例需要在“F_统计”窗体中的文本框中得到“T_销售记录” 数据表
中的记录条数。

◎案例操作

01 在“F_统计”窗体中插入一 02 为“F_统计”窗体添加“cmd_
个文本框和“统计”按钮。 统计_Click”事件过程。

03 在“cmd_统计_Click”事件 04 执行程序过程查看程序运行
过程中添加代码。 效果。

◎过程源代码
源文件\第 8 章\统计数据表中有多少条数据记录.accdb

在事件过程中编写对应的 VBA 代码,统计“T_销售记录” 数据表中的


主键个数,然后将统计结果输出到窗体的指定文本框中,其具体的 VBA 代
码如下。
'统计数据表“T_销售记录”中的记录条数
Private Sub cmd_统计_Click()
Dim Num As Integer
'得到数据表“T_销售记录”中主键 ID 的个数
Num = DCount("ID", "T_销售记录")

433
Access VBA 活用范例大辞典

'将统计结果输出到窗体中指定文本框中
txt_记录数 = Num & "条"
统计和打印

End Sub

◎执行过程
保存编写的 VBA 代码,将“F_统计”窗体的视图模式切换到窗体视图,
单击“统计”按钮,可以得到“T_销售记录”数据表中的记录条数,如图 8-1
数据交换

所示。
其他应用

图 8-1 统计数据表“T_销售记录”中的记录条数

246 统计符合指定条件的数据记录 初 中 高
246 2003 / 2007 / 2010

统计符合指定条件的数据记录
◎统计数据记录技巧:Dcount()函数

如果需要统计数据表或者查询中满足某个条件的记录条数,可以在
Dcount()函数的第 3 个参数中设置所要统计记录需要满足的条件,其中用于
计数的第 1 个参数,可以使用主键名,也可以使用统计条件所涉及的字段名,
其具体的语法格式如下所示:
DCount("[主键名]","[表或查询名] , "[条件]")
如果统计记录满足单个的条件,该条件中涉及的字段名需要使用英文状
态下的中括号(
“[ ]”
)括起来。

434
Chapter 08 数据记录的统计和打印技巧

◎应用实例

统计和打印
素材\第 8 章\统计符合指定条件的数据记录.accdb

本例需要在“F_统计”窗体中的文本框中得到查询“Q_员工工资”中,
部门为“财务部”的记录条数。

◎案例操作

数据交换
01 在“F_统计”窗体中插入一 02 为“F_统计”窗体添加“cmd_
个文本框和“统计”按钮。 统计_Click”事件过程。

03 在“cmd_统计_Click”事件 04 执行程序过程查看程序运行

其他应用
过程中添加代码。 效果。

◎过程源代码
源文件\第 8 章\统计符合指定条件的数据记录.accdb

在事件过程中编写对应的 VBA 代码,统计“Q_员工查询工资”中的主


键个数,然后将统计结果输出到窗体的指定文本框中,其具体的 VBA 代码
如下。
'统计查询“Q_员工工资”中,部门为财务部的记录数
Private Sub cmd_统计_Click()
Dim Num As Integer
'得到部门为财务部的记录的条数
Num = DCount("员工编号", "Q_员工工资", "[部门]='财务部'")
'将统计结果输出到文本框中
txt_记录数 = Num & "条"
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_统计”窗体的视图模式切换到窗体视图,
单击“统计”按钮,可以得到“Q_员工工资”查询中的部门为“财务部”的
记录数,如图 8-2 所示。

435
Access VBA 活用范例大辞典
统计和打印
数据交换

图 8-2 统计部门为“财务部”的记录数

247 统计符合多条件的数据记录 初 中 高
其他应用

247 2003 / 2007 / 2010

统计符合多条件的数据记录
◎统计数据记录技巧:Dcount()函数、AND 关键字

如果需要统计数据表或者查询中满足多个条件的记录条数,可以在
Dcount()函数的第 3 个参数中设置所要统计的记录需要满足的条件,然后使
用 AND 关键字将所有的条件连接起来,其具体的语法格式如下所示:
DCount("[主键名]","[表或查询名] , "[条件 1] AND [条件 2]")

◎应用实例
素材\第 8 章\统计符合多条件的数据记录.accdb

本例需要在“F_统计”窗体的文本框中得到“Q_员工工资”查询中, 财
务部中实得工资在 2 000 元及以上员工数。

◎案例操作

01 在“F_统计”窗体中插入一 02 为“F_统计”窗体添加“cmd_
个文本框和“统计”按钮。 统计_Click”事件过程。

03 在“cmd_统计_Click”事件 04 执行程序过程查看程序运行
过程中添加代码。 效果。

436
Chapter 08 数据记录的统计和打印技巧

◎过程源代码

统计和打印
源文件\第 8 章\统计符合多条件的数据记录.accdb

在事件过程中编写对应的 VBA 代码,统计“Q_员工工资”查询中满足


条件的记录的个数,然后将统计结果输出到“F_统计”窗体的指定文本框中,
其具体的 VBA 代码如下。

数据交换
'统计查询“Q_员工工资”中,财务部实得工资 2000 以上的员工数
Private Sub cmd_统计_Click()
Dim Num As Integer
'得到部门为财务部、实得工资 2000 及以上的人数
Num = DCount("部门", "Q_员工工资" _

其他应用
, "[部门]='财务部' And [实得工资]>=2000")
'将统计结果输出到文本框中
txt_人数 = Num & "人"
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_统计”窗体的视图模式切换到窗体视图,
单击“统计”按钮,可以得到“Q_员工工资”查询中的财务部实得工资 2 000
元及以上的员工数,如图 8-3 所示。

图 8-3 统计财务部实得工资 2 000 元及以上的员工人数

437
Access VBA 活用范例大辞典

248 通过下拉列表设置统计条件 初 中 高
248 2003 / 2007 / 2010
统计和打印

通过下拉列表设置统计条件
◎统计数据记录技巧:Dcount()函数

如果需要使用下拉列表来设置统计条件,可以在 Dcount()函数的第 3 个
参数中使用组合框名称。为了使得写出的代码更利于阅读,可以将设置的条
数据交换

件保存至一个字符串变量中,然后在 Dcount()函数使用该字符串。

需要注意的是,在设置条件字符串时,需要为组合框名的两端加上英文
状态下的单引号(
“'”
),其具体的语法格式如下所示:
字符串变量= "[字段名]=" & "'" & 值 & "'"
其他应用

◎应用实例
素材\第 8 章\通过下拉列表设置统计条件.accdb

本例需要在“F_统计”窗体中的文本框中得到“Q_员工工资”查询中,
下拉列表中选择部门的人数。

◎案例操作

01 在“F_统计”窗体中插入“部 02 将“部门”组合框的行来源
门”组合框和“人数”文本框。 类型设置为“值列表”,在“行
来源”中设置选项。

03 为窗体添加“统计”按钮和 04 在“cmd_统计_Click”事件
“cmd_统计_Click”事件过程。 过程中添加代码。

05 执行程序过程查看程序运行
效果。

◎过程源代码
源文件\第 8 章\通过下拉列表设置统计条件.accdb

在事件过程中编写对应的 VBA 代码,统计“Q_员工工资”查询中指定

438
Chapter 08 数据记录的统计和打印技巧

部门的人数,然后将统计结果输出到“F_统计”窗体的指定文本框中,其具
体的 VBA 代码如下。

统计和打印
'统计下拉列表中选择部门的人数
Private Sub cmd_统计_Click()
'定义整型变量和字符串变量,用于保存统计结果和统计条件
Dim Num As Integer
Dim Str As String

数据交换
'获得统计条件
Str = "[部门]=" & "'" & cmb_部门 & "'"
'统计指定部门的的人数
Num = DCount("部门", "Q_员工工资", Str)
'将统计结果显示到窗口文本框中

其他应用
txt_人数 = Num & "人"
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_统计”窗体的视图模式切换到窗体视图,
在下拉列表中选择需要统计人数的部门,单击“统计”按钮,指定部门的人
数,如图 8-4 所示。

图 8-4 统计组合框中选择部门的人数

249 通过文本框设置统计条件 初 中 高
249 2003 / 2007 / 2010

通过文本框设置统计条件
◎统计数据记录技巧:Dcount()函数

如果需要使用文本框来设置统计条件,可以在 Dcount()函数的第 3 个参
数中使用文本框名称。为了使得写出的代码更利于阅读,可以将设置的条件
保存至一个字符串变量中,然后在 Dcount()函数中使用该字符串。

439
Access VBA 活用范例大辞典

使用文本框与使用组合框的方法大致相似,但是由于使用文本框输入数
据的随意性,所以需要在文本框的两端添加上通配符。
统计和打印

添加上通配符之后,不能够再使用“=”
,而需要使用 Like 关键字。

◎应用实例
素材\第 8 章\通过文本框设置统计条件.accdb
数据交换

本例需要在“F_统计”窗体中的文本框中得到“Q_员工工资”查询中,
使用文本框指定部门的人数。

◎案例操作
其他应用

01 在“F_统计”窗体中插入“部 02 为窗体添加“统计”按钮和
门”和“人数”文本框。 “cmd 统计 Click”事件过程。

03 在“cmd_统计_Click”事件 04 执行程序过程查看程序运行
过程中添加代码。 效果。

◎过程源代码
源文件\第 8 章\通过文本框设置统计条件.accdb

在事件过程中编写对应的 VBA 代码,统计“Q_员工工资”查询中指定


部门的人数,然后将统计结果输出到“F_统计”窗体的指定文本框中,其具
体的 VBA 代码如下。
'统计文本框中输入的部门的人数
Private Sub cmd_统计_Click()
'定义整型变量和字符串变量,用于保存统计结果和统计条件
Dim Num As Integer
Dim Str As String
'获得统计条件
Str = "[部门] Like " & "'*" & txt_部门 & "*'"
'统计指定部门的的人数
Num = DCount("部门", "Q_员工工资", Str)
'将统计结果显示到窗口文本框中
txt_人数 = Num & "人"
End Sub
440
Chapter 08 数据记录的统计和打印技巧

◎执行过程

统计和打印
保存编写的 VBA 代码,将“F_统计”窗体的视图模式切换到窗体视图,
在下拉列表中选择需要统计人数的部门,单击“统计”按钮,指定部门的人
数,如图 8-5 所示。

数据交换
图 8-5 统计文本框中指定部门的人数

其他应用
250 打开“打印”对话框 初 中 高
250 2003 / 2007 / 2010

打开“打印”对话框
◎打印数据记录技巧:DoCmd 对象、RunCommand 方法

如果需要在窗体中单击某个按钮实现打开“打印”对话框,可以通过
DoCmd 对象的 RunCommand 方法来实现,其具体的语法格式如下:
DoCmd.RunCommand acCmdPrint

◎应用实例
素材\第 8 章\打开“打印”对话框.accdb

本例需要在“F_打印”窗体中单击“打印”按钮后,打开系统内置的“打
印”对话框。

◎案例操作

01 在“F_打印”窗体中添加“打 02 为“F_打印”窗体添加“cmd_
印”按钮。 打印_Click”事件过程。

03 在“cmd_打印_Click”事件 04 执行程序过程查看程序运行
过程中添加代码。 效果。

441
Access VBA 活用范例大辞典

◎过程源代码
统计和打印

源文件\第 8 章\打开“打印”对话框.accdb

在事件过程中编写对应的 VBA 代码,打开“打印”对话框,其具体的


VBA 代码如下。
'打开系统内置“打印”对话框
Private Sub cmd_打印_Click()
数据交换

'出错时跳转至“不能打印”标签
On Error GoTo 不能打印
'打开内置“打印”对话框
DoCmd.RunCommand acCmdPrint
'出错时执行操作,将其放置在条件参数为 False 的 IF 语句中 _
其他应用

避免程序执行 IF 语句中的语句
If 1 = 0 Then
不能打印:
MsgBox "当前不能够执行打印操作!"
End If
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_打印”窗体的视图模式切换到窗体视图,
单击“打印”按钮,即可打开系统内置的“打印”对话框,其结果如图 8-6
所示。

图 8-6 打开系统内置的“打印”对话框

442
Chapter 08 数据记录的统计和打印技巧

251 打印窗体当前的显示页 初 中 高
251 2003 / 2007 / 2010

统计和打印
打印窗体当前的显示页
◎打印数据记录技巧:DoCmd 对象、PrintOut 方法、OpenForm 方法

如果需要打印当前窗体的显示页,
可以使用 DoCmd 对象的 OpenForm 方
法打开需要打印的窗体,其具体的语法如下所示:

数据交换
DoCmd.OpenForm "[窗体名]"
打开需要打印的窗体之后,可以使用 DoCmd 对象的 PrintOut 方法打印
当前窗体的显示页,其具体的语法如下所示:
DoCmd.PrintOut acSelection

其他应用
◎应用实例
素材\第 8 章\打印窗体当前的显示页.accdb

本例需要在“F_打印”窗体单击“打印”按钮后,打印“F_员工工资”
窗体的当前显示页。

◎案例操作

01 在“F_打印”窗体中添加“打 02 为“F_打印”窗体添加“cmd_
印”按钮。 打印_Click”事件过程。

03 在“cmd_打印_Click”事件 04 执行程序过程查看程序运行
过程中添加代码。 效果。

◎过程源代码
源文件\第 8 章\打印窗体当前的显示页.accdb

在事件过程中编写对应的 VBA 代码,打开窗体,执行打印操作,其具


体的 VBA 代码如下。
'打印“F_员工工资”窗体当前显示页
Private Sub cmd_打印_Click()

443
Access VBA 活用范例大辞典

'打开窗体
DoCmd.OpenForm "F_员工工资"
统计和打印

'打印选中部分
DoCmd.PrintOut acSelection
End Sub

◎执行过程
数据交换

保存编写的 VBA 代码,将“F_打印”窗体的视图模式切换到窗体视图,


单击“打印”按钮,可以执行打印操作,打印出来的结果如 8-7 右图所示。
其他应用

图 8-7 打开指定窗体的当前显示页

252 打印数据表中的数据 初 中 高
252 2003 / 2007 / 2010

打印数据表中的数据
◎打印数据记录技巧:DoCmd 对象、PrintOut 方法、OpenTable 方法

打印数据表中数据与打印窗体中数据的方法基本相同,首先需要打开需
要打印的数据表,其具体的语法格式如下所示:
DoCmd.OpenTable "[表名]"

◎应用实例
素材\第 8 章\打印数据表中的数据.accdb

本例需要在“F_打印”窗体单击“打印”按钮后,打印数据表“员工基
本资料”中的数据。

444
Chapter 08 数据记录的统计和打印技巧

◎案例操作

统计和打印
01 在“F_打印”窗体中添加“打 02 为“F_打印”窗体添加“cmd_
印”按钮。 打印_Click”事件过程。

03 在“cmd_打印_Click”事件 04 执行程序过程查看程序运行

数据交换
过程中添加代码。 效果。

◎过程源代码
源文件\第 8 章\打印数据表中的数据.accdb

其他应用
在事件过程中编写对应的 VBA 代码,打开数据表,执行打印操作,其
具体的 VBA 代码如下。
'打印"员工基本资料"数据表中的数据
Private Sub cmd_打印_Click()
'打开"员工基本资料"数据表
DoCmd.OpenTable "员工基本资料"
'打印数据表中的数据
DoCmd.PrintOut acPages
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_打印”窗体的视图模式切换到窗体视图,
单击“打印”按钮,即可执行打印操作,打印出来的结果如图 8-8 所示。

图 8-8 打印“员工基本资料”数据表的效果

445
Access VBA 活用范例大辞典

253 将报表内容打印成彩色 初 中 高
253 2003 / 2007 / 2010
统计和打印

将报表内容打印成彩色
◎打印数据记录技巧:DoCmd 对象、Printer 对象、ColorMode 属性

如果需要通过 VBA 代码更改报表打印的颜色,需要在 VBA 代码中使用


OpenReport 方法和 ColorMode 属性来实现。其具体的语法格式如下所示:
数据交换

Reports("[报表名]").Printer.ColorMode = [颜色常量]
ColorMode 属性的可选颜色常量有两个,分别为 acPRCMColor(彩色)
和 acPRCMMonochrome(黑白)

其他应用

◎应用实例
素材\第 8 章\将报表内容打印成彩色.accdb

本例需要在“F_打印”窗体中单击“彩色”按钮后,
“R_生活健康用品”
报表的对应色彩模式更改为“彩色”模式。

◎案例操作

01 在“F_打印”窗体中添加“彩 02 为“F_打印”窗体添加“cmd_
色”按钮。 彩色_Click”事件过程。

03 在“cmd_彩色_Click”事件 04 执行程序过程查看程序运行
过程中添加代码。 效果。

◎过程源代码
源文件\第 8 章\将报表内容打印成彩色.accdb

在事件过程中编写对应的 VBA 代码,打开报表,更改打印色彩模式,


其具体的 VBA 代码如下。
'更改打印色彩模式为彩色
Private Sub cmd_彩色_Click()
'以预览模式打开报表

446
Chapter 08 数据记录的统计和打印技巧

DoCmd.OpenReport "R_生活健康用品", acViewPreview


'更改打印色彩模式为彩色

统计和打印
Reports("R_生活健康用品").Printer.ColorMode = acPRCMColor
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_打印”窗体的视图模式切换到窗体视图,

数据交换
单击“彩色”按钮,即可更改报表对应的色彩模式,图 8-9 所示为单击“色
彩”按钮前后报表的对应色彩模式。

其他应用

图 8-9 单击“彩色”按钮前后的报表打印色彩模式

254 设置打印页面的大小 初 中 高
254 2003 / 2007 / 2010

设置打印页面的大小
◎打印数据记录技巧:DoCmd 对象、Printer 对象、PaperSize 属性

如果想要通过 VBA 代码更改报表打印的纸张大小,需要在 VBA 代码中


使用 OpenReport 方法和 PaperSize 属性来实现。其具体的语法格式如下所示:
Reports("[报表名]").Printer.PaperSize = [纸张大小常量]
不同的打印机支持的纸张大小常量不同,如果设置的纸张常量是打印机
不支持的纸张大小,则该设置不会起作用。

447
Access VBA 活用范例大辞典

◎应用实例
统计和打印

素材\第 8 章\设置打印页面的大小.accdb

本例需要在“F_打印”窗体中单击“B5”按钮后,
“R_生活健康用品”
报表对应的纸张大小设置为“B5”

◎案例操作
数据交换

01 在“F_打印”
窗体中添加
“B5” 02 为 “ F_ 打 印 ” 窗 体 添 加
按钮。 “cmd_B5_Click”事件过程。

03 在“cmd_B5_Click”事件过 04 执行程序过程查看程序运行
其他应用

程中添加代码。 效果。

◎过程源代码
源文件\第 8 章\设置打印页面的大小.accdb

在事件过程中编写对应的 VBA 代码,打开对话框获取报表名称,更改


打印纸张大小,其具体的 VBA 代码如下。
'将报表打印纸张设置为 B5
Private Sub cmd_B5_Click()
Dim Str As String
On Error Resume Next
'通过对话框得到欲设置的报表名称
Str = InputBox("请输入报表名称")
'以预览视图打开报表
DoCmd.OpenReport Str, acViewPreview
'设置打印的纸张大小
Reports(Str).Printer.PaperSize = acPRPSEnvB5
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_打印”窗体的视图模式切换到窗体视图,
单击“B5”按钮,即可更改指定报表的纸张大小为 B5,如图 8-10 所示。

448
Chapter 08 数据记录的统计和打印技巧

统计和打印
数据交换
图 8-10 更改指定报表的纸张大小

255 设置报表打印的页边距

其他应用
初 中 高
255 2003 / 2007 / 2010

设置报表打印的页边距
◎打印数据记录技巧:DoCmd 对象、Printer 对象、PaperSize 属性

如果需要在窗体中通过在文本框中输入值设置报表打印的页边距,需要
以打印预览视图打开报表,然后在报表 Printer 对象的 TopMargin 属性、
BottomMargin 属性、LeftMargin 属性和 RightMargin 属性中进行设置,其中
设置上边距的具体的语法格式为:
Reports("[报表名]").Printer.TopMargin =[文本框名]*56.7
其余 3 个方向的边距设置与此相同,在文本框名称之后乘以 56.7,是为
了将一般的数值转换为页边距设置时需要的值,相当于单位转换。

报表打印有默认的最小边距,当设置的边距小于默认边距时,系统会以
默认的最小边距进行打印。

◎应用实例
素材\第 8 章\设置报表打印的页边距.accdb

本例需要在“F_页边距设置”窗体中单击“设置”按钮后,以打印预览
视图模式打开“R_生活健康用品”报表,并将其页边距设置为窗体中对应文
本框中的值。

449
Access VBA 活用范例大辞典

◎案例操作
统计和打印

01 在“F_页边距设置”窗体添 02 为 窗 体 添 加 “ cmd_ 设 置
加 4 个文本框和“设置”按钮。 _Click”事件过程。

03 在“cmd_设置_Click”事件 04 执行程序过程查看程序运行
数据交换

过程中添加代码。 效果。

◎过程源代码
源文件\第 8 章\设置报表打印的页边距.accdb
其他应用

在事件过程中编写对应的 VBA 代码,出错时打开提示对话框,以打印


预览视图模式打开“R_生活健康用品”报表,设置页边距,其具体的 VBA
代码如下。
'在窗体中设置报表的页边距
Private Sub 设置_Click()
'没有设置页边距或页边距设置错误时出错
On Error GoTo 设置错误
'以打印预览视图打开报表“R_生活健康用品”
DoCmd.OpenReport "R_生活健康用品", acViewPreview
'设置报表“R_生活健康用品”上边距
Reports("R_生活健康用品").Printer.TopMargin = txt_上 * 56.7
'设置报表“R_生活健康用品”下边距
Reports("R_生活健康用品").Printer.BottomMargin = txt_下 * 56.7
'设置报表“R_生活健康用品”左边距
Reports("R_生活健康用品").Printer.LeftMargin = txt_左 * 56.7
'设置报表“R_生活健康用品”右边距
Reports("R_生活健康用品").Printer.RightMargin = txt_右 * 56.7
If 0 Then
设置错误:
'出错时打开错误提示
MsgBox "页边距没有设置完整或设置错误!"
End If
End Sub

450
Chapter 08 数据记录的统计和打印技巧

◎执行过程

统计和打印
保存编写的 VBA 代码,将“F_页边距设置”窗体的视图模式切换到窗
体视图,在文本框中输入需要设置的页边距,单击“设置”按钮即可保存设
置,如图 8-11 所示。

数据交换
其他应用

图 8-11 设置报表的页边距

初 中 高
256 2003 / 2007 / 2010

在报表页脚设置打印页码
◎打印数据记录技巧:Format 事件、Page 属性、Mod()函数

如果想要在打印报表时,实现根据奇偶页设置报表的页码,需要在报表
页面页脚的 Format 事件中进行设置,该事件的具体语法格式如下所示:
Private Sub 页面页脚_ Format (…)
[过程代码]
End Sub
需要使用报表的 Page 属性来得到报表当前页的页码,并将其设置到用于
显示页码标签的 Caption 属性中去。

判断页码的奇偶性,需要使用 Mod()函数来实现。

451
Access VBA 活用范例大辞典

◎应用实例
统计和打印

素材\第 8 章\在报表页脚设置打印页码.accdb

本例需要在“R_生活健康用品”报表中根据奇偶页的不同,在报表页脚
不同的位置显示页码。

◎案例操作
数据交换

01 将报表切换至设计视图,在 02 为 报 表 添 加 “ 页 面 页 脚
页面页脚区域插入两个标签。 _Format”事件过程。

03 在“页面页脚_Format”事件 04 执行程序过程查看程序运行
其他应用

过程中添加代码。 效果。

◎过程源代码
源文件\第 8 章\在报表页脚设置打印页码.accdb

在事件过程中编写对应的 VBA 代码,判断报表当前页的奇偶性,设置


页码显示位置,其具体的 VBA 代码如下。
'根据报表页码的奇偶性在不同位置显示页码
Private Sub 页面页脚_Format(Cancel As Integer, FormatCount As Integer)
Dim sPage As String
'获得页码字符串
sPage = "第" & Me.Page & "页"
'判断报表当前页的奇偶性
If Me.Page Mod 2 Then
'报表当前页码为奇数时,在右边显示页码
Me.lab_右.Caption = sPage
Me.lab_左.Caption = ""
Else
'报表当前页码为偶数时,在左边显示页码
Me.lab_左.Caption = sPage
Me.lab_右.Caption = ""
End If
End Sub

452
Chapter 08 数据记录的统计和打印技巧

◎执行过程

统计和打印
保存编写的 VBA 代码,将“R_生活健康用品”报表的视图模式切换到
打印预览,最终效果如图 8-12 所示。

数据交换
其他应用

图 8-12 根据报表页码的奇偶性在不同位置显示页码

257 在报表页面打印水印效果 初 中 高
257 2003 / 2007 / 2010

在报表页面打印水印效果
◎打印数据记录技巧:Format 事件、Print 方法、RGB()函数

在打印报表时,如果需要为打印出的报表设置文字水印,可以在报表主
体的 Format 事件中进行设置,与页眉页脚的 Format 事件的语法格式相同。
在该事件中,可以通过 Report 的 Print 方法设置打印文字,并通过其属性设
置打印字体的具体格式。

◎应用实例
素材\第 8 章\在报表页面打印水印效果.accdb

本例需要在“R_生活健康用品”报表中,为每一条记录添加上“内部文

453
Access VBA 活用范例大辞典

件 禁止传阅”字样的水印。
统计和打印

◎案例操作

01 将报表切换至设计视图,为 02 在“主体_Format”事件过程
报表添加“主体_Format”事件。 中添加代码。
数据交换

03 执行程序过程查看程序运行
效果。

◎过程源代码
其他应用

源文件\第 8 章\在报表页面打印水印效果.accdb

在事件过程中编写对应的 VBA 代码,设置水印文字的字体格式、位置、


颜色和内容等,其具体的 VBA 代码如下。
'为报表设置文字水印
Private Sub 主体_Format(Cancel As Integer, FormatCount As Integer)
With Report
'设置水印字体
.FontName = "华文隶书"
'设置水印左上角坐标
.CurrentX = 6
.CurrentY = 456
'设置水印字体大小
.FontSize = 66
'水印加粗
.FontBold = True
'水印倾斜
.FontItalic = True
'水印颜色
.ForeColor = RGB(214, 214, 214)
'水印文字
.Print ("内部文件 禁止传阅")
End With
End Sub

454
Chapter 08 数据记录的统计和打印技巧

◎执行过程

统计和打印
保存编写的 VBA 代码,将“R_生活健康用品”报表的视图模式切换到
打印预览,最终效果如图 8-13 所示。

数据交换
其他应用
图 8-13 为报表添加的水印在打印预览时的效果

258 将指定数据圈释出来打印 初 中 高
258 2003 / 2007 / 2010

将指定数据圈释出来打印
◎打印数据记录技巧:Format 事件、Circle 方法、RGB()函数

如果需要在打印报表时,将报表中满足特定条件的某个字段数据圈释出
来,可以在报表主体的 Format 事件中进行设置。

首先使用 If 语句判断记录中的数据是否满足指定条件,满足则在需要的
位置画椭圆,不满足的则忽略。

画椭圆需要使用到 Circle 方法,该方法的具体语法如下所示:


[对象名].Circle ([圆心坐标]),[半径],[颜色], , , [长短轴比]
为了使得所画椭圆刚好能够圈中满足条件的数据,需要引用指定字段对
应文本框的位置,如左边距(Left)
、上边距(Top)
、高度(Height)和宽度
(Width)等等,其具体的语法格式为:
Me.[字段名].[属性]
在 Format 事件中设置的实践过程,针对的是报表中的每一条记录。所以,
该事件会对报表中的每一条记录作用一次,使得记录中所有满足条件的记录
455
Access VBA 活用范例大辞典

均会被圈释出来。
统计和打印

◎应用实例
素材\第 8 章\将指定数据圈释出来打印.accdb

本例需要在“R_生活健康用品”报表中,圈释零售价大于 20 元的数据。

◎案例操作
数据交换

01 将报表切换至设计视图,为 02 在“主体_Format”事件过程
报表添加“主体_Format”事件。 中添加代码。
其他应用

03 执行程序过程查看程序运行
效果。

◎过程源代码
源文件\第 8 章\将指定数据圈释出来打印.accdb

在事件过程中编写对应的 VBA 代码,得到零售价大于 20 元所在的文


本框中心位置及宽度,根据得到的高度和宽度画椭圆,其具体的 VBA 代码
如下。
'圈释零售价大于 20 元的数据
Private Sub 主体_Format(Cancel As Integer, FormatCount As Integer)
Dim sH As Single
Dim sV As Single
Dim sW As Single
'判断记录的零售价是否大于 20 元
If Me.零售价 >= 20 Then
With Me.零售价
'得到零售价大于 20 元的零售价文本框中心位置
sH = .Left + .Width / 2
sV = .Top + .Height / 2
'得到零售价大于 20 元的零售价文本框的宽度
sW = .Width / 2
End With

456
Chapter 08 数据记录的统计和打印技巧

'为满足条件的零售价画椭圆
Me.Circle (sH, sV), sW, RGB(214, 214, 214), , , 0.28

统计和打印
End If
End Sub

◎执行过程
保存编写的 VBA 代码,将“R_生活健康用品”报表的视图模式切换到

数据交换
打印预览,最终效果如图 8-14 所示。

其他应用

图 8-14 圈释零售价大于 20 元的数据

457
Chapter 09
Access 与其他 Office 组件之间的数据交换技巧

虽然 Access 的功能比较强大,但是其在数据和文字处理上,
依然与 Excel 和 Word 等有着不小的差距。同时,人们也更习惯使
用后者来对数据和文字进行处理。
因此,使用 Access 实现与 Office 其他的专业办公软件进行数
据交流,就显得十分必要了。本章主要介绍如何实现 Access 与
Word 和 Excel 之间的数据交换。

▼主要内容
◎Access 与 Word 之间的数据读写
CreateObject()函数、Add 方法、New 关键字、Visible 属性……
◎Access 与 Excel 之间的数据读写
Open 方法、GetObject 方法、Insert 方法、Offset 方法……

▼涉及案例
◎创建基于模板的 Word 文档
◎通过 TypeText 方法向 Word 写入数据
◎通过文档属性将 Access 数据合并到 Word
◎通过 Word 书签将 Access 数据合并到 Word
◎将 Access 的数据导入 Excel 表格
◎将窗体中的数据写入工作表编辑区
◎为数据表添加边框效果
◎获取单元格中的数据
……
Chapter 09 Access 与其他 Office 组件之间的数据交换技巧

259 通过 Access 创建空白 Word 文档(1) 初 中 高


259 2003 / 2007 / 2010

统计和打印
通过 Access 创建空白 Word 文档(1)
◎Access 与 Word 之间的数据读写:CreateObject()函数、Add 方法

如果需要通过 Access 创建空白 Word 文档,可以使用 CreatObject()函数


和 Add 方法来实现,其具体的语法格式如下所示:

数据交换
Set [对象变量 1] = CreateObject("word.application")
Set [对象变量 2] = [对象变量 2].Documents.Add
通过上面的语法格式编写代码,可以新建一个 Word 应用程序,并为其
新增一个文档。

其他应用
◎应用实例
素材\第 9 章\通过 Access 创建空白 Word 文档(1).accdb

本例需要通过单击“F_创建 word 文档”窗体中的“新建 word 文档”按


钮,创建一个空白的 Word 文档。

◎案例操作

01 在“F_创建 word 文档”窗体 02 为“F_创建 word 文档”窗体


中插入“新建 word 文档”按钮。 添加“cmd_word_Click”事件。

03 在“cmd_word_Click”事件 04 执行程序过程查看程序运行
过程中添加代码。 效果。

◎过程源代码
源文件\第 9 章\通过 Access 创建空白 Word 文档(1).accdb

在事件过程中编写对应的 VBA 代码,调用 Word 应用程序,设置应用程


序的可视状态为 True,在其中新建 Word 空白文档,具体的 VBA 代码如下。

459
Access VBA 活用范例大辞典

'新建一个空白的 Word 文档
Private Sub cmd_word_Click()
统计和打印

'定义两个对象
Dim wordApp As Object
Dim wordDoc As Object
'创建 Word 应用程序
Set wordApp = CreateObject("word.application")
'创建的 Word 应用程序设置为可视
数据交换

wordApp.Visible = True
'在 Word 应用程序中新建空白 Word 文档
Set wordDoc = wordApp.Documents.Add
'释放对象空间
Set wordApp = Nothing
其他应用

Set wordDoc = Nothing


End Sub

◎执行过程
保存编写的 VBA 代码,将“F_创建 word 文档”窗体的视图模式切换到
窗体视图,单击“新建 word 文档”按钮,即可创建一个空白的 Word 文档,
如图 9-1 所示。

图 9-1 创建空白 Word 文档

提示:创建的 Word 文档的版本问题


通过本例中的方法创建的空白 Word 文档,其版本与用户电脑 Word 的系统设置
有关,新建的空白 Word 文档与默认的系统打开 Word 文档的版本相同。本例创
建的为 Word 2010 版本的空白文档。

460
Chapter 09 Access 与其他 Office 组件之间的数据交换技巧

260 通过 Access 创建空白 Word 文档(2) 初 中 高


260 2003 / 2007 / 2010

统计和打印
通过 Access 创建空白 Word 文档(2)
◎Access 与 Word 之间的数据读写:CreateObject()函数、Add 方法

通过 Access 创建空白 Word 文档,除了采用的定义对象的方法来创建空


白文档外,还可以通过定义 Word 应用程序对象和文档对象来实现,其具体

数据交换
的定义语法如下所示:
Dim [变量名 1] As Word.Application
Dim [变量名 2] As Word.Document
定义 Word 应用程序对象和文档对象需要在引用“Microsoft Word 14.0

其他应用
Object Library”支持库后才能够使用。

◎应用实例
素材\第 9 章\通过 Access 创建空白 Word 文档(2).accdb

本例需要通过单击“F_创建 word 文档”窗体中的“创建 word 文档”按


钮,创建一个空白的 Word 文档。

◎案例操作

01 在“F_创建 word 文档”窗体 02 为“F_创建 word 文档”窗体


中插入“创建 word 文档”按钮。 添加“cmd_word_Click”事件。

03 在“cmd_word_Click”事件 04 执行程序过程查看程序运行
过程中添加代码。 效果。

◎过程源代码
源文件\第 9 章\通过 Access 创建空白 Word 文档(2).accdb

在事件过程中编写对应的 VBA 代码,创建 Word 应用程序对象并添加空


白文档,设置应用程序可视状态为 True,具体的 VBA 代码如下。

461
Access VBA 活用范例大辞典

'创建一个空白的 Word 文档
Private Sub cmd_word_Click()
统计和打印

'定义两个具体的对象
Dim wordApp As Word.Application
Dim wordDoc As Word.Document
'创建 Word 应用程序对象并添加空白文档
Set wordApp = CreateObject("word.application")
数据交换

Set wordDoc = wordApp.Documents.Add


'设置 Word 应用程序可以状态为真
wordApp.Visible = True
End Sub

◎执行过程
其他应用

保存编写的 VBA 代码,将“F_创建 word 文档”窗体的视图模式切换到


窗体视图,单击“创建 word 文档”按钮,即可创建一个空白的 Word 文档,
如图 9-2 所示。

图 9-2 创建空白 Word 文档

261 通过 Access 创建空白 Word 文档(3) 初 中 高


261 2003 / 2007 / 2010

通过 Access 创建空白 Word 文档(3)


◎Access 与 Word 之间的数据读写:New 关键字、Visible 属性

通过 Access 创建空白 Word 文档,也可以在定义 Word 对象,使用 New


关键字实现新的 Word 应用程序及文档的创建,其具体的语法格式如下所示:

462
Chapter 09 Access 与其他 Office 组件之间的数据交换技巧

Dim [变量名] As New Word.Application


使用该方法在定义 Word 应用程序和文档的对象时,同样需要引用

统计和打印
“Microsoft Word 14.0 Object Library”支持库。

◎应用实例
素材\第 9 章\通过 Access 创建空白 Word 文档(3).accdb

数据交换
本例需要通过单击“F_创建 word 文档”窗体中的“创建 word 文档”按
钮,创建一个空白的 Word 文档。

◎案例操作

其他应用
01 在“F_创建 word 文档”窗体 02 为“F_创建 word 文档”窗体
中插入“创建 word 文档”按钮。 添加“cmd_word_Click”事件。

03 在“cmd_word_Click”事件 04 执行程序过程查看程序运行
过程中添加代码。 效果。

◎过程源代码
源文件\第 9 章\通过 Access 创建空白 Word 文档(3).accdb

在事件过程中编写对应的 VBA 代码,通过 New 关键字创建 Word 应用


程序对象,添加空白文档并将其设置为可视,具体的 VBA 代码如下。
'创建一个空白的 Word 文档
Private Sub cmd_word_Click()
'定义 Word 应用程序对象时使用 New 关键字
Dim wordApp As New Word.Application
Dim wordDoc As Word.Document
'创建空白 Word 文档
wordApp.Documents.Add
wordApp.Visible = True
'释放对象空间
Set wordApp = Nothing
Set wordDoc = Nothing
End Sub

463
Access VBA 活用范例大辞典

◎执行过程
统计和打印

保存编写的 VBA 代码,将“F_创建 word 文档”窗体的视图模式切换到


窗体视图,单击“创建 word 文档”按钮,即可创建一个空白的 Word 文档,
如图 9-3 所示。
数据交换
其他应用

图 9-3 创建空白 Word 文档

262 创建基于模板的 Word 文档 初 中 高


262 2003 / 2007 / 2010

创建基于模板的 Word 文档
◎Access 与 Word 之间的数据读写:Add 方法、Path 属性

通过 Access 创建基于指定模板的 Word 文档,需要在为 Word 应用程序


创建文档时,使用模板的地址来指定创建文档基于的模板,其具体的语法格
式如下所示:
[应用程序名].Documents.Add( [模板地址])
模板的地址可以直接通过文本字符串来指定。地址的指定常见的形式有
两种,绝对地址和相对地址。

本例中通过 CurrentProject 对象的 Path 属性来得到当前数据库文件的地


址,然后通过该地址来得到 Word 模板的地址,其具体的语法格式如下所示:
CurrentProject.Path & "\[模板名].dotx"
本例中使用的是 Word 2010,模板文件的后缀为“.dotx”。如果使用的
Word 2003 以及更早版本,需要使用后缀为“.dot”的模板文件。

464
Chapter 09 Access 与其他 Office 组件之间的数据交换技巧

◎应用实例

统计和打印
素材\第 9 章\创建基于模板的 Word 文档\

本例需要通过单击“F_创建 word 文档”窗体中的“基于模板创建 word


文档”按钮,根据当前数据文件相同目录下的模板“示例模板.dotx”创建
Word 文档。

数据交换
◎案例操作

01 在窗体中插入“基于模板创 02 为“F_创建 word 文档”窗体


建 word 文档”按钮。 添加“cmd_word_Click”事件

其他应用
03 在“cmd_word_Click”事件 04 执行程序过程查看程序运行
过程中添加代码。 效果。

◎过程源代码
源文件\第 9 章\创建基于模板的 Word 文档\

在事件过程中编写对应的 VBA 代码,创建 Word 应用程序并添加基于指


定模板的文档,设置应用程序可视状态为 True,具体的 VBA 代码如下。
Private Sub cmd_word_Click()
'使用 New 关键字创建 Word 应用程序
Dim wordApp As New Word.Application
Dim wordDoc As Word.Document
Dim str As String
'获取当前文件的路径
str = CurrentProject.Path & "\示例模板.dotx"
'创建基于指定地址的模板的 Word 文档
Set wordDoc = wordApp.Documents.Add(str, False)
'设置 Word 应用程序可视状态为 True
wordApp.Visible = True
Set wordApp = Nothing
Set wordDoc = Nothing
End Sub

465
Access VBA 活用范例大辞典

◎执行过程
统计和打印

保存编写的 VBA 代码,将“F_创建 word 文档”窗体的视图模式切换到


窗体视图,单击“基于模板创建 word 文档”按钮,创建一个基于模板的 Word
文档,如图 9-4 所示。
数据交换
其他应用

图 9-4 创建基于模板的 Word 文档

263 打开指定的 Word 文档 初 中 高


263 2003 / 2007 / 2010

打开指定的 Word 文档
◎Access 与 Word 之间的数据读写:Open 方法、Path 属性

通过 Access 打开已经创建的 Word 文档,需要使用到 Documents 对象的


Open 方法,其具体的语法格式如下所示:
[应用程序名].Documents.Open([文件地址])
文件地址的指定方法采用与实例 262 相同的方法。

◎应用实例
素材\第 9 章\打开指定的 Word 文档\

本例需要通过单击“F_打开 word 文档”窗体中的“打开 word 文档”按


钮,打开当前数据库文件所在目录下名称为“示例文档.docx”的 Word 文件。

466
Chapter 09 Access 与其他 Office 组件之间的数据交换技巧

◎案例操作

统计和打印
01 在窗体中插入“打开 word 02 为窗体添加“cmd_word
文档”按钮。 _Click”事件过程。

03 在“cmd_word_Click”事 04 执行程序过程查看程序运
件过程中添加代码。 行效果。

数据交换
◎过程源代码
源文件\第 9 章\打开指定的 Word 文档\

在事件过程中编写对应的 VBA 代码,先获取待打开文档的保存路径,

其他应用
再使用 Open 方法打开该文档,具体的 VBA 代码如下。
'打开指定的 Word 文档
Private Sub cmd_word_Click()
On Error GoTo 不存在
'使用 New 关键字创建 Word 应用程序
Dim wordApp As New Word.Application
Dim wordDoc As Word.Document
Dim str As String
'获取需要打开的 Word 文档的路径
str = CurrentProject.Path & "\示例文档.docx"
'打开指定的 Word
Set wordDoc = wordApp.Documents.Open(str)
If 0 Then
不存在:
MsgBox "指定文件不存在"
Exit Sub
End If
'设置 Word 应用程序可视状态为 True
wordApp.Visible = True
Set wordApp = Nothing
Set wordDoc = Nothing
End Sub

467
Access VBA 活用范例大辞典

◎执行过程
统计和打印

保存编写的 VBA 代码,将“F_打开 word 文档”窗体的视图模式切换到


窗体视图,单击“打开 word 文档”按钮,打开指定位置的 Word 文档,
如图 9-5 所示。
数据交换
其他应用

图 9-5 打开指定的 Word 文档

264 通过 TypeText 方法向 Word 写入数据 初 中 高


264 2003 / 2007 / 2010

通过 TypeText 方法向 Word 写入数据


◎Access 与 Word 之间的数据读写:TypeText 方法、Save 方法

在 Access 中,向 Word 中写入数据,可以使用 TypeText 方法,其具体的


语法格式如下所示:
Selection.TypeText Text:=[写入内容]
在向指定的 Word 文档中写入数据时,需要先打开 Word 文档,其具体的
方法见实例 263。

为了避免每次写入数据均创建一个新的 Word 应用程序,可以先使用


GetObjec 方法得到已经打开的 Word 应用程序,其具体的语法如下所示:
GetObject(, "Word.Application")
在文档中写入数据后,还需要保存向文档中写入的内容,这可以使用
Save 方法,其具体的语法如下所示:

468
Chapter 09 Access 与其他 Office 组件之间的数据交换技巧

[对象].Save

统计和打印
◎应用实例
素材\第 9 章\通过 TypeText 方法向 Word 写入数据\

本例需要在单击按钮后,将“F_保存至 Word”窗体内文本框中的数据
保存至当前数据库文档相同路径下的“示例文档.doct”中。

数据交换
◎案例操作

01 在窗体中插入文本框和“保 02 为窗体添加“cmd_word
存至‘示例文档.docx’
”按钮。 _Click”事件过程。

其他应用
03 在“cmd_word_Click”事件 04 执行程序过程查看程序运行
过程中添加代码。 效果。

◎过程源代码
源文件\第 9 章\通过 TypeText 方法向 Word 写入数据\

在事件过程中编写对应的 VBA 代码,创建 Word 应用程序并打开指定的


Word 文档,将文本框中的文本输入到文档中,具体的 VBA 代码如下。
'将文本框中的内容保存至“示例文档.docx”中
Private Sub cmd_word_Click()
'Word 应用程序没有启动时出错,跳转至标签“创建”
On Error GoTo 创建
Dim WdApp As Word.Application
Dim WdDoc As Word.Document
Dim StrAdr As String
'得到需要打开的文档的地址
StrAdr = CurrentProject.Path & "\示例文档.docx"
'使用已经启用的 Word 应用程序,可避免打开多个 Word 应用程序
Set WdApp = GetObject(, "Word.Application")
'在 Word 应用程序中打开指定文档
Set WdDoc = WdApp.Documents.Open(StrAdr)
WdApp.Visible = True
'设置 Word 文档的内容

469
Access VBA 活用范例大辞典

With WdApp.Selection
'设置输入文字字体
统计和打印

.Font.Name = "微软雅黑"
.Font.Size = 20
'将文本框中的内同写入“示例文档.docx”文档中
.TypeText Text:=txt_写入
'新增一个段落
数据交换

.TypeParagraph
End With
创建:
If Err = 429 Then
'没有打开 Word 应用程序时,创建一个 Word 应用程序
Set WdApp = CreateObject("Word.Application")
其他应用

'跳转至出错程序的下一行代码,继续执行程序代码
Resume Next
End If
'保存文档
WdDoc.Save
Set WdApp = Nothing
Set wddpc = Nothing
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_保存至 Word”窗体的视图模式切换到窗
体视图,在文本框中输入要保存至“示例文档.docx”中的数据,单击“保存
至‘示例文档.docx’
”按钮,如图 9-6 所示。

图 9-6 保存数据指定的 Word 文档

470
Chapter 09 Access 与其他 Office 组件之间的数据交换技巧

265 在 Word 中插入表格 初 中 高


265 2003 / 2007 / 2010

统计和打印
在 Word 中插入表格
◎Access 与 Word 之间的数据读写:Tables 对象、Path 属性

向 Word 中插入表格,需要使用 Word 文档的 Tables 对象的 Add 方法来


为文档添加表格,其具体的语法格式如下所示:

数据交换
[Word 文档].Tables.Add
在创建表格的时候,还可以通过 Selection 变量的 Range 属性来设置新建
表格的行数和列数,其具体的语法格式如下所示:
Selection.Range, [行数],[列数]

其他应用
通过上述代码可以实现指定行数和列数的表格的创建,但是创建的表格
的边框是不可见的,这时可以通过下面的代码来设置表格的边框,使其呈可
见状态:
For Each atable In WdDoc.Tables
atable.Borders.OutsideLineStyle = wdLineStyleSingle
atable.Borders.InsideLineStyle = wdLineStyleSingle
Next atable

◎应用实例
素材\第 9 章\在 Word 中插入表格\

本例需要在“示例文档.docx”中插入指定行数和列数的表格。

◎案例操作

01 在窗体中插入文本框和“插 02 为窗体添加“cmd_插入表格
入表格”按钮。 _Click”事件过程。

03 在“cmd_插入表格_Click” 04 执行程序过程查看程序运行
事件过程中添加代码。 效果。

471
Access VBA 活用范例大辞典

◎过程源代码
统计和打印

源文件\第 9 章\在 Word 中插入表格\

在事件过程中编写对应的 VBA 代码,创建 Word 应用程序并打开指定的


Word 文档,插入指定行数和列数的表格,设置表格的内外边框,具体的 VBA
代码如下。
数据交换

Private Sub cmd_插入表格_Click()


Dim WdApp As Word.Application
Dim WdDoc As Word.Document
Dim StrAdr As String
'获取“示例文档.docx”文档的地址
StrAdr = CurrentProject.Path & "\示例文档.docx"
其他应用

'应用启动的 Word 应用程序


Set WdApp = GetObject(, "Word.Application")
Set WdDoc = WdApp.Documents.Open(StrAdr)
WdApp.Visible = True
'在 Word 文档中创建窗体中文本框中设置的行列数的表格
WdDoc.Tables.Add Selection.Range, txt_行, txt_列
'为表格添加边框
For Each atable In WdDoc.Tables
atable.Borders.OutsideLineStyle = wdLineStyleSingle
atable.Borders.InsideLineStyle = wdLineStyleSingle
Next atable
创建:
If Err = 429 Then
'当前没有已经启动的 Word 应用程序时,创建新的 Word 应用程序
Set WdApp = CreateObject("Word.Application")
Resume Next
End If
'保存文档
WdDoc.Save
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_插入表格至 Word”窗体的视图模式切换
到窗体视图,在文本框中输入欲插入的表格的行数和列数,单击“插入表格”

472
Chapter 09 Access 与其他 Office 组件之间的数据交换技巧

按钮,如图 9-7 所示。

统计和打印
数据交换
图 9-7 插入指定行数和列数的表格至指定的文档

266 将 Access 的数据导入 Word 文档 初 中 高


266 2003 / 2007 / 2010

将 Access 的数据导入 Word 文档

其他应用
◎Access 与 Word 之间的数据读写:Tables 对象、MoveRight 方法

向 Word 文档中的表格添加数据,在不知道具体需要多少行的时候,可
以先创建一个一行多列的表格,
再使用 MoveRight 方法在表格中添加数据后,
向右移动一个单元格,其具体的语法如下所示:
Selection.MoveRight wdCell
使用上述的代码,可以每次向右移动一个单元格,移动至每一行最右边
后,自动跳转至下一行的第一个单元格;当下一行没有单元格时,自动创建
一行表格。

◎应用实例
素材\第 9 章\将 Access 的数据导入 Word 文档\

本例需要将“T_员工基本资料”表中的姓名和联系电话导出至“示例文
档.docx”中,并使用一个一行多列的表格来保存数据。

◎案例操作

01 在窗体中插入“导出联系电 02 为窗体添加“cmd_联系电话
话”按钮。 _Click”事件过程。

473
Access VBA 活用范例大辞典

03 在“cmd_联系电话_Click” 04 执行程序过程查看程序运行
统计和打印

事件过程中添加代码。 效果。

◎过程源代码
源文件\第 9 章\将 Access 的数据导入 Word 文档\
数据交换

在事件过程中编写对应的 VBA 代码,创建 Word 应用程序并打开指定的


Word 文档,插入一行两列的表格,在表格中输入表头和员工姓名和联系电话,
具体的 VBA 代码如下。
'将“T_员工基本资料”中的员工姓名和联系电话导出制作通讯录
其他应用

Private Sub cmd_联系电话_Click()


On Error GoTo 创建
Dim WdApp As Word.Application
Dim WdDoc As Word.Document
Dim StrAdr As String
Dim Db As DAO.Database
Dim rs As DAO.Recordset
Set Db = CurrentDb
Set rs = Db.OpenRecordset("T_员工基本资料")
'打开 Word 文档“示例文档.docx”
StrAdr = CurrentProject.Path & "\示例文档.docx"
Set WdApp = GetObject(, "Word.Application")
Set WdDoc = WdApp.Documents.Open(StrAdr)
WdApp.Visible = True
'创建 1 行 2 列的表格,并为其添加边框
WdDoc.Tables.Add Selection.Range, 1, 2
For Each atable In WdDoc.Tables
atable.Borders.OutsideLineStyle = wdLineStyleSingle
atable.Borders.InsideLineStyle = wdLineStyleSingle
Next atable
'将数据表“T_员工基本信息”中的数据添加到表格中
Set Db = CurrentDb
Set rs = Db.OpenRecordset("T_员工基本资料")
With WdApp.Selection
'为表格添加表头

474
Chapter 09 Access 与其他 Office 组件之间的数据交换技巧

.TypeText "姓名"
'添加一个姓名之后向右移动一个单元格

统计和打印
.MoveRight wdCell
.TypeText "联系电话"
.MoveRight wdCell
'为表格添加数据表中的数据
Do While rs.EOF = False

数据交换
.TypeText rs![姓名]
.MoveRight wdCell
.TypeText rs![联系电话]
.MoveRight wdCell
rs.MoveNext
Loop

其他应用
End With
'删除表格的最后的空行
WdApp.Selection.Rows.Delete
'没有打开 Word 应用程序时创建新的 Word 应用程序
创建:
If Err = 429 Then
Set WdApp = CreateObject("Word.Application")
Resume Next
End If
WdDoc.Save
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_制作联系电话表”窗体的视图模式切换
到窗体视图,单击“导出联系电话”按钮,如图 9-8 所示。

图 9-8 导出数据表中的部分数据到 Word 文档的表格中

475
Access VBA 活用范例大辞典

267 通过文档属性将 Access 数据合并到 Word 初 中 高


267 2003 / 2007 / 2010
统计和打印

通过文档属性将 Access 数据合并到 Word


◎Access 与 Word 之间的数据读写:Item 方法、Update 方法

通过 VBA 代码,可以在 Word 文档中使用自定义文本属性设置的域中写


入值。这需要使用 Word 文档 CustomDocumentProperties 属性的 Item 方法来
数据交换

进行设置,其具体的语法格式如下所示:
[Word 文档].CustomDocumentProperties _
.Item("[文档属性]").Value=[写入值]
使用上述代码写入的值,还保存在 Word 文档属性之中,还需要使用
其他应用

WholeStory 方法选中整个文档,其具体的语法格式如下所示:
Selection.WholeStory
然后使用 Fields 属性的 Update 方法更新 Word 文档中的所有域,其具体
的语法格式如下所示:
Selection.Fields.Update
最后保存通过模板和文档属性制作出的 Word 文档,可以使用 Word 文档
的 SaveAs2 方法以指定的文件名保存文档至指定位置,其具体的语法格式如
下所示:
[Word 文档].SaveAs2 [保存后的完整路径]

◎应用实例
素材\第 9 章\通过文档属性将 Access 数据合并到 Word\

本例需要通过在文本框中通过记录的 ID 选择指定的记录,然后单击“制
作收条”按钮,制作出该条销售记录的收条,并根据购买单位和记录 ID 保
存该收条至当前文件夹。

◎案例操作

01 在“F_收条”窗体中插入“ID” 02 为窗体添加“txt_ID_After
文本框。 Update”事件过程。

476
Chapter 09 Access 与其他 Office 组件之间的数据交换技巧

03 在“F_收条”窗体中插入“制 04 为 窗 体 添 加 “ cmd_ 收 条

统计和打印
作收条”按钮。 _Click”事件过程。

05 在事件过程中添加对应的程 06 执行程序过程查看程序运行
序代码。 效果。

数据交换
◎过程源代码
源文件\第 9 章\通过文档属性将 Access 数据合并到 Word\

在事件过程中编写对应的 VBA 代码,


通过 ID 号跳转至指定的销售记录,

其他应用
根据“收条.dotx”模板创建 Word 文档,将当前窗体字段设置到 Word 文档对
应的文档属性中,更新整个文本的域,保存文档,其具体的 VBA 代码如下
所示。
'获取指定 ID 的销售记录
Private Sub txt_ID_AfterUpdate()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb()
Set rs = db.OpenRecordset("Q_收条", dbOpenDynaset)
rs.FindFirst "[ID]=" & txt_ID
If rs.NoMatch = True Then
MsgBox "没有指定编号的记录"
Else
Me.Bookmark = rs.Bookmark
End If
End Sub

'通过文档属性制作当前销售记录的收条
Private Sub cmd_收条_Click()
Dim wordApp As New Word.Application
Dim wordDoc As Word.Document
Dim str As String
'根据“收条.dotx”模板创建新的 Word 文档
str = CurrentProject.Path & "\收条.dotx"

477
Access VBA 活用范例大辞典

Set wordDoc = wordApp.Documents.Add(str, False)


wordApp.Visible = True
统计和打印

'将当前窗体中的字段合并到新建的文档的对应的域之中
With wordDoc.CustomDocumentProperties
.Item("购买单位").Value = Forms!F_收条!购买单位
.Item("购买数量").Value = Forms!F_收条!名称 _
& Forms!F_收条!数量 & "件"
数据交换

.Item("金额").Value = Format(Forms!F_收条!金额, "#,000.00")


.Item("售出单位").Value = Forms!F_收条!售出单位
.Item("付款期").Value = Forms!F_收条!付款期
End With
'更新文档中的域
With wordApp.Selection
其他应用

.WholeStory
.Fields.Update
End With
'保存创建好的收条在当前文件夹中,根据购买单位和记录 ID 命名
wordDoc.SaveAs2 CurrentProject.Path & "\收条("& Forms!F_收条!购买单位 _
& ")" & Forms!F_收条!txt_ID
Set wordDoc = Nothing
Set wordApp = Nothing
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_收条”窗体的视图模式切换到窗体视图,
单击“制作收条”按钮,如图 9-9 所示。

图 9-9 通过文本属性制作当前窗体中记录的收条

478
Chapter 09 Access 与其他 Office 组件之间的数据交换技巧

提示:插入文本属性的域

统计和打印
在 Word 2010 中,设置自定义文本属性的方法为:执行“文件/信息/属性/高级
属性/自定义”命令。
在文本中插入自定义文本属性的域的方法为:执行“插入/文本/文本部件/域/域
名(DocProperty)”命令。本例中所用模板“收条.dotx”中设置的自定义文本
属性域如图 9-10 所示。

数据交换
域:购买单位

其他应用
域:购买数量
域:金额 域:售出单位

域:付款期

图 9-10 本例中涉及的域的域名及其范围

268 通过 Word 书签将 Access 数据合并到 Word 初 中 高


268 2003 / 2007 / 2010

通过 Word 书签将 Access 数据合并到 Word


◎Access 与 Word 之间的数据读写:Goto 方法、TypeText 方法

通过 VBA 代码,可以向 Word 文档中书签指定的位置添加指定的内容。


其具体过程有两个步骤。

首先,需要使用 GoTo 方法跳转至指定的书签位置,其具体的语法如下


所示:
Selection.Goto what:=wdGoToBookmark, Name:= "[书签名]"
然后,使用 TypeText 方法在该书签位置写入数据,其具体的语法格式如
下所示:
Selection.TypeText [写入输入]

479
Access VBA 活用范例大辞典

◎应用实例
统计和打印

素材\第 9 章\通过 Word 书签将 Access 数据合并到 Word\

本例需要在文本框中通过记录的 ID 选择指定的记录,然后单击“制作
收条”按钮,制作出该条销售记录的收条,并将制作出的收条以“收条+ID”
的命名方式保存至当前文件夹中。
数据交换

◎案例操作

01 在“F_收条”窗体中插入“ID” 02 为窗体添加“txt_ID_After
文本框。 Update”事件过程。
其他应用

03 在“F_收条”窗体中插入“制 04 为 窗 体 添 加 “ cmd_ 收 条
作收条”按钮。 _Click”事件过程。

05 在事件过程中添加对应的程 06 执行程序过程查看程序运行
序代码。 效果。

◎过程源代码
源文件\第 9 章\通过 Word 书签将 Access 数据合并到 Word\

在事件过程中编写对应的 VBA 代码,通过 ID 号跳转至指定的销售记录


(代码见实例 267 代码的第一段)
,根据“收条.dotx”模板创建 Word 文档,
将当前窗体的字段写入到文档对应的书签中,保存文档,其具体的 VBA 代
码如下所示。
'通过书签制作当前销售记录的收据
Private Sub cmd_收条_Click()
Dim wordApp As New Word.Application
Dim wordDoc As Word.Document
Dim str As String
'根据当前文件夹中的“收条.docx”创建新的文档
str = CurrentProject.Path & "\收条.dotx"
Set wordDoc = wordApp.Documents.Add(str, False)

480
Chapter 09 Access 与其他 Office 组件之间的数据交换技巧

wordApp.Visible = True
'在对应的书签位置插入当前窗体的字段

统计和打印
With wordApp.Selection
.Goto what:=wdGoToBookmark, Name:="购买单位"
.TypeText Forms!F_收条!购买单位
.Goto what:=wdGoToBookmark, Name:="名称及数量"
.TypeText Forms!F_收条![名称] & Forms!F_收条!数量 & "件"

数据交换
.Goto what:=wdGoToBookmark, Name:="金额"
.TypeText Format(Forms!F_收条!金额, "#,000.00")
.Goto what:=wdGoToBookmark, Name:="售出单位"
.TypeText Forms!F_收条!售出单位
.Goto what:=wdGoToBookmark, Name:="付款期"
.TypeText Forms!F_收条!付款期

其他应用
End With
'保存制作的收条到当前的文件夹,并以“收条+ID"的形式命名
wordDoc.SaveAs2 CurrentProject.Path & "\收条_" & Forms!F_收条!txt_ID
Set wordApp = Nothing
Set wordDoc = Nothing
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_收条”窗体的视图模式切换到窗体视图,
单击“制作收条”按钮,如图 9-11 所示。

图 9-11 通过书签制作当前窗体中记录的收条

481
Access VBA 活用范例大辞典
统计和打印

提示:在文档中插入书签
在 Word 2010 中,如果要插入书签,直接单击“插入”选项卡,在“链接”组中
单击“书签”按钮,在打开的对话框中可添加指定名称的书签。本例中使用的模
板“收条.dotx”中设置的书签如图 9-12 所示。
数据交换

书签:
购买单位
书签:金额
其他应用

书签:名称及数量 书签:售出单位

书签:付款期

图 9-12 本例中涉及的书签的位置及其名称

269 使用通用方法启动 Exce1 应用程序 初 中 高


269 2003 / 2007 / 2010

使用通用方法 Excel 应用程序


◎Access 与 Excel 之间的数据读写:Shell()函数

使用 Shell()函数可以打开指定位置的可执行文件,比如“Excel.exe”
,其
具体的语法如下所示:
Shell("[可执行文件路径]")
使用 Shell()函数打开应用程序的方法可移植性较差,在其他电脑上可能
不能够执行。

◎应用实例
素材\第 9 章\使用通用方法 Exce1 应用程序.accdb

本例需要使用 Shell()函数打开 Excel 应用程序。

482
Chapter 09 Access 与其他 Office 组件之间的数据交换技巧

◎案例操作

统计和打印
01 在“F_启动 Excel”窗体中插 02 为 窗 体 添 加 “ cmd_ 启 动
入“启动 Excel”按钮。 Excel_Click”事件过程。

03 在事件过程中添加对应的程 04 执行程序过程,查看程序运

数据交换
序代码。 行效果。

◎过程源代码
源文件\第 9 章\使用通用方法 Exce1 应用程序.accdb

其他应用
在事件过程中编写对应的 VBA 代码,打开指定位置的“Excel.exe”可
执行文件,其具体的 VBA 代码如下所示。
'启动 Excel 应用程序
Private Sub cmd_启动 Excel_Click()
Dim VSheet As Variant
'打开指定位置的应用程序
VSheet = Shell("C:\Program Files\Office14\Excel.exe")
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_启动 Excel”窗体的视图模式切换到窗体
视图,单击“启动 Excel”按钮,可以启动 Excel,如图 9-13 所示。

图 9-13 启动 Excel

483
Access VBA 活用范例大辞典

270 启动 Excel 应用程序并新建工作簿 初 中 高


270 2003 / 2007 / 2010
统计和打印

启动 Excel 应用程序并新建工作簿
◎Access 与 Excel 之间的数据读写:New 关键字、Add 方法

在 Access 中,可以通过引用“Microsoft Excel 14.0 Object Library”支持


库,实现在 Access 中灵活地操作 Excel,本书涉及 Excel 的代码一般都需要
数据交换

使用该支持库的才能够运行。

启动 Excel 的方法与启动 Word 的方法相似,具体可参见实例 259~实例


262。本例介绍使用 New 关键字和 Add 方法启动 Excel。
其他应用

◎应用实例
素材\第 9 章\启动 Excel 应用程序.accdb

本例需要使用 New 关键字打开 Excel 应用程序,


并新建一个空白工作簿。

◎案例操作

01 在“F_启动 Excel”窗体中插 02 为 窗 体 添 加 “ cmd_ 启 动


入“启动 Excel”按钮。 _Click”事件过程。

03 在事件过程中添加对应的程 04 执行程序过程查看程序运行
序代码。 效果。

◎过程源代码
源文件\第 9 章\启动 Excel 应用程序.accdb

在事件过程中编写对应的 VBA 代码,打开指定位置的“Excel.exe”可


执行文件,其具体的 VBA 代码如下所示。
'启动 Excel
Private Sub cmd_启动_Click()
'在定义变量时使用 New 关键字新建 Excel 应用程序
Dim xlApp As New Excel.Application

484
Chapter 09 Access 与其他 Office 组件之间的数据交换技巧

Dim xlWbk As Excel.Workbook


'在 Excel 应用程序中新增工作簿

统计和打印
Set xlWbk = xlApp.Workbooks.Add
'设置 Excel 应用程序可视状态为 True
xlApp.Visible = True
End Sub

◎执行过程

数据交换
保存编写的 VBA 代码,将“F_启动 Excel”窗体的视图模式切换到窗体
视图,单击“启动 Excel”按钮,可以启动 Excel,如图 9-14 所示。

其他应用

图 9-14 通过支持库启动 Excel

271 打开已经存在的工作簿 初 中 高
271 2003 / 2007 / 2010

打开已经存在的工作簿
◎Access 与 Excel 之间的数据读写:Open 方法、GetObject 方法

在 Access 中,如果需要打开已经存在的 Excel 工作簿,可以使用 Excel


应用程序工作簿集合对象的 Open 方法,其具体的语法格式如下所示:
[Excel 应用程序].Workbooks.Open("[工作簿路径]")

◎应用实例
素材\第 9 章\打开已经存在的工作簿\

本例需要打开与数据库文件在同一路径下的“示例工作簿.xlsx”

485
Access VBA 活用范例大辞典

◎案例操作
统计和打印

01 在“F_打开工作簿”窗体中 02 为 窗 体 添 加 “ cmd_ 打 开
插入“打开工作簿”按钮。 _Click”事件过程。

03 在事件过程中添加对应的程 04 执行程序过程,查看程序运
数据交换

序代码。 行效果。

◎过程源代码
源文件\第 9 章\打开已经存在的工作簿\
其他应用

在事件过程中编写对应的 VBA 代码,启动 Excel,打开当前文件夹下的


工作簿,其具体的 VBA 代码如下所示。
'打开已经存在的 Excel 应用程序
Private Sub cmd_打开_Click()
On Error GoTo 创建
Dim xlAPP As Excel.Application
Dim xlWbk As Excel.Workbook
'获取已经启用的 Excel 应用程序
Set xlAPP = GetObject(, "Excel.Application")
'设置 Excel 应用程序可视状态为 True
xlAPP.Visible = True
'打开指定当前文件夹下的“示例工作簿.xlsx”文件
Set xlWbk = xlAPP.Workbooks.Open(CurrentProject.Path _
& "\示例工作簿.xlsx")
'释放变量
Set xlAPP = Nothing
Set xlWbk = Nothing
'当前没有已经打开的 Excel 应用程序时,打开新的 Excel 应用程序
创建:
If Err = 429 Then
Set xlAPP = CreateObject("Excel.Application")
Resume Next
End If
End Sub

486
Chapter 09 Access 与其他 Office 组件之间的数据交换技巧

◎执行过程

统计和打印
保存编写的 VBA 代码,将“F_打开工作簿”窗体的视图模式切换到窗
体视图,单击“打开工作簿”按钮,可以打开“示例工作簿.xlsx”工作簿,
如图 9-15 所示。

数据交换
其他应用
图 9-15 打开“示例工作簿.xlsx”工作簿

272 激活指定工作表 初 中 高
272 2003 / 2007 / 2010

激活指定工作表
◎Access 与 Excel 之间的数据读写:Worksheets 集合、Activate 方法

在 Access 中,可以使用工作簿中工作表集合对象来获取指定的工作表,
其具体的语法格式如下所示:
[Excel 工作簿].Worksheets ("[工作表名或索引号]")
获取指定的工作表之后,可以使用 Activate 方法来激活指定的工作表,
其具体的语法格式如下所示:
[Excel 工作表].Activate

◎应用实例
素材\第 9 章\激活指定工作表\

本例需要打开当前文件夹下的“示例工作簿.xlsx”工作簿,然后激活该
工作簿中的“员工档案”工作表。

487
Access VBA 活用范例大辞典

◎案例操作
统计和打印

01 在“F_激活工作表”窗体中 02 为 窗 体 添 加 “ cmd_ 引 用
插入“激活工作表”按钮。 _Click”事件过程。

03 在事件过程中添加对应的程 04 执行程序过程,查看程序运
数据交换

序代码。 行效果。

◎过程源代码
源文件\第 9 章\激活指定工作表\
其他应用

在事件过程中编写对应的 VBA 代码,启动 Excel,打开当前文件夹下的


工作簿,其具体的 VBA 代码如下所示。
'激活指定的工作表
Private Sub cmd_引用_Click()
On Error GoTo 创建
Dim xlApp As Excel.Application
Dim xlWbk As Excel.Workbook
Dim xlWsh As Excel.Worksheet
Set xlApp = GetObject(, "Excel.Application")
xlApp.Visible = True
'打开当前文件夹下的“示例工作簿.xlsx”
Set xlWbk = xlApp.Workbooks.Open(CurrentProject.Path _
& "\示例工作簿.xlsx")
'获取打开工作簿中的“员工档案”
Set xlWsh = xlWbk.Worksheets("员工档案")
'激活工作表
xlWsh.Activate
Set xlWsh = Nothing
Set xlWbk = Nothing
Set xlApp = Nothing
创建:
If Err = 429 Then
Set xlApp = CreateObject("Excel.Application")
Resume Next

488
Chapter 09 Access 与其他 Office 组件之间的数据交换技巧

End If
End Sub

统计和打印
◎执行过程
保存编写的 VBA 代码,将“F_激活工作表”窗体的视图模式切换到窗
体视图,单击“激活工作表”按钮,即可打开“示例工作簿.xlsx”工作簿并
激活“员工档案”工作表,如图 9-16 所示。

数据交换
其他应用

图 9-16 激活工作簿中的“员工档案”工作表

273 向单元格输入数据 初 中 高
273 2003 / 2007 / 2010

向单元格输入数据
◎Access 与 Excel 之间的数据读写:Range 对象、Value 属性

在 Access 中,可以使用工作表的 Range 对象及其 Value 属性,为工作表


中指定的单元格添加数据,其具体的语法格式如下所示:
[Excel 工作表].Range ("[单元格地址]").Value="[输入数据]"
在向工作簿中输入数据之后,一般还需要对工作簿进行保存,可以使用
Save 方法来实现,其具体的语法格式如下所示:
[Excel 工作簿].Save

◎应用实例
素材\第 9 章\向单元格输入数据\

本例需要在“示例工作簿.xlsx”工作簿的第二个工作表中指定的单元格

489
Access VBA 活用范例大辞典

中输入数据。
统计和打印

◎案例操作

01 在“F_输入数据”窗体中插 02 为 窗 体 添 加 “ cmd_ 输 入
入文本框和“输入 Excel”按钮。 _Click”事件过程。
数据交换

03 在事件过程中添加对应的程 04 执行程序过程,查看程序运
序代码。 行效果。

◎过程源代码
其他应用

源文件\第 9 章\向单元格输入数据\

在事件过程中编写对应的 VBA 代码,启动 Excel,打开指定工作簿并激


活第二个工作表,在其中输入数据,其具体的 VBA 代码如下所示。
'将窗体中文本框中的数据输入到指定文本框中
Private Sub cmd_输入_Click()
On Error GoTo 创建
Dim xlApp As Excel.Application
Dim xlWbk As Excel.Workbook
Dim xlWsh As Excel.Worksheet
Dim strRange As String
'获取需要输入值的单元格地址
strRange = InputBox("请输入把文本框中的数据输入的单元格")
'激活“示例工作簿.xlsx”的第 2 个工作表
Set xlApp = GetObject(, "Excel.Application")
xlApp.Visible = True
Set xlWbk = xlApp.Workbooks.Open(CurrentProject.Path _
& "\示例工作簿.xlsx")
Set xlWsh = xlWbk.Worksheets(2)
xlWsh.Activate
'在指定单元格中输入文本框中的数据
xlWsh.Range(strRange).Value = Me!txt_数据
'保存工作簿
xlWbk.Save

490
Chapter 09 Access 与其他 Office 组件之间的数据交换技巧

Set xlWsh = Nothing


Set xlWbk = Nothing

统计和打印
Set xlApp = Nothing
创建:
If Err = 429 Then
Set xlApp = CreateObject("Excel.Application")
Resume Next

数据交换
End If
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_输入数据”窗体的视图模式切换到窗体
视图,在文本框中输入数据,单击“输入 Excel”按钮,在打开的对话框中

其他应用
输入单元格地址,即可在工作簿第二个工作表中输入数据,如图 9-17 所示。

图 9-17 在工作表指定单元格输入数据

274 将 Access 的数据导入 Excel 表格 初 中 高


274 2003 / 2007 / 2010

将 Access 的数据导入 Excel 表格


◎Access 与 Excel 之间的数据读写:TransferSpreadsheet 方法

在 Access 中,可以使用 DoCmd 对象的 TransferSpreadsheet 方法,将数


据库中的表或者查询中的数据导入到 Excel 表格中,其具体的语法格式如下
所示:

491
Access VBA 活用范例大辞典

DoCmd.TransferSpreadsheet acExport, , _
"[导出的表或者查询]", "[导入的 Excel 表格路径]", True
统计和打印

◎应用实例
素材\第 9 章\将 Access 的数据导入 Excel 表格\

本例需要将数据库“Q_员工工资核算”查询中的数据导入到 Excel 表格
数据交换

中。为了方便,本例对导出的 Excel 文件采用“示例工作簿+随机数”的方式


命名。

◎案例操作

01 在“F_员工工资核算”窗体 02 为 窗 体 添 加 “ cmd_ 导 出
其他应用

中插入“导出到 Excel”按钮。 _Click”事件过程。

03 在事件过程中添加对应的程 04 执行程序过程,查看程序运
序代码。 行效果。

◎过程源代码
源文件\第 9 章\将 Access 的数据导入 Excel 表格\

在事件过程中编写对应的 VBA 代码,获取导出到的 Excel 路径,导出数


据,其具体的 VBA 代码如下所示。
'将 Access 的数据导入 Excel 表格
Private Sub cmd_导出_Click()
Dim xlPath As String
'设置导出 Excel 工作簿的每次
xlPath = CurrentProject.Path & "\示例工作簿" & Int(Rnd * 1000) & ".xlsx"
'将“Q_员工工资核算”查询中的数据导出到 Excel 中
DoCmd.TransferSpreadsheet acExport, , "Q_员工工资核算", xlPath, True
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_员工工资核算”窗体的视图模式切换到

492
Chapter 09 Access 与其他 Office 组件之间的数据交换技巧

窗体视图,单击“导出到 Excel”按钮,效果如图 9-18 所示。

统计和打印
数据交换
其他应用
图 9-18 将查询中的数据导入到 Excel 表格中

275 将窗体中的数据写入工作表编辑区 初 中 高
275 2003 / 2007 / 2010

将窗体中的数据写入工作表编辑区
◎Access 与 Excel 之间的数据读写:For…Next 语句、Offset 方法

将窗体中的记录集导入到 Excel 中,
首先需要导出字段名,
将其作为 Excel
表格的表头数据,这可以通过窗体中标签的 Caption 属性来实现,其具体的
语法格式如下所示:
[标签名].Caption
在获取表头之后,还需要将窗体中的记录逐条导入到 Excel 中,可以使
用 For…Next 语句来实现,其具体的语法格式如下所示:
For 计数变量=1 to [记录条数]
[导出记录代码]
Next 计数变量
在导出一条记录时,导出一个字段的数据需要跳转至下一个单元格。在
工作表中以单元格为基础进行跳转,可以使用 Offset 方法来实现,其具体的

493
Access VBA 活用范例大辞典

语法格式如下所示:
统计和打印

[基础单元格].Offset([跳转行数],[跳转列数])

◎应用实例
素材\第 9 章\将窗体中的数据写入工作表编辑区\

本例需要将 “F_员工工资核算”窗体中的记录集导入到以“员工工资
数据交换

核算”打头的 Excel 表格中。

◎案例操作

01 在“F_员工工资核算”窗体 02 为 窗 体 添 加 “ cmd_ 导 出
其他应用

中插入“导出到 Excel”按钮。 _Click”事件过程。

03 在事件过程中添加对应的程 04 执行程序过程,查看程序运
序代码。 行效果。

◎过程源代码
源文件\第 9 章\将窗体中的数据写入工作表编辑区\

在事件过程中编写对应的 VBA 代码,激活工作表,导出表头,导出记


录集,保存导出的工作簿,其具体的 VBA 代码如下所示。
'导出窗体中的记录到 Excel 中
Private Sub cmd_导出_Click()
On Error GoTo 创建
Dim xlApp As Excel.Application
Dim xlWbk As Excel.Workbook
Dim xlWsh As Excel.Worksheet
Dim Rng1 As Excel.Range
Dim Rng As Excel.Range
Dim rsNum As Integer
Dim i As Integer
Dim db As Database
Dim rs As Recordset
'激活指定工作表

494
Chapter 09 Access 与其他 Office 组件之间的数据交换技巧

Set xlApp = GetObject(, "Excel.Application")


xlApp.Visible = True

统计和打印
Set xlWbk = xlApp.Workbooks.Open(CurrentProject.Path & "\示例工作簿")
Set xlWsh = xlWbk.Worksheets(2)
xlWsh.Activate
'统计当前窗体中的记录数目
rsNum = DCount("员工编号", "Q_员工工资核算")
'将字段名称导出到 Excel 表格中作表头

数据交换
xlWsh.Range("A1").Value = Me.员工编号_Label.Caption
xlWsh.Range("B1").Value = Me.姓名_Label.Caption
xlWsh.Range("C1").Value = Me.部门_Label.Caption
xlWsh.Range("D1").Value = Me.职务_Label.Caption
xlWsh.Range("E1").Value = Me.食宿补助_Label.Caption

其他应用
xlWsh.Range("F1").Value = Me.提成_Label.Caption
xlWsh.Range("G1").Value = Me.基本工资_Label.Caption
xlWsh.Range("H1").Value = Me.出勤率_Label.Caption
xlWsh.Range("I1").Value = Me.实得工资_Label.Caption
'Excel 表格定位至 A2 单元格
Set Rng = xlWsh.Range("A2")
'窗体中的记录定位至第一条记录
DoCmd.GoToRecord , , acFirst
'逐条导出窗体中的记录
For i = 1 To rsNum
Rng.Value = Me.员工编号
'导出一个数据之后跳转至表格的同一行下一列
Set Rng = Rng.Offset(0, 1)
Rng.Value = Me.姓名
Set Rng = Rng.Offset(0, 1)
Rng.Value = Me.部门
Set Rng = Rng.Offset(0, 1)
Rng.Value = Me.职务
Set Rng = Rng.Offset(0, 1)
Rng.Value = Format(Me.食宿补助, "#,###.00")
Set Rng = Rng.Offset(0, 1)
Rng.Value = Me.提成
Set Rng = Rng.Offset(0, 1)
Rng.Value = Me.基本工资
Set Rng = Rng.Offset(0, 1)

495
Access VBA 活用范例大辞典

Rng.Value = Me.出勤率
Set Rng = Rng.Offset(0, 1)
统计和打印

Rng.Value = Me.实得工资
'一条记录导出完之后,跳转至下一行第一列
Set Rng = Rng.Offset(1, -8)
'跳转至下一条记录
DoCmd.GoToRecord acActiveDataObject, , acNext
数据交换

Next i
'另存导出的 Excel 工作簿
xlWbk.SaveAs CurrentProject.Path & "\员工工资核算" _
& Int(Rnd * 1000) & ".xlsx"
创建:
If Err = 429 Then
其他应用

Set xlApp = CreateObject("Excel.Application")


Resume Next
End If
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_员工工资核算”窗体的视图模式切换到
窗体视图,单击“导出到 Excel”按钮,效果如图 9-19 所示。

图 9-19 将窗体中的记录集导出到 Excel 中

496
Chapter 09 Access 与其他 Office 组件之间的数据交换技巧

276 在工作表顶部插入空行 初 中 高
276 2003 / 2007 / 2010

统计和打印
在工作表顶部插入空行
◎Access 与 Excel 之间的数据读写:Insert 方法

使用 Access VBA 代码在指定工作表的指定位置插入单元格,可以使用


单元格区域的 Insert 方法,其具体的语法格式如下所示:

数据交换
[参考单元格].Insert [参考单元格移动方式]

◎应用实例
素材\第 9 章\在工作表顶部插入空行\

其他应用
本例需要在 “示例工作簿.xlsx”工作簿“员工档案”工作表顶部插入一
行空行。

◎案例操作

01 在“F_插入空行”窗体中插 02 为窗体添加“cmd_插入空行
入“在顶部插入空行”按钮。 _Click”事件过程。

03 在事件过程中添加对应的程 04 执行程序过程,查看程序运
序代码。 行效果。

◎过程源代码
源文件\第 9 章\在工作表顶部插入空行\

在事件过程中编写对应的 VBA 代码,激活工作表,在指定位置插入空


行,其具体的 VBA 代码如下所示。
'在工作表的顶部插入空行
Private Sub cmd_插入空行_Click()
On Error GoTo 创建
Dim xlApp As Excel.Application
Dim xlWbk As Excel.Workbook
Dim xlWsh As Excel.Worksheet

497
Access VBA 活用范例大辞典

'获取指定的工作表
Set xlApp = GetObject(, "Excel.Application")
统计和打印

xlApp.Visible = True
Set xlWbk = xlApp.Workbooks.Open(CurrentProject.Path _
& "\示例工作簿.xlsx")
Set xlWsh = xlWbk.Worksheets("员工档案")
xlWsh.Activate
数据交换

'在工作表的第一行之前插入空白航
xlWsh.Range("1:1").Insert xlDown
Set xlWbk = Nothing : Set xlApp = Nothing
创建:
If Err = 429 Then
Set xlApp = CreateObject("Excel.Application")
其他应用

Resume Next
End If
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_插入空行”窗体的视图模式切换到窗体
视图,单击“在顶部插入空行”按钮,效果如图 9-20 所示。

图 9-20 在指定工作表的顶部插入空行

277 为数据表添加边框效果 初 中 高
277 2003 / 2007 / 2010

为数据表添加边框效果
◎Access 与 Excel 之间的数据读写:UsedRange 方法、Borders 属性

使用 UsedRange 方法可以选中工作表中已经使用的单元格区域,其具体

498
Chapter 09 Access 与其他 Office 组件之间的数据交换技巧

的语法格式如下所示:

统计和打印
[工作表名].UsedRange
设置指定单元格区域的外边框属性,可以使用区域的 BorderAround 属
性,其具体的语法格式如下所示:
[区域].BorderAround [外边框属性]
设置任意边框的属性,可以使用区域的 Borders 属性,其具体的语法格

数据交换
式如下所示:
[区域].Borders([欲设置的边框]) [边框属性]

◎应用实例

其他应用
素材\第 9 章\为数据表添加边框效果\

本例需要为 “示例工作簿.xlsx”工作簿“员工档案”工作表的已使用区
域设置边框属性。其中,外边框、垂直内边框、水平内边框需要设置不同的
属性效果。

◎案例操作

01 在“F_边框效果”窗体中插 02 为 窗 体 添 加 “ cmd_ 设 置
入“设置边框效果”按钮。 _Click”事件过程。

03 在事件过程中添加对应的程 04 执行程序过程查看程序运行
序代码。 效果。

◎过程源代码
源文件\第 9 章\为数据表添加边框效果\

在事件过程中编写对应的 VBA 代码,激活工作表,设置已使用区域外


边框效果,设置已使用区域水平和垂直的内边框效果,其具体的 VBA 代码
如下所示。
'为工作表已使用区域添加边框效果
Private Sub cmd_设置_Click()

499
Access VBA 活用范例大辞典

On Error GoTo 创建
Dim xlApp As Excel.Application
统计和打印

Dim xlWbk As Excel.Workbook


Dim xlWsh As Excel.Worksheet
'激活欲设置边框的工作表
Set xlApp = GetObject(, "Excel.Application")
xlApp.Visible = True
Set xlWbk = xlApp.Workbooks.Open(CurrentProject.Path & "\ 示 例 工 作
数据交换

簿.xlsx")
Set xlWsh = xlWbk.Worksheets("员工工资")
xlWsh.Activate
'为工作表中的已使用的区域设置边框
With xlWsh.UsedRange
其他应用

'设置工作表使用区域外边框框线的样式
.BorderAround xlContinuous, xlThick, xlColorIndexAutomatic, RGB(250,
250, 250)
'设置工作表使用区域内边框水平方向的样式
.Borders(xlInsideHorizontal).LineStyle = xlContinuous
.Borders(xlInsideHorizontal).Weight = xlMedium
.Borders(xlInsideHorizontal).Color = RGB(200, 200, 200)
'设置工作表使用区域内边框竖直方向的样式
.Borders(xlInsideVertical).Weight = xlThin
.Borders(xlInsideVertical).Color = RGB(100, 100, 100)
End With
Set xlWsh = Nothing
Set xlWbk = Nothing
Set xlApp = Nothing
创建:
If Err = 429 Then
Set xlApp = CreateObject("Excel.Application")
Resume Next
End If
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_边框效果”窗体的视图模式切换到窗体
视图,单击“设置边框效果”按钮,效果如图 9-21 所示。

500
Chapter 09 Access 与其他 Office 组件之间的数据交换技巧

统计和打印
数据交换
图 9-21 设置已使用区域的边框效果

278 对表格数据设置字体格式 初 中 高
278 2003 / 2007 / 2010

对表格数据设置字体格式

其他应用
◎Access 与 Excel 之间的数据读写:Font 对象

对 Excel 中指定位置的数据的字体格式进行设置,可以通过设置 Font 对


象的各个属性来实现,其具体的语法格式如下所示:
[区域].Font.[字体属性]=[属性值]
Font 对象的常用属性有 Name(字体名称)
、Size(字号)
、Bold(加粗)

Italic(倾斜)和 Color(颜色)等。

◎应用实例
素材\第 9 章\对表格数据设置字体格式\

本例需要为 “示例工作簿.xlsx”工作簿“员工档案”工作表的已使用区
域和表头区域分别设置字体格式。

◎案例操作

01 在“F_字体格式”窗体中插 02 为 窗 体 添 加 “ cmd_ 设 置
入“设置字体格式”按钮。 _Click”事件过程。

03 在事件过程中添加对应的程 04 执行程序过程,查看程序运
序代码。 行效果。

501
Access VBA 活用范例大辞典

◎过程源代码
统计和打印

源文件\第 9 章\对表格数据设置字体格式\

在事件过程中编写对应的 VBA 代码,激活工作表,设置已使用区域的


字体格式,设置第一行的字体格式,其具体的 VBA 代码如下所示。
'为表格数据设置字体格式
Private Sub cmd_设置_Click()
数据交换

On Error GoTo 创建
Dim xlApp As Excel.Application
Dim xlWbk As Excel.Workbook
Dim xlWsh As Excel.Worksheet
'激活工作表
其他应用

Set xlApp = GetObject(, "Excel.Application")


xlApp.Visible = True
Set xlWbk = xlApp.Workbooks.Open(CurrentProject.Path _
& "\示例工作簿.xlsx")
Set xlWsh = xlWbk.Worksheets("员工工资")
xlWsh.Activate
'设置已使用区域的字体格式和字号
With xlWsh.UsedRange
.Font.Name = "Times New Roman "
.Font.Size = 10
End With
'设置第一行的字号、字体、加粗等
With xlWsh.Range("1:1")
.Font.Size = 12
.Font.Name = "微软雅黑"
.Font.Bold = True
.Font.TintAndShade = True
End With
Set xlWsh = Nothing : Set xlWbk = Nothing : Set xlApp = Nothing
创建:
If Err = 429 Then
Set xlApp = CreateObject("Excel.Application")
Resume Next
End If
End Sub

502
Chapter 09 Access 与其他 Office 组件之间的数据交换技巧

◎执行过程

统计和打印
保存编写的 VBA 代码,将“F_字体格式”窗体的视图模式切换到窗体
视图,单击“设置字体格式”按钮,效果如图 9-22 所示。

数据交换
图 9-22 设置指定区域的字体格式

其他应用
279 设置工作表的列宽 初 中 高
279 2003 / 2007 / 2010

设置工作表的列宽
◎Access 与 Excel 之间的数据读写:ColumnWidth 属性

要对 Excel 中的指定区域进行设置,可以通过对 ColumnWidth 属性的设


置来实现,其具体的语法格式如下所示:
[区域].ColumnWidth=[列宽]

◎应用实例
素材\第 9 章\设置工作表的列宽\

本例需要为工作簿中的“员工档案”工作表的已使用区域设置列宽。

◎案例操作

01 在“F_列宽”窗体中插入“列 02 为 窗 体 添 加 “ cmd_ 设 置
宽”文本框和“设置”按钮。 _Click”事件过程。

03 在事件过程中添加对应的程 04 执行程序过程,查看程序运
序代码。 行效果。

503
Access VBA 活用范例大辞典

◎过程源代码
统计和打印

源文件\第 9 章\设置工作表的列宽\

在事件过程中编写对应的 VBA 代码,激活工作表,设置 A 列到 M 列的


列宽,其具体的 VBA 代码如下所示。
'设置当前工作簿“示例工作簿.xlsx”的“员工档案”工作表的 A:M 区域的列宽
Private Sub cmd_设置_Click()
数据交换

On Error GoTo 创建
Dim xlApp As Excel.Application
Dim xlWbk As Excel.Workbook
Dim xlWsh As Excel.Worksheet
Set xlApp = GetObject(, "Excel.Application") '激活工作表
其他应用

xlApp.Visible = True
Set xlWbk = xlApp.Workbooks.Open(CurrentProject.Path _
& "\示例工作簿.xlsx")
Set xlWsh = xlWbk.Worksheets("员工档案") : xlWsh.Activate
'设置工作表 A 列到 M 列的列宽
xlWsh.Range("A:M").ColumnWidth = txt_列宽
Set xlWsh = Nothing : Set xlWbk = Nothing : Set xlApp = Nothing
创建:
If Err = 429 Then
Set xlApp = CreateObject("Excel.Application") : Resume Next
End If
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_列宽”窗体的视图模式切换到窗体视图,
单击“设置”按钮,效果如图 9-23 所示。

图 9-23 设置已使用区域的列宽

504
Chapter 09 Access 与其他 Office 组件之间的数据交换技巧

280 获取单元格中的数据 初 中 高
280 2003 / 2007 / 2010

统计和打印
获取单元格中的数据
◎Access 与 Excel 之间的数据读写:Cells 属性

如果需要引用工作表中指定单元格的数据,可以使用工作表的 Cells 属
性,其具体的语法格式如下所示:

数据交换
[工作表].Cells([行号],[列号])
向列表框添加新的选项,需要将列表框的行来源类型设置为值列表,然
后通过 AddItem 方法进行添加,其具体的语法格式如下所示:
[列表框].AddItem [新的选项]

其他应用
◎应用实例
素材\第 9 章\获取单元格中的数据\

本例中,需要引用工作表中的员工姓名作为列表框的值。

◎案例操作

01 在“F_获取 Excel 数据”窗 02 为 窗 体 添 加 “ cmd_ 引 用


体中插入列表框和按钮。 _Click”事件过程。

03 在事件过程中添加对应的程 04 执行程序过程,查看程序运
序代码。 行效果。

◎过程源代码
源文件\第 9 章\获取单元格中的数据\

在事件过程中编写对应的 VBA 代码,获取工作表,引用工作表中的单


元格,其具体的 VBA 代码如下所示。
'引用工作簿中指定单元格的值
Private Sub cmd_引用_Click()
On Error GoTo 错误

505
Access VBA 活用范例大辞典

Dim xlWbk As Excel.Workbook


Dim xlWsh As Excel.Worksheet
统计和打印

Dim i As Integer
'打开工作表
Set xlWbk = GetObject(CurrentProject.Path & "\示例工作簿.xlsx")
Set xlWsh = xlWbk.Worksheets("员工档案")
'将列表框的行来源类型设置为值列表
数据交换

Lst_员工.RowSourceType = "Value List"


'清空列表框中的值
Lst_员工.RowSource = ""
'获取工作表中指定单元格的数据
For i = 2 To 19
Lst_员工.AddItem xlWsh.Cells(i, 2)
其他应用

Next i
'保存并关闭工作簿
xlWbk.Save: xlWbk.Close
Set xlWsh = Nothing
Set xlWbk = Nothing
Exit Sub
错误:
MsgBox Err.Description, , "出错了!"
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_获取 Excel 数据”窗体的视图模式切换到
窗体视图,单击“获取员工列表”按钮,效果如图 9-24 所示。

图 9-24 获取工作表中的数据

506
Chapter 10
其他的操作技巧

Access VBA 的功能强大,通过它可以开发出各种各样的数据


库应用程序。Access 中的功能也十分繁多,虽然前面的章节中介
绍了一些常用的操作及其技巧,但是仍然有些多实用的技巧没有
涉及到。
本章便需要介绍前面章节中没有涉及的一些操作技巧,如文
件的操作、Web 与 XML 的应用和超链接的应用等。

▼主要内容
◎文件的操作
OpenTextFile 方法、ReadLine 方法、ReadLine 方法、FileDialog 属性……
◎Web 与 XML 的应用
HyperlinkAddress 属性、TransferText 方法、ExportXML 方法……
◎超链接的应用
Hyperlink 属性、Address 属性、ScreenTip 属性……

▼涉及案例
◎从文本文件读取数据
◎将文本文件中的数据导入数据表中
◎通过对话框打开文件
◎修改指定位置的文件的名称
◎通过邮件将数据库对象寄出去
◎将表或者查询导出为 HTML
◎显示超链接连接的位置
◎通过超链接打开本地文件
……
Access VBA 活用范例大辞典

281 从文本文件读取数据 初 中 高
281 2003 / 2007 / 2010
统计和打印

从文本文件读取数据
◎文件的操作:OpenTextFile 方法、ReadLine 方法、ReadLine 方法

如果要在 Access 中使用文本文件,应创建一个对记事本的引用,可以


使用 CreatObject()函数和 OpenTextFile 方法来实现,其具体的语法格式如下
数据交换

所示:
Set [对象 1]=CreateObject("Scripting.FileSystemObject")
Set [对象 2]=[对象 1].OpenTextFile([文本文件路径])
Scripting 为脚本运行库 Scripting Runtime Library,通过它可以操作文本
其他应用

文件、文件夹和驱动器。

引用文本文件中的整行,需要使用 ReadLine 方法,其具体的语法格式为:


[文本文件对象].ReadLine

◎应用实例
素材\第 10 章\从文本文件读取数据.accdb、选项文本.txt

本例中,需要读取当前数据库相同目录下的“选项文本.txt”文本文件中
的数据,并将其中的数据作为“F_读取 txt”窗体中组合框的行来源。

◎案例操作

01 在“F_读取 txt”窗体中插入 02 为“F_读取 txt”窗体添加


“Txt 选项”组合框。 “Form_Load”事件过程。

03 在“Form_Load”事件过程中 04 执行程序过程,查看程序运
添加代码。 行效果。

◎过程源代码
源文件\第 10 章\从文本文件读取数据.accdb、选项文本.txt

在事件过程中编写对应的 VBA 代码,引用指定位置的文本文件,读取

508
Chapter 10 其他的操作技巧

文本文件的数据,将读取的数据设置为组合框的数据源,具体的 VBA 代码
如下。

统计和打印
'将文本文件中的值设置为组合框的选项
Private Sub Form_Load()
Dim ObjFile As Object
Dim myFile As Object
'引用指定位置的文本文件

数据交换
Set ObjFile = CreateObject("Scripting.FileSystemObject")
Set myFile = ObjFile.OpenTextFile(CurrentProject.Path & "\选项文本.txt", 1)
'将组合框的行来源类型设置为“值列表”
cmb_txt.RowSourceType = "Value List"
'将组合框的行来源设置为文本文件的一整行

其他应用
cmb_txt.RowSource = myFile.ReadLine
'关闭文本文件,释放对象
myFile.Close
Set ObjFile = Nothing
Set myFile = Nothing
End Sub

◎执行过程
保存编写的 VBA 代码,重新加载“F_读取 txt”窗体,如图 10-1 所示。

图 10-1 读取文本文件中的数据作为组合框的选项

282 将文本文件中的数据导入数据表中 初 中 高
282 2003 / 2007 / 2010

将文本文件中的数据导入数据表中
◎文件的操作:TransferText 方法

如果需要将文本文件中的数据导入到数据表中,可以使用 DoCmd 对象

509
Access VBA 活用范例大辞典

的 TransferText 方法,其具体的语法格式为:
统计和打印

DoCmd.TransferText , ,[表名],[文本文件路径],[是否包含字段名]
TransferText 方法的第一个参数采用了默认值,表示将文本文件中的值导
入;
“是否包含字段名”参数是指文本文件的第一行是字段名还是普通数据,
当该参数取 True 时,文本文件的第一行被当作字段名导入。
数据交换

◎应用实例
素材\第 10 章\将文本文件中的数据导入数据表中.accdb、学生信息.txt

本例中,需要在文本文件中写入需要新增至数据表中的数据后,单击
“F_txt 到数据表”窗体中的“txt 到数据表”按钮后,将文本文件中的数据导
其他应用

入到“T_学生信息”表中。

◎案例操作

01 在“F_txt 到数据表”窗体中 02 为“F_txt 到数据表”窗体添


插入“txt 到数据表”按钮。 加“cmd_txt_Click”事件。

03 在“cmd_txt_Click”事件过 04 执行程序过程,查看程序运
程中添加代码。 行效果。

◎过程源代码
源文件\第 10 章\将文本文件中的数据导入数据表中.accdb、学生信息.txt

在事件过程中编写对应的 VBA 代码,获取文本文件路径,将文本文件


的数据导入到数据表中,具体的 VBA 代码如下。
'将文本文件中的数据添加至数据表中
Private Sub cmd_txt_Click()
Dim txtName As String
'获取文本文件的路径
txtName = InputBox("请输入导出的 txt 文件的名字:", , "学生信息")
txtName = CurrentProject.Path & "\" & txtName & ".txt"
'将文本文件中的数据写入到“T_学生信息”表中
'其中文本文件第一行包含字段名

510
Chapter 10 其他的操作技巧

DoCmd.TransferText , , "T_学生信息", txtName, 1


End Sub

统计和打印
◎执行过程
保存编写的 VBA 代码,单击“F_txt 到数据表”窗体中的“txt 到数据表”
按钮,如 10-2 上图所示,可以将“学生信息.txt”文本文件中的数据导入到
“T_学生信息”表中,如 10-2 下图所示。

数据交换
其他应用

图 10-2 将文本文档中的数据导入到数据表中

283 将窗体中的数据保存至文本文档中 初 中 高
283 2003 / 2007 / 2010

将窗体中的数据保存至文本文档中
◎文件的操作:TransferText 方法

如果要将表或者查询中的数据保存到文本文件中,可以使用 DoCmd 对
象的 TransferText 方法,其具体的语法格式为:
DoCmd.TransferText acExportDelim, ,[表或查询名],[文本文件路径]
如果要将窗体的记录集导出到文本文件中,可以将表或者查询名设置为
窗体的记录源,即“Me.RecordSource”

◎应用实例
素材\第 10 章\将窗体中的数据保存至文本文档中.accdb

本例中,需要将“F_学生信息”窗体中的数据保存至当前文件夹下的文

511
Access VBA 活用范例大辞典

本文件中。
统计和打印

◎案例操作

01 在“F_学生信息”窗体中插 02 为“F_学生信息”窗体添加
入“到 Txt”按钮。 “cmd_到 Txt_Click”事件过程。
数据交换

03 在“cmd_到 Txt_Click”事件 04 执行程序过程,查看程序运


过程中添加代码。 行效果。

◎过程源代码
其他应用

源文件\第 10 章\将窗体中的数据保存至文本文档中.accdb、窗体数据.txt

在事件过程中编写对应的 VBA 代码,设置导入的文本文件的名称,将


当前窗体记录源中的数据导入文本文件中,具体的 VBA 代码如下。
'将窗体中的数据保存至文本文档中
Private Sub cmd_到 Txt_Click()
Dim txtName As String
'设置导入的文本文件名称
txtName = InputBox("请输入导出的 txt 文件的名字:")
txtName = CurrentProject.Path & "\" & txtName & ".txt"
'将窗体中的数据导入到文本文件中
DoCmd.TransferText acExportDelim, , Me.RecordSource, txtName, 1
End Sub

◎执行过程
保存编写的 VBA 代码,单击“F_学生信息”窗体中的“到 Txt”按钮,
设置文本文件的名称,如图 10-3 所示,最终的效果如图 10-4 所示。

图 10-3 将窗体中的数据保存至文本文档中

512
Chapter 10 其他的操作技巧

统计和打印
图 10-4 导入到文本文件中的数据

数据交换
284 使用对话框选择文件 初 中 高
284 2003 / 2007 / 2010

使用对话框选择文件
◎文件的操作:FileDialog 属性、Show 方法、Item 属性

其他应用
如果要使用对话框选择文件,可以使用 FileDialog 属性,其具体的语法
格式为:
Application.FileDialog([对话框类型])
Access 不支持 msoFileDialogOpen(打开对话框)和 msoFileDialogSaveAs
(另存为对话框)类型的对话框。仅支持 msoFileDialogFolderPicker(文件夹
选择器)和 msoFileDialogFilePicker(文件选择器)类型的对话框。

获取对话框之后,还可以设置对话框的属性,比如对话框名称、是否允
许多选等。

并且需要使用 Show 方法将对话框显示出来,才可以进行后续的选择文


件操作,其具体的语法格式为:
[文件对话框].Show
在使用文件对话框选择文件之后,如果需要获取所选文件的路径等,可
以使用文件对话框的 SelectedItems 集合的 Item 属性,其具体的语法格式如下
所示:
[文件对话框].SelectedItems.Item([索引号])
索引号表示返回的是所有选中文件中的第几个文件,如果在程序中设置
了文件对话框的不允许多选,则索引号只能够取 1。否则,索引号可以取 1
到选择的文件数之间的任意整数。

513
Access VBA 活用范例大辞典

本例中的 FileDialog 属性,需要在引用了“Microsoft Office 14.0 Object


统计和打印

Library”支持库之后,才能够使用。

◎应用实例
素材\第 10 章\使用对话框选择文件.accdb

本例中,需要在运行“M_文件操作”模块中的“文件路径”过程时,可
数据交换

以通过文件对话框选择文件,并返回所选文件的路径。

◎案例操作

01 在“M_文件操作”模块中添 02 在“文件路径”过程中编写
加“文件路径”过程。 使用文件对话框的代码。
其他应用

03 执行程序过程,查看程序运
行效果。

◎过程源代码
源文件\第 10 章\使用对话框选择文件.accdb

在“文件路径”过程中编写对应的 VBA 代码,通过文件对话框选择文


件,返回所选文件路径,具体的 VBA 代码如下。
'通过文件对话框获取文件路径
Sub 文件路径()
On Error Resume Next
Dim F_Dlg As Office.FileDialog
Dim Fl As Variant
'获取文件对话框
Set F_Dlg = Application.FileDialog(msoFileDialogFolderPicker)
'设置文件对话框属性
With F_Dlg
'不允许多选
.AllowMultiSelect = False
'清空文件筛选器
.Filters.Clear

514
Chapter 10 其他的操作技巧

'在文件筛选器中筛选出文本文件
.Filters.Add "文本文件", "*.txt"

统计和打印
'在文件筛选器中筛选出所有文件
.Filters.Add "所有文件", "*.*"
End With
'显示文件对话框
F_Dlg.Show

数据交换
'获取第一个选项(即选中文件的路径)
Fl = F_Dlg.SelectedItems.Item(1)
'输出选择文件路径
MsgBox "所选文件路径为:" & Chr(10) & Fl, , "文件路径"
End Sub

其他应用
◎执行过程
保存编写的 VBA 代码,然后按【F5】键运行“文件路径”过程,在打
开的对话框中选择文件,结果如图 10-5 所示。

图 10-5 通过文件对话框选择文件

285 通过对话框打开文件 初 中 高
285 2003 / 2007 / 2010

通过对话框打开文件
◎文件的操作:Shell()函数

在实例 269 中曾经提到,使用 Shell()函数可以打开可执行文件。其实,

515
Access VBA 活用范例大辞典

通过 Shell()函数执行命令行程序“cmd.exe”之后,还可以打开所有使用本机
程序可以打开的文件,其具体的语法格式如下所示:
统计和打印

Shell "cmd.exe [打开文件的命令行]" ,vbHide


打开文件的命令行可以通过 start 命令进行设置。具体的设置可参照 start
命令的语法格式进行。
数据交换

◎应用实例
素材\第 10 章\通过对话框打开文件.accdb

本例中,需要在运行“M_文件操作”模块中的“打开”过程时,可以通
过文件对话框选择文件,并打开选择的文件。
其他应用

◎案例操作

01 在“M_文件操作”模块中添 02 在过程中编写使用文件对话
加“打开”过程。 框打开文件的代码。

03 执行程序过程,查看程序运
行效果。

◎过程源代码
源文件\第 10 章\通过对话框打开文件.accdb

在“打开”过程中编写对应的 VBA 代码,通过文件对话框选择文件,


打开选择的文件,具体的 VBA 代码如下。
'打开对话框选择的文件或文件夹
Sub 打开()
On Error GoTo 结束
Dim F_Dlg As Office.FileDialog
Dim Fl, Fls As Variant
'引用文件对话框
Set F_Dlg = Application.FileDialog(msoFileDialogOpen)
'设置文件对话框属性
With F_Dlg

516
Chapter 10 其他的操作技巧

.Title = "打开"
.Filters.Clear

统计和打印
.Show
End With
Fl = F_Dlg.SelectedItems.Item(1)
'打开选中的第一个文件
Shell "cmd.exe /c start " & Chr(34) & Chr(34) & " " & _

数据交换
Chr(34) & Fl & Chr(34), vbHide
结束: End Sub

◎执行过程
保存编写的 VBA 代码,然后按【F5】键运行“打开”过程,在打开的
对话框中选择文件,单击“打开”按钮,结果如图 10-6 所示。

其他应用

图 10-6 通过文件对话框打开的图片

286 修改指定位置的文件的名称 初 中 高
286 2003 / 2007 / 2010

修改指定位置的文件的名称
◎文件的操作:Name 关键字、InitialFileName 属性

如果需要更改文件的名字,可以使用 Name 关键字实现,其具体的语法


格式为:
Name [旧名称文件路径] As [新名称文件路径]
如果需要更名后的文件放置在原文件所在的文件夹,可以通过文件对话

517
Access VBA 活用范例大辞典

框对象的 InitialFileName 属性获取,其具体的语法格式为:


统计和打印

[文件对话框].InitialFileName

◎应用实例
素材\第 10 章\修改指定位置的文件的名称.accdb

本例中,需要在运行“M_文件操作”模块中的“更名”过程时,可以通
数据交换

过文件对话框选择文件,然后将其更名为通过输入对话框输入的名称。

◎案例操作

01 在“M_文件操作”模块中添 02 在“更名”过程中编写 VBA


加“更名”过程。 代码。
其他应用

03 执行程序过程,查看程序运
行效果。

◎过程源代码
源文件\第 10 章\修改指定位置的文件的名称.accdb

在“更名”过程中编写对应的 VBA 代码,通过文件对话框选择文件,


更改文件名称,具体的 VBA 代码如下。
'更改选择的文件的名称
Sub 更名()
On Error GoTo 结束
Dim F_Dlg As Office.FileDialog
Dim oldName, newName, fileName As String
'引用文件对话框
Set F_Dlg = Application.FileDialog(msoFileDialogOpen)
'设置文件对话框属性
With F_Dlg
.Title = "选择想要更名的文件"
.AllowMultiSelect = False
.Show
End With

518
Chapter 10 其他的操作技巧

'获取需要更名的文件的路径
oldName = F_Dlg.SelectedItems.Item(1)

统计和打印
'获取需要更名的文件所在文件夹
newName = F_Dlg.InitialFileName
'输入文件更名后的名字
fileName = InputBox("请输入想要更改为的文件名:")
'设置更名后文件的路径

数据交换
newName = newName & fileName
Name oldName As newName
结束: End Sub

◎执行过程
保存编写的 VBA 代码,然后按【F5】键运行“更名”过程,在打开的

其他应用
对话框中选择文件,单击“打开”按钮,然后在打开的输入对话框中输入欲
更改为的文件名,结果如图 10-7 所示。

图 10-7 修改指定位置的文件的名称

519
Access VBA 活用范例大辞典

287 复制指定位置的文件 初 中 高
287 2003 / 2007 / 2010
统计和打印

复制指定位置的文件
◎文件的操作:FileCopy 关键字、InitialFileName 属性

如果需要复制指定位置的文件,可以使用 FileCopy 关键字,其具体的语


法格式为:
数据交换

FileCopy [源文件路径] As [复制文件保存路径]

◎应用实例
素材\第 10 章\复制指定位置的文件.accdb
其他应用

本例中,需要在运行“M_文件操作”模块中的“复制”过程时,可以通
过文件对话框选择需要复制的文件,设置复制的文件保存为的名字和位置。

◎案例操作

01 在“M_文件操作”模块中添 02 在“复制”过程中编写 VBA


加“复制”过程。 代码。

03 执行程序过程,查看程序运
行效果。

◎过程源代码
源文件\第 10 章\复制指定位置的文件.accdb

在“复制”过程中编写对应的 VBA 代码,通过文件对话框选择文件,


复制文件,具体的 VBA 代码如下。
'复制文件
Sub 复制()
On Error GoTo 结束
Dim F_Dlg As Office.FileDialog
Dim SourceFile, copyFile, fileName As String
'引用文件对话框

520
Chapter 10 其他的操作技巧

Set F_Dlg = Application.FileDialog(msoFileDialogOpen)


'设置文件对话框属性

统计和打印
With F_Dlg
.Title = "选择想要复制的文件"
.AllowMultiSelect = False
.Show
End With

数据交换
'获取复制的文件的路径
SourceFile = F_Dlg.SelectedItems.Item(1)
'获取复制的文件的保存名字
fileName = InputBox("请的文件保存的名字:")
Set F_Dlg = Application.FileDialog(msoFileDialogFolderPicker)
With F_Dlg

其他应用
.Title = "选择复制的文件保存的位置"
.Show
End With
'设置复制后的文件的保存路径
copyFile = F_Dlg.InitialFileName & fileName
FileCopy SourceFile, copyFile
结束: End Sub

◎执行过程
保存编写的 VBA 代码,然后按【F5】键运行“复制”过程,在打开的
对话框中选择文件,单击“打开”按钮,输入复制的文件保存的名称,结果
如图 10-8 所示。

图 10-8 选择复制的文件、设置文件保存的名字

521
Access VBA 活用范例大辞典

单击“确定”按钮,在打开的对话框中选择复制文件保存的文件夹,如
10-9 左图所示,最终结果如 10-9 右图所示。
统计和打印
数据交换
其他应用

图 10-9 选择复制文件保存文件夹以及最终效果

288 删除指定位置的文件 初 中 高
288 2003 / 2007 / 2010

删除指定位置的文件
◎文件的操作:Kill 关键字

如果需要删除指定位置的文件,可使用 Kill 关键字,其具体语法格式为:


Kill [文件路径]
通过 Kill 关键字删除的文件与在系统中删除文件不同,不会将文件移动
到回收站中,而是直接删除,删除后不能恢复。

◎应用实例
素材\第 10 章\删除指定位置的文件.accdb

本例中,需要在运行“M_文件操作”模块中的“删除”过程时,可以通
过文件对话框选择需要删除的文件,并选择是否删除。

◎案例操作

01 在“M_文件操作”模块中添 02 在“删除”过程中编写 VBA


加“删除”过程。 代码。

522
Chapter 10 其他的操作技巧

03 执行程序过程,查看程序运

统计和打印
行效果。

◎过程源代码
源文件\第 10 章\删除指定位置的文件.accdb

数据交换
在“删除”过程中编写对应的 VBA 代码,通过文件对话框选择文件,
删除文件,具体的 VBA 代码如下。
'删除文件
Sub 删除()
On Error GoTo 结束

其他应用
Dim F_Dlg As Office.FileDialog
Dim fileName As String
Dim YN As Integer
'引用文件对话框
Set F_Dlg = Application.FileDialog(msoFileDialogOpen)
'设置文件对话框属性
With F_Dlg
.Title = "选择想要删除的文件"
.AllowMultiSelect = False
.Show
End With
'获取要删除的文件的路径
fileName = F_Dlg.SelectedItems.Item(1)
'询问是否要删除选择的文件
YN = MsgBox("确定要删除选择文件吗?", vbYesNo, "删除")
If YN = vbYes Then
'删除文件
Kill fileName
Else
MsgBox "已取消删除文件!"
End If
结束: End Sub

523
Access VBA 活用范例大辞典

◎执行过程
统计和打印

保存编写的 VBA 代码,然后按【F5】键运行“删除”过程,在打开的对


话框中选择文件,单击“打开”按钮,确定是否删除文件,如图 10-10 所示。
数据交换
其他应用

图 10-10 选择要删除的文件并确定是否删除

单击“删除”对话框中的“是”按钮,最终结果如图 10-11 所示。

图 10-11 “删除示例文件夹”文件夹中选择的文件被删除

289 新建文件夹 初 中 高
289 2003 / 2007 / 2010

新建文件夹
◎文件的操作:MkDir 关键字

如果需要在指定的位置新建文件夹,可使用 MkDir 关键字,其具体的语


法格式为:
MkDir [文件夹路径]

524
Chapter 10 其他的操作技巧

如果新建的文件夹已经存在,就会出现“路径/文件访问错误”错误。

统计和打印
◎应用实例
素材\第 10 章\新建文件夹.accdb

本例中,需要在运行“M_文件操作”模块中的“新建文件夹”过程时,
可以在当前目录下新建一个文件夹。

数据交换
◎案例操作

01 在“M_文件操作”模块中添 02 在“新建文件夹”过程中编
加“新建文件夹”过程。 写 VBA 代码。

其他应用
03 执行程序过程,查看程序运
行效果。

◎过程源代码
源文件\第 10 章\新建文件夹.accdb

在“新建文件夹”过程中编写对应的 VBA 代码,通过输入对话框输入


新建文件夹的名称,具体的 VBA 代码如下。
'在当前位置新建文件夹
Sub 新建文件夹()
On Error GoTo 错误
Dim folderName, folderPath As String
'获取新建文件夹的名称,默认为“新建文件夹”
folderName = InputBox("请输入文件夹的名称", "文件夹名", "新建文件夹")
'设置新建文件夹的路径
folderPath = CurrentProject.Path & "\" & folderName
'新建文件夹
MkDir folderPath
Exit Sub
错误: MsgBox Err.Description
End Sub

525
Access VBA 活用范例大辞典

◎执行过程
统计和打印

保存编写的 VBA 代码,然后按【F5】键运行“新建文件夹”过程,在


打开的输入对话框中输入新建的文件夹的名称,单击“确定”按钮新建文件
夹,结果如图 10-12 所示。
数据交换

图 10-12 在数据库文件所在位置新建“文件夹 1”文件夹


其他应用

290 启动邮件管理软件 初 中 高
290 2003 / 2007 / 2010

启动邮件管理软件
◎Web 与 XML 的应用:HyperlinkAddress 属性

如果需要在单击窗体中的按钮时,启动系统的邮件管理软件,可以通过
设置按钮的 HyperlinkAddress 属性实现,其具体的语法格式为:
[按钮].HyperlinkAddress “mailto : [电子邮箱]”

◎应用实例
素材\第 10 章\启动邮件管理软件.accdb

本例中,需要在单击“F_邮件”窗体中的“邮件”按钮后,可以打开邮
件管理软件,本书默认的电子邮件管理软件为“Microsoft Outlook 2010”
,并
将收件人设置为指定的电子邮箱。

◎案例操作

01 在“F_邮件”窗体中插入“邮 02 为 窗 体 添 加 “ cmd_ 邮 件
件”按钮。 _Click”事件过程。

526
Chapter 10 其他的操作技巧

03 在“cmd_邮件_Click”事件 04 单击“邮件”按钮查看事件

统计和打印
过程中编写 VBA 代码。 过程运行效果。

◎过程源代码
源文件\第 10 章\启动邮件管理软件.accdb

数据交换
在事件过程中编写 VBA 代码,设置按钮的 HyperlinkAddress 属性,具体
的 VBA 代码如下。
'打开邮件管理软件,并设置收件人地址
Private Sub cmd_邮件_Click()
Me.cmd_邮件.HyperlinkAddress = "mailto:whoani@126.com"

其他应用
End Sub

◎执行过程
保存编写的 VBA 代码,单击“F_邮件”窗体中的“邮件”按钮,结果
如图 10-13 所示。

图 10-13 打开邮件管理软件并设置收件人地址

291 通过邮件将数据库对象寄出去 初 中 高
291 2003 / 2007 / 2010

通过邮件将数据库对象寄出去
◎Web 与 XML 的应用:SentObject 方法

如果需要将数据库中的对象通过电子邮件寄出去,可以使用 DoCmd 对

527
Access VBA 活用范例大辞典

象的 SentObject 方法,其具体的语法格式为:
统计和打印

DoCmd.SentObject [参数设置]
SentObject 方法的主要参数的含义如表 10-1 所示。

表 10-1 SentObject 方法的参数说明

参数 说 明
数据交换

ObjectType 要发送的对象的类型,如表、查询和报表等
ObjectName 要发送的对象的名字
OutputFormat 作为附件发送的对象的格式
To 收件人
抄送
其他应用

Cc
Subject 主题,邮件的标题
MessageText 邮件正文

◎应用实例
素材\第 10 章\通过邮件将数据库对象寄出去.accdb

本例中,需要将数据库中的“R_员工工资”报表转换为 PDF 格式的文


件,然后将其作为附件发送到“caiwubu@126.com”邮箱中。

◎案例操作

01 在“F_邮件”窗体中插入“发 02 为 窗 体 添 加 “ cmd_ 邮 件
送邮件”按钮和文本框。 _Click”事件过程。

03 在“cmd_邮件_Click”事件 04 单击“发送邮件”按钮查看
过程中编写 VBA 代码。 事件过程运行效果。

◎过程源代码
源文件\第 10 章\通过邮件将数据库对象寄出去.accdb

在事件过程中编写 VBA 代码,将报表转换为 PDF 格式的文档发送,具

528
Chapter 10 其他的操作技巧

体的 VBA 代码如下。

统计和打印
'将报表转换为 PDF 格式并作为附件发送出去
Private Sub cmd_邮件_Click()
On Error Resume Next
DoCmd.SendObject acSendReport, "R_员工工资", acFormatPDF, _
"caiwubu@126.com", , , "员工工资明细,请审核!", txt_正文
End Sub

数据交换
◎执行过程
保存编写的 VBA 代码,单击“F_邮件”窗体中的“发送邮件”按钮,
结果如图 10-14 所示。

其他应用

图 10-14 将数据库中的报表作为邮件附件发送

292 将表或者查询导出为 HTML 初 中 高


292 2003 / 2007 / 2010

将表或者查询导出为 HTML
◎Web 与 XML 的应用:TransferText 方法、acExportHTML 常量

如果需要将数据库中的表或者查询导出为 HTML 文件,


可以使用 DoCmd
对象的 TransferText 方法,将第一个参数设置为 acExportHTML 即可,其具
体的语法格式为:
DoCmd.TransferText acExportHTML,,[表或查询名],[HTML 的路径]

529
Access VBA 活用范例大辞典

◎应用实例
统计和打印

素材\第 10 章\将表或者查询导出为 HTML.accdb

本例中,需要将数据库中的指定表或者查询导出为 HTML 文件,并保存


在当前文件夹下面。

◎案例操作
数据交换

01 在“F_输出为 HTML”窗体 02 为“F_输出为 HTML”窗体


中插入“输出为 HTML”按钮。 添加“cmd_html_Click”事件。

03 在“cmd_html_Click”事件过 04 单击“输出为 HTML”按钮,


其他应用

程中编写 VBA 代码。 查看事件过程运行效果。

◎过程源代码
源文件\第 10 章\将表或者查询导出为 HTML.accdb、Q_员工工资.html

在事件过程中编写 VBA 代码,设置导出文件的路径,导出文件,具体


的 VBA 代码如下。
'将数据库中的表或者查询导出为 HTML
Private Sub cmd_html_Click()
Dim htmlPath As String
'设置导出文件的路径
htmlPath = CurrentProject.Path & "/" & txt_对象 & ".html"
'将文本框中指定的表或者查询导出为 HTML
DoCmd.TransferText acExportHTML, , txt_对象, htmlPath, 1
End Sub

◎执行过程
保存编写的 VBA 代码,在“F_输出为 HTML”窗体中的文本框中指定
表或者查询,然后单击“输出为 HTML”按钮,即可将文本框中指定的表或
者查询导出为 HTML 文件,结果如图 10-15 所示。

530
Chapter 10 其他的操作技巧

统计和打印
图 10-15 将数据库中的查询导出为 HTML 文件

293 将 HTML 文件导入到 Access 数据库 初 中 高


293

数据交换
2003 / 2007 / 2010

将 HTML 文件导入到 Access 数据库


◎Web 与 XML 的应用:TransferText 方法

如要将 HTML 文件导入数据库,可以使用 DoCmd 对象的 TransferText

其他应用
方法,将第一个参数设置为 acExportHTML 即可,其具体的语法格式为:
DoCmd.TransferText acImportHTML,,[导入表名],[HTML 的路径]

◎应用实例
素材\第 10 章\将 HTML 文件导入.accdb、员工工资.html

本例中,需要将通过文件对话框选择的 HTML 文件导入到数据库中的


“T_导入的 HTML”表中。

◎案例操作

01 在“F_导入 HTML”窗体中 02 为“F_导入 HTML”窗体添


插入“导入”按钮。 加“cmd_导入_Click”事件。

03 在“cmd_导入_Click”事件 04 单击“导入”按钮,查看事
过程中编写 VBA 代码。 件过程运行效果。

◎过程源代码
源文件\第 10 章\将 HTML 文件导入.accdb、员工工资.html

在事件过程中编写 VBA 代码,通过文件对话框获取 HTML 文件路径,


将获取的 HTML 文件导入,具体的 VBA 代码如下。

531
Access VBA 活用范例大辞典

'将 HTML 文件导入


Private Sub cmd_导入_Click()
统计和打印

Dim DG As Office.FileDialog
Dim htmlPath As String
'通过文件对话框选择 HTML 文件
Set DG = Application.FileDialog(msoFileDialogOpen)
With DG
数据交换

.Title = "选择导入的 HTML"


.Filters.Clear
.Filters.Add "HTML 文件", "*.html"
.Show
End With
'获取所选文件的路径
其他应用

htmlPath = DG.SelectedItems.Item(1)
'将选择的 HTML 文件导入
DoCmd.TransferText acImportHTML, , "T_导入的 HTML", htmlPath, 1
End Sub

◎执行过程
保存编写的 VBA 代码,单击“F_导入 HTML”窗体中的“导入”按钮,
即可将通过文件对话框选择的 HTML 文件导入到数据库中,结果如图 10-16
所示。

图 10-16 将 HTML 文件导入到数据库

HTML 文件“员工工资.html”与表“T_导入到 HTML”的结构如图 10-17


所示。

532
Chapter 10 其他的操作技巧

统计和打印
数据交换
图 10-17 HTML 文件及其导入到数据库的效果

其他应用
294 将数据库中的对象导出为 XML 初 中 高
294 2003 / 2007 / 2010

将数据库中的对象导出为 XML
◎Web 与 XML 的应用:ExportXML 方法

如果需要将数据库中的对象导出为 XML 文件,可以使用当前数据库的


Application 属性的 ExportXML 方法,其具体的语法格式为:
Application.ExportXML [导出对象类型],[导出对象],[对象保存路径]
Application 属性的 ExportXML 方法,
不仅可以将对象导出为 XML 文件,
还可以导出架构信息的文件、样式表信息的文件、图像文件等。本例中仅导
出 XML 文件,其余的可以根据参数提示信息进行设置。

◎应用实例
素材\第 10 章\将数据库中的对象导出为 XML.accdb

本例中,需要将当前数据库中的“T_员工资料”表出为 XML 文件,并


以“员工资料.xml”的名称保存在当前文件夹中。

533
Access VBA 活用范例大辞典

◎案例操作
统计和打印

01 在“F_导出为 XML”窗体中 02 为“F_导出为 XML”窗体添


插入“导出”按钮。 加“cmd_导出_Click”事件。

03 在“cmd_导出_Click”事件 04 单击“导出”按钮,查看事
数据交换

过程中编写 VBA 代码。 件过程运行效果。

◎过程源代码
源文件\第 10 章\将数据库中的对象导出为 XML.accdb、员工资料.xml
其他应用

在事件过程中编写 VBA 代码,将数据库中的指定表导出为 XML 文件,


具体的 VBA 代码如下。
'将数据库中的对象导出为 XML
Private Sub cmd_导出_Click()
Dim XMLpath As String
'设置导出 XML 文件的路径
XMLpath = CurrentProject.Path & "\" & "员工资料.xml"
'导出 XML 文件
Application.ExportXML acExportTable, "T_员工资料", XMLpath
End Sub

◎执行过程
保存编写的 VBA 代码,单击“F_导出为 XML”窗体中的“导出”按钮,
即可将“T_员工资料”导出为当前文件夹下面的 XML 文件,结果如图 10-18
所示。

图 10-18 将数据库中的表导出为 XML 文件

534
Chapter 10 其他的操作技巧

295 将 XML 文件导入到 Access 数据库 初 中 高


295 2003 / 2007 / 2010

统计和打印
将 XML 文件导入到 Access 数据库
◎Web 与 XML 的应用:ImportXML 方法

若要将 XML 文件导入到数据库中,可以使用当前数据库的 Application


属性的 ImportXML 方法,其具体的语法格式为:

数据交换
Application.ImportXML [导入 XML 文件]
由于 XML 文件中保存了对象的相关信息,所以不需要为导入的对象重
新命名。

其他应用
◎应用实例
素材\第 10 章\将 XML 文件导入.accdb、员工资料.xml

本例中,需要将 XML 文件“员工资料”导入到当前的数据表中。

◎案例操作

01 在“F_导入 XML”窗体中插 02 为“F_导入 XML”窗体添加


入“导入 XML”按钮。 “cmd_导入_Click”事件。

03 在“cmd_导入_Click”事件 04 单击“导入 XML”按钮,查


过程中编写 VBA 代码。 看事件过程运行效果。

◎过程源代码
源文件\第 10 章\将 XML 文件导入.accdb

在事件过程中编写 VBA 代码,通过文件对话框获取 XML 文件路径,将


获取的 XML 文件导入,具体的 VBA 代码如下。
'将 XML 文件导入到当前数据库
Private Sub cmd_导入_Click()
Dim DG As Office.FileDialog
Dim xmlPath As String

535
Access VBA 活用范例大辞典

'通过文件对话框获取 XML 文件路径


Set DG = Application.FileDialog(msoFileDialogOpen)
统计和打印

With DG
.Title = "选择导入的 XML"
.Filters.Clear
.Filters.Add "HTML 文件", "*.xml"
.Show
数据交换

End With
xmlPath = DG.SelectedItems.Item(1)
'导入 XML 文件
Application.ImportXML xmlPath
End Sub
其他应用

◎执行过程
保存编写的 VBA 代码,单击“F_导入 XML”窗体中的“导入 XML”
按钮,即可将通过文件对话框选择的 XML 文件导入到数据库中,结果如
图 10-19 所示。

图 10-19 将 XML 文件文件导入到数据库

296 通过超链接打开指定的网页 初 中 高
296 2003 / 2007 / 2010

通过超链接打开指定的网页
◎超链接的应用:Hyperlink 属性、Address 属性

如果需要在单击按钮时,通过浏览器打开某个网页,可以将该按钮的超

536
Chapter 10 其他的操作技巧

链接地址设置为该网页的网址,其具体的语法格式为:

统计和打印
[按钮].Hyperlink.Address = [网址]
网址的“http://”部分不可以省略,否则不能够打开浏览器。

◎应用实例
素材\第 10 章\通过超链接打开指定的网页.accdb

数据交换
本例中,需要在单击“F_打开网页”窗体中的“打开”按钮时,打开“网
址”文本框中指定网址的网页。

◎案例操作

其他应用
01 在“F_打开网页”窗体中插 02 为“F_打开网页”窗体添加
入“打开”按钮和文本框。 “cmd_打开_Click”事件。

03 在“cmd_打开_Click”事件 04 单击“打开”按钮,查看事
过程中编写 VBA 代码。 件过程运行效果。

◎过程源代码
源文件\第 10 章\通过超链接打开指定的网页.accdb

在事件过程中编写 VBA 代码,打开文本框中的网址指定网页,具体的


VBA 代码如下。
'打开文本框中的 URL 指定的网页
Private Sub cmd_打开_Click()
On Error GoTo 错误
Me.cmd_打开.Hyperlink.Address = txtURL
Exit Sub
错误:
MsgBox Err.Description
End Sub

◎执行过程
保存编写的 VBA 代码,在“网址”文本框中输入网址,单击“打开”

537
Access VBA 活用范例大辞典

按钮,即可打开指定的网页,结果如图 10-20 所示。


统计和打印
数据交换
其他应用

图 10-20 打开指定的网页

297 显示超链接连接的位置 初 中 高
297 2003 / 2007 / 2010

显示超链接连接的位置
◎超链接的应用:ScreenTip 属性

如果需要将鼠标光标停留在超链接上时,显示超链接的地址,可以使用
超链接的 ScreenTip 属性,其具体的语法格式为:
[控件名].Hyperlink.ScreenTip=[显示的内容]
通过超链接的 ScreenTip 属性,不仅可以将网址设置为提示信息,还可
以将其他的内容设置为提示信息。

◎应用实例
素材\第 10 章\显示超链接连接的位置.accdb

本例中,需要在将鼠标光标停留在具有超链接的控件上时,在控件旁通
过一个浮动的标签显示出超链接的地址。

538
Chapter 10 其他的操作技巧

◎案例操作

统计和打印
01 为 “ F_ 超 链 接 ” 窗 体 添 加 02 在“Form_Load”事件过程中
“Form_Load”事件过程。 编写 VBA 代码。

03 加载窗体,查看程序运行的

数据交换
效果。

◎过程源代码
源文件\第 10 章\显示超链接连接的位置.accdb

其他应用
在事件过程中编写 VBA 代码,设置窗体中标签的超链接地址和提示信
息,具体的 VBA 代码如下。
'显示超链接的位置
Private Sub Form_Load()
Dim strURL1, strURL2, strURL3 As String
'设置 3 个网址
strURL1 = "http://www.baidu.com/"
strURL2 = "http://www.sina.com.cn/"
strURL3 = "http://www.qq.com/"
'为窗体中的控件指定超链接地址
Me.lab_百度.Hyperlink.Address = strURL1
Me.lab_新浪.Hyperlink.Address = strURL2
Me.Lab_腾讯.Hyperlink.Address = strURL3
'为窗体中的控件的超链接设置提示信息
Me.lab_百度.Hyperlink.ScreenTip = strURL1
Me.lab_新浪.Hyperlink.ScreenTip = strURL2
Me.Lab_腾讯.Hyperlink.ScreenTip = strURL3
End Sub

◎执行过程
保存编写的 VBA 代码,将鼠标光标移动到窗体中不同标签的位置,即
可得到不同的提示信息,结果如图 10-21 所示。

539
Access VBA 活用范例大辞典
统计和打印
数据交换

图 10-21 将鼠标光标定位到窗体中不同标签位置的效果

298 通过超链接打开本地文件 初 中 高
其他应用

298 2003 / 2007 / 2010

通过超链接打开本地文件
◎超链接的应用:Address 属性

超链接不仅可以用于打开网页,还可以用于打开指定位置的文件,比如
本地文件。使用超链接打开本地文件的语法格式如下所示:
[控件名].Hyperlink.Address =[本地文件路径]

◎应用实例
素材\第 10 章\通过超链接打开本地文件.accdb、本地文件\

本例中,需要在单击“F_超链接”窗体中的“打开本地文件”按钮时,
打开通过文件对话框选择的文件。

◎案例操作

01 在“F_超链接”窗体插入“打 02 为 窗 体 添 加 “ cmd_ 打 开
开本地文件”按钮。 _Click”事件过程。

03 单击按钮运行程序,查看程
序运行效果。

540
Chapter 10 其他的操作技巧

◎过程源代码

统计和打印
源文件\第 10 章\通过超链接打开本地文件.accdb

在事件过程中编写 VBA 代码,通过文件对话框选择文件,打开选择的


文件,具体的 VBA 代码如下。
'打开本地文件
Private Sub cmd_打开_Click()

数据交换
Dim F_Dlg As Office.FileDialog
Dim filePath As String
'引用文件对话框
Set F_Dlg = Application.FileDialog(msoFileDialogOpen)
With F_Dlg

其他应用
.Title = "选择想要打开的文件"
.AllowMultiSelect = False
.Show
End With
'获取选择文件的路径
filePath = F_Dlg.SelectedItems.Item(1)
'通过超链接打开选择的文件
Me.cmd_打开.Hyperlink.Address = filePath
End Sub

◎执行过程
保存编写的 VBA 代码,将窗体切换至窗体视图模式,单击“单开本地
文件”按钮,在打开的对话框中选择所需的文件,单击“打开”按钮打开该
文件,结果如图 10-22 所示。

图 10-22 打开本地文件

541
Access VBA 活用范例大辞典

299 强制展开下拉列表 初 中 高
299 2003 / 2007 / 2010
统计和打印

强制展开下拉列表
◎其他常用技巧:Dropdown 方法

组合框的列表在一般情况下是收起来的,如果需要强制打开组合框的下
拉列表,可以使用 Dropdown 方法,其具体的语法格式如下所示:
数据交换

[组合框].Dropdown
在强制展开下拉列表之前,需要将焦点设置到组合框中,否者强制展开
不会成功。
其他应用

◎应用实例
素材\第 10 章\强制展开下拉列表.accdb

本例中,需要在单击“F_强制展开”窗体中的“下拉”按钮时,强制展
开“类别”下拉列表。

◎案例操作

01 在“F_强制展开”窗体插入 02 为 窗 体 添 加 “ cmd_ 下 拉
“下拉”按钮。 _Click”事件过程。

03 单击“下拉”按钮运行程序,
查看程序运行效果。

◎过程源代码
源文件\第 10 章\强制展开下拉列表.accdb

在事件过程中编写 VBA 代码,设置焦点到组合框,强制展开组合框的


选项,具体的 VBA 代码如下。
'强制展开下拉列表
Private Sub cmd_下拉_Click()
'组合框获取焦点

542
Chapter 10 其他的操作技巧

Me.cmb_类别.SetFocus
'强制展开下拉列表

统计和打印
Me.cmb_类别.Dropdown
End Sub

◎执行过程
保存编写的 VBA 代码,单击“F_强制展开”窗体中的“下拉”按钮,

数据交换
结果如图 10-23 所示。

其他应用
图 10-23 强制展开组合框的下拉列表

300 拖过代码创建新的窗体 初 中 高
300 2003 / 2007 / 2010

通过代码创建新的窗体
◎其他常用技巧:CreatForm 方法

如果想要在程序运行过程中新建窗体,可以通过 VBA 代码来实现。常


用的方法有两种,一种是引用菜单进行,另一种是使用 CreatForm 方法进行。
使用 CreatForm 方法的语法格式如下所示:
CreatForm([数据库],[窗体模板])
如果在当前数据库中创建窗体,CreatForm 方法的第一个参数可以缺省;
如果创建的是空白窗体,即没有使用窗体模板,CreatForm 方法的第二个参
数也可以缺省。

◎应用实例
素材\第 10 章\通过代码创建新的窗体.accdb

本例中,需要在单击“F_创建”窗体中的“创建窗体”按钮时,可以在

543
Access VBA 活用范例大辞典

当前数据库中创建一个名为“F_新建的窗体”的空白窗体。
统计和打印

◎案例操作

01 在“F_创建”窗体插入“创 02 为 窗 体 添 加 “ cmd_ 创 建
建窗体”按钮。 _Click”事件过程。
数据交换

03 单击“创建窗体”按钮运行
程序,查看程序运行效果。

◎过程源代码
其他应用

源文件\第 10 章\通过代码创建新的窗体.accdb

在事件过程中编写 VBA 代码,创建新的窗体,保存和关闭窗体,刷新


数据库,具体的 VBA 代码如下。
'在当前窗体创建一个空白窗体
Private Sub cmd_创建_Click()
Dim Frm As Form
'创建窗体
Set Frm = CreateForm
'保存新建的窗体,同时为其命名
DoCmd.Save , "F_新建的窗体"
'关闭新建的窗体
DoCmd.Close acForm, "F_新建的窗体"
'刷新数据库
RefreshDatabaseWindow
End Sub

◎执行过程
保存编写的 VBA 代码,单击“F_创建”窗体中的“创建窗体”按钮即
可创建空白窗体,结果如图 10-24 所示。

544
Chapter 10 其他的操作技巧

统计和打印
图 10-24 通过代码创建新的窗体

数据交换
301 组合框的联动 初 中 高
301 2003 / 2007 / 2010

组合框的联动
◎其他常用技巧:SQL 语句

其他应用
如果想要实现多个组合框的联动,即选中一个组合框的某个选项后,与
该选项所关联组合框自动弹出可供选择的选项,
可以在前一个组合框更新后,
在事件过程中设置后一个组合框的行来源。

组合框中的选项最好放置在当前数据库的一张数据表中,每个组合框在
数据表中占据一列或者多列,然后通过 SQL 语句在数据表中筛选数据,将筛
选出的数据作为联动组合框的行来源。

◎应用实例
素材\第 10 章\组合框的联动.accdb

本例中,需要在改变“F_组合框联动”窗体中的“类别”组合框的选项
时,
“商品名称”组合框弹出可供选择的商品名称。

◎案例操作

01 在 窗 体 添 加 “ cmb_ 类 别 02 在“cmb_类别_AfterUpdate”
_AfterUpdate”事件过程。 事件过程编写 VBA 代码。

03 改变“类别”组合框中的选
项,查看程序运行效果。

545
Access VBA 活用范例大辞典

◎过程源代码
统计和打印

源文件\第 10 章\组合框的联动.accdb

在事件过程中编写 VBA 代码,设置用于根据“类别”组合框筛选数据


的 SQL 语句,设置联动的组合框属性,具体的 VBA 代码如下。
'简单的组合框联动
Private Sub cmb_类别_AfterUpdate()
数据交换

Dim strSQL As String


'设置用于筛选出商品名称数据的 SQL 语句
strSQL = "Select 商品名称 From T_生活用品" & _
" Where 类别 = '" & Me.cmb_类别 & " '"
'将窗体的焦点设置到联动的组合框中
其他应用

cmb_商品名称.SetFocus
'清空联动的组合框
cmb_商品名称 = ""
'设置联动组合框的行来源类型
cmb_商品名称.RowSourceType = "Table/Query"
'设置联动组合框的数据源
cmb_商品名称.RowSource = strSQL
'限制联动组合框的下拉列表显示的最大选项数
cmb_商品名称.ListRows = 6
'强制张开联动下拉列表
cmb_商品名称.Dropdown
End Sub

◎执行过程
保存编写的 VBA 代码,改变“F_组合框联动”窗体中“类别”组合框
的选项,结果如图 10-25 所示。

图 10-25 组合框的联动效果

546
Chapter 10 其他的操作技巧

302 组合框的多级联动 初 中 高
302 2003 / 2007 / 2010

统计和打印
组合框的多级联动
◎其他常用技巧:Distinct 关键字、AND 关键字

如果想要实现组合框的多级联动,就必须将组合框中的数据保存至一张
数据表中,然后采用筛选的方式获取组合框的选项。

数据交换
每一个组合框的数据表中至少有一列对应的取值。比如本例中的数据表
的保存结构如图 10-26 所示。

其他应用

图 10-26 本例的多级联动组合框对应的数据表的结构

从图 10-26 中可以看出,区域、省级、等级等字段的数据都不是唯一的,
存在部分重复的数据,这时如果希望选取某个字段不重复值,需要在 SQl 语
句中使用 Distinct 关键字,其具体的语法结构如下所示:
Select Distinct [其余的 SQL 语句]
其余的 SQL 语句部分,与一般的 SQL 语句相同。在 SQL 语句中的 Select
语句后添加了 Distinct 关键字,相当于把没有添加该关键字查找的结果中的
重复值剔除。

在筛选组合框的行来源时,有些组合框的行来源可以通过上一个组合框
的值确定,比如本例中以省级、等级字段作为行来源的组合框。

有些组合框的行来源仅仅通过其前面一个组合框的值是不能够确定的,
比如本例中的经销商字段,不可能只通过选择的等级字段就确定出等级组合
框的行来源,
这个时候就需要在 SQL 语句中使用 AND 关键字进行联合查询。

547
Access VBA 活用范例大辞典

◎应用实例
统计和打印

素材\第 10 章\组合框的多级联动.accdb

本例中,需要根据“T_经销商”数据表中的数据,实现一个四级联动的
组合框,在某个组合框中选择选项之后,其下一个组合框的选项列表自动弹
出。如果清空了某个组合框,其后的组合框中的数据均被清空,且处于不可
用状态。
数据交换

◎案例操作

01 在窗体添加“Form_Load”事 02 在“Form_Load”事件过程初
件过程。 始化窗体。
其他应用

03 在 窗 体 添 加 “ cmb_ 区 域 04 在 窗 体 添 加 “ cmb_ 省 级
_AfterUpdate”事件过程。 _AfterUpdate”事件过程。

05 在 窗 体 添 加 “ cmb_ 等 级 06 在窗体添加“cmb_ 经销商


_AfterUpdate”事件过程。 _AfterUpdate”事件过程。

07 在各个组合框的更新后事件 08 在 窗 体 中 选 择 组 合 框 的 选
过程中编写对应的 VBA 代码。 项,查看程序运行效果。

◎过程源代码
源文件\第 10 章\组合框的多级联动.accdb

在窗体的加载事件中进行初始化,在各个组合框的更新后事件中设置组
合框更新后执行的操作,具体的 VBA 代码如下。
'加载窗体时,初始化其中的数据
Private Sub Form_Load()
Dim strSql As String
'设置区域组合框选项
strSql = "Select Distinct 区域 From T_经销商"

548
Chapter 10 其他的操作技巧

cmb_区域.RowSourceType = "Table/Query"
cmb_区域.RowSource = strSql

统计和打印
'清空所有的组合框和文本框
cmb_区域.Value = ""
cmb_省级.Value = ""
cmb_等级.Value = ""
cmb_经销商.Value = ""

数据交换
txt_结果 = ""
'设置区域组合框之外的组合框不可用
cmb_省级.Enabled = False
cmb_等级.Enabled = False
cmb_经销商.Enabled = False
txt_结果.Enabled = False

其他应用
End Sub

'区域组合框更新时,更新其后的文本框的状态
Private Sub cmb_区域_AfterUpdate()
Dim strSql1 As String
'清空省级列表框
cmb_省级 = ""
If Not IsNull(cmb_区域) Then
'区域列表框不为空时,设置省级列表框的行来源
strSql1 = "Select Distinct 省级 From T_经销商" & _
" Where 区域 = '" & Me.cmb_区域 & " '"
'设置省级列表框的属性
With cmb_省级
.RowSourceType = "Table/Query"
.RowSource = strSql1
.Enabled = True
.SetFocus
.Dropdown
End With
Else
'清空区域组合框之后的组合框的值
cmb_省级.Value = ""
cmb_等级.Value = ""

549
Access VBA 活用范例大辞典

cmb_经销商.Value = ""
'将区域组合框之后的组合框设置为不可用
统计和打印

cmb_省级.Enabled = False
cmb_等级.Enabled = False
cmb_经销商.Enabled = False
End If
'设置结果文本框中显示的数据
数据交换

txt_结果 = ""
txt_结果 = cmb_区域
End Sub

'省级组合框更新时,更新其后的文本框的状态
Private Sub cmb_省级_AfterUpdate()
其他应用

Dim strSql2 As String


'清空等级列表框
cmb_等级 = ""
If Not IsNull(cmb_省级) Then
'省级列表框不为空时,设置等级列表框的行来源
strSql2 = "Select Distinct 等级 From T_经销商" & _
" Where 省级 = '" & Me.cmb_省级 & " '"
'设置等级列表框的属性
With cmb_等级
.RowSourceType = "Table/Query"
.RowSource = strSql2
.Enabled = True
.SetFocus
.Dropdown
End With
Else
cmb_等级.Value = ""
cmb_经销商.Value = ""
cmb_等级.Enabled = False
cmb_经销商.Enabled = False
End If
txt_结果 = ""
txt_结果 = cmb_区域 & "→" & cmb_省级
End Sub

550
Chapter 10 其他的操作技巧

'等级组合框更新时,更新其后的文本框的状态
Private Sub cmb_等级_AfterUpdate()

统计和打印
Dim strSql3 As String
'清空经销商列表框
cmb_经销商 = ""
If Not IsNull(cmb_等级) Then
'区域列表框不为空时,设置省级列表框的行来源
strSql3 = "Select Distinct 经销商 From T_经销商 Where" & _

数据交换
" 省级 = '" & Me.cmb_省级 & " ' " & "And" & _
" 等级 = '" & Me.cmb_等级 & " '"
'设置省级列表框的属性
With cmb_经销商
.RowSourceType = "Table/Query"

其他应用
.RowSource = strSql3
.Enabled = True
.SetFocus
.Dropdown
End With
Else
cmb_经销商.Value = ""
cmb_经销商.Enabled = False
End If
txt_结果 = ""
txt_结果 = cmb_区域 & "→" & cmb_省级 & "→" & cmb_等级
End Sub

'经销商组合框更新时,更新结果文本框中显示的数据
Private Sub cmb_经销商_AfterUpdate()
txt_结果 = cmb_区域 & "→" & cmb_省级 & _
"→" & cmb_等级 & "→" & cmb_经销商
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_多级联动”窗体的视图模式切换至窗体
视图,依次在各个组合框中选择相应的选项,如图 10-27 所示。

551
Access VBA 活用范例大辞典
统计和打印
数据交换
其他应用

图 10-27 多级联动组合框的效果

在选择了某个经销商之后,如果需要选择该区域其他省份的经销商,可
以直接单击“省级”组合框右侧的下拉按钮,可以重新从“省级”组合框开
始选择,如图 10-28 所示。

图 10-28 多级联动组合框的效果

552
Chapter 10 其他的操作技巧

303 获取外部数据表数据 初 中 高
303 2003 / 2007 / 2010

统计和打印
获取外部数据表数据
◎其他常用技巧:支持库的引用、自定义函数和过程的使用

Access 中提供了丰富的支持库,选择合适的支持库(也被称为运行库)

可以有效地提高程序的编写效率,降低代码的长度。

数据交换
但是,过多的引用支持库,尤其是不同的支持库,可能会降低程序的执
行效率。因为支持库的引用需要一定的时间,并且会耗费一定的资源。所以,
在编写 VBA 代码时选择合适的支持库是十分重要的。

在阅读他人编写的 VBA 代码或者例程时,首先应该查看程序中引用的

其他应用
支持库,否则可能在仿写时不能够实现所需的功能,本例中引用的支持库如
图 10-29 所示。

图 10-29 本例中引用的支持库

在编写 VBA 代码的时候,如果其中的某些部分在程序中会被多次使用


或者具有完整的功能,可以在模块中将其制作为函数或者过程。然后在事件
过程中引用函数或者过程,这样可以提高代码的可读性和可修改性等。

◎应用实例
素材\第 10 章\获取外部数据表数据.accdb

本例中,需要引用一定的支持库,并自定义函数和过程,从而实现对所
选文件夹的数据库文件中的表和表中的数据的引用。

553
Access VBA 活用范例大辞典

◎案例操作
统计和打印

01 插入“M_模块”模块,在模 02 添加“cmd_打开_Click”事
块中自定义函数和过程。 件过程。

03 添加“lst_文件_AfterUpdate” 04 添加“cmb_表_AfterUpdate”
数据交换

事件过程。 事件过程。

05 在各个事件过程中编写对应 06 在窗体中执行相应的操作,
的 VBA 代码。 查看程序运行效果。
其他应用

◎过程源代码
源文件\第 10 章\获取外部数据表数据.accdb

在模块中自定义函数和过程,在程序中引用自定义的函数和过程,实现
对外部数据的引用,具体的 VBA 代码如下。
'打开文件或文件夹的函数
Function 打开文件(TF As Boolean) As String
Dim dlgOpen As FileDialog
Dim i As Long, j As Long
'通过文件对话框获取文件或文件夹
If TF = True Then
Set dlgOpen = Application.FileDialog(msoFileDialogFilePicker)
Else
Set dlgOpen = Application.FileDialog(msoFileDialogFolderPicker)
End If
With dlgOpen
.Show
End With
'返回选择的第一个文件或文件夹
打开文件 = dlgOpen.SelectedItems(1)
Set dlgOpen = Nothing
End Function

554
Chapter 10 其他的操作技巧

'获取指定文件中数据库文件的列表
Function 文件列表(MyPath As String, Myname As String) As String

统计和打印
Dim myFSO As New FileSystemObject
Dim myFolder As Folder
Dim myfile As File
Dim str As String
'获取文件夹

数据交换
Set myFolder = myFSO.GetFolder(MyPath)
'判断文件夹是否存在
If myFSO.FolderExists(myFolder) = True Then
str = ""
'存在则返回数据库(.accdb)文件列表
For Each myfile In myFolder.Files

其他应用
If Right(myfile.Name, 5) = "accdb" Then
If myfile.Name <> Myname Then
str = str & myfile.Name & ";"
End If
End If
Next myfile
文件列表 = str
Else
'文件夹不存在则返回空值,并打开提示对话框
MsgBox "文件夹不存在"
文件列表 = ""
End If
End Function

'设置控件的字段列宽和字号大小
Sub 控件列宽(ctl As Control, ftSize As Long)
Dim rs As New ADODB.Recordset
Dim i As Long, j As Long
Dim comWidths As String
Dim w As Single
rs.Open ctl.RowSource, CurrentProject.Connection, _
adOpenKeyset, adLockOptimistic
ctl.FontSize = ftSize
For i = 0 To rs.Fields.Count - 1

555
Access VBA 活用范例大辞典

rs.MoveFirst
w=0
统计和打印

'获取最大的文本长度
For j = 1 To rs.RecordCount
If Len(Nz(rs(i).Value, "")) > w Then w = Len(Nz(rs(i).Value, ""))
rs.MoveNext
Next
'最大文本长度大于 20 时取 20
数据交换

If w > 20 Then w = 20
'最大文本长度小于字段长度时取字段长度
If w < Len(rs.Fields(i).Name) Then w = Len(rs.Fields(i).Name)
'将文本长度转换为实际的宽度
w = 0.0353 * (w + 1) * ctl.FontSize
其他应用

comWidths = comWidths & w & " cm;"


Next
'设置控件的列宽
ctl.ColumnWidths = comWidths
rs.Close
End Sub

'单击打开文件夹按钮,获取文件夹路径和文件列表
Private Sub cmd_打开_Click()
With Me
.txt_文件 = ""
.lst_数据 = ""
.lst_文件 = ""
End With
'使用模块中的“打开文件”函数打开文件夹
Me.txt_文件 = 打开文件(False)
Me.lst_文件.RowSourceType = "Value List"
'使用模块中的“文件列表”函数返回选择文件夹中的数据库文件
Me.lst_文件.RowSource = 文件列表(Me.txt_文件, _
"获取外部数据表数据.accdb")
End Sub

'选择文件后,返回文件中所有的表
Private Sub lst_文件_AfterUpdate()

556
Chapter 10 其他的操作技巧

Dim ssql As String


'通过 SQl 语句获取文件中的表

统计和打印
ssql = "SELECT Name "
ssql = ssql & "FROM MSysObjects "
ssql = ssql & "IN '" & Me.txt_文件.Value & "\" & _
Me.lst_文件.Value & "'"
ssql = ssql & " WHERE (Type=1)" & _

数据交换
" AND (([Name] Like 'MSys*' Or [Name] Like '~*')=False);"
Me.cmb_表.RowSource = ssql
Me.cmb_表.Value = Null
Me.cmb_表.SetFocus
Me.cmb_表.Dropdown
Me.lst_数据.RowSource = ""

其他应用
End Sub

'选择表之后,将表中的数据设置到表中数据列表框中
Private Sub cmb_表_AfterUpdate()
Dim ssql As String
'通过 SQL 语句获取文件中的数据
ssql = "SELECT * "
ssql = ssql & "FROM " & Me.cmb_表.Value
ssql = ssql & " IN '" & Me.txt_文件.Value & "\" & Me.lst_文件.Value & "'"
Me.cmb_字段.RowSourceType = "Field List"
Me.cmb_字段.RowSource = ssql
Me.lst_数据.RowSource = ssql
Me.lst_数据.ColumnCount = Me.cmb_字段.ListCount
'通过模块中的“控件列宽”过程设置列表框的列宽和字号
Call 控件列宽(Me.lst_数据, 10)
End Sub

◎执行过程
保存编写的 VBA 代码,将“F_获取外部数据”窗体的视图模式切换至
窗体视图,在窗体中执行相应的操作,如图 10-30 所示。

557
Access VBA 活用范例大辞典
统计和打印
数据交换
其他应用

图 10-30 在窗体中实现引用外部数据的步骤及效果

558
Chapter 11
Access VBA 办公实战综合案例

在前面的章节中,
已经介绍了使用 VBA 代码操作各种 Access
数据库对象的基本方法。
在完成这些知识的学习后,读者就可以根据自己的工作需要,
制作简单的基于 Access 数据库的应用程序来辅助完成工作。下
面,将通过 3 个具体的案例来讲解这类应用程序的制作方法。

▼本章案例
◎出入库管理系统
实现功能导航
实现子窗体功能
设置系统启动项
◎考勤管理系统
实现主窗口功能
实现弹出窗口功能
设置系统启动项
◎通讯录管理系统
实现主窗口功能
实现添加联系人窗口
实现查找联系人窗口
实现组别管理窗口
设置系统启动项
Access VBA 活用范例大辞典

案例 1 出入库管理系统
综合案例 1
统计和打印

出入库管理系统

在本案例中所要实现的出入库管理系统十分简单,只完成了出入库管理系
统中最为核心的功能,即商品的管理、出入库记录和统计。
数据交换

◎项目说明
素材\第 11 章\出入库管理系统\

源文件\第 11 章\出入库管理系统.accdb

本例中实现的出入库管理系统的结构,如图 11-1 所示。


其他应用

出入库管理系统
综合案例

出库登记 入库登记 出入库查询 商品管理

库存查询 出库查询 入库查询 商品查询 添加商品

图 11-1 出入库管理系统结构

在小型系统的项目中,有两种较为常用的设计方法,分别为:自顶向下
和自底向上。

在本项目中,由于项目功能较为简单,采用这两种设计方法均可以较好
地实现系统功能。本案例采用了自顶向下的方案,即逐层细分的方案来进行。

并且,本案例中的功能从上到下,均采用的是一对多的方式。对于这种
功能结构的系统,使用树形控件来进行导航是非常合适的。图 11-2 所示为本
系统最终实现的其中一个“出入库查询”功能界面。

560
Chapter 11 Access VBA 办公实战综合案例

统计和打印
数据交换
图 11-2 系统的最终界面

其他应用
◎数据字典
在出入库管理系统中,要实现出入库的登记、查询和统计等操作,需要
使用一些表来实现对基本数据的保存。

在本案例中,为了使读者能够更轻松地了解系统核心功能的实现,将这
综合案例

些基础表简化为 T 商品列表、T 库存表、T 入库表和 T 出库表这 4 张表。这


些表的设计,如表 11-1 所示。

表 11-1 出入库管理系统的数据字典

表名 列名 数据类型 默认值 备注
ID 自动编号 无 主键
T 商品列表
商品名称 文本 无 无
ID 自动编号 无 主键
T 库存表 商品名称 数字 无 外键,查询自 T 商品列表
数量 数字 无 无
ID 自动编号 无 主键
商品名称 数字 无 外键,查询自 T 商品列表
T 入库表
入库日期 日期/时间 无 默认时间格式
入库数量 数字 无 无
ID 自动编号 无 主键
T 出库表
商品名称 数字 无 外键,查询自 T 商品列表

561
Access VBA 活用范例大辞典

续表
统计和打印

表名 列名 数据类型 默认值 备注
出库日期 日期/时间 无 默认时间格式
T 出库表
出库数量 数字 无 无

◎系统实现
数据交换

在本案例中,系统主界面可以分为 3 个部分,即导航部分、数据操作部
分和系统名称部分。其中,导航部分和数据操作部分使用单独的子窗体来实
现,系统名称部分在主窗体的页眉部分实现。

1)实现功能导航
其他应用

打开素材文件,创建“MenuList”表,在表中添加 3 个字段,并根据
图 11-1 向表中填入所需的数据,如图 11-3 所示。

创建
综合案例

图 11-3 创建“MenuList”表

关闭表,新建一个空白的“frmTreeMenu”窗体,在属性表中去掉窗
体中的记录选择器和导航按钮,如图 11-4 所示。

562
Chapter 11 Access VBA 办公实战综合案例

统计和打印
1.新建

数据交换
2.选择

其他应用
图 11-4 创建 frmTreeMenu 窗体

将 frmTreeMenu 窗体切换至设计视图,选择“窗体设计工具 设计”


选项卡中的“ActiveX 控件”选项,如图 11-5 所示。 综合案例

1.切换到设计视图

2.选择

图 11-5 选择“ActiveX 控件”选项

在打开的对话框中选择“Microsoft TreeView Control,version 6.0”选


项,单击“确定”按钮,如图 11-6 所示。

563
Access VBA 活用范例大辞典
统计和打印

1.选择
数据交换

2.单击
其他应用

图 11-6 选择 Microsoft 的树形控件

选择窗体中新出现的控件,在属性表中将控件重命名为“lstMenu”,
如图 11-7 所示。
综合案例

1.选择
2.输入

图 11-7 重命名树形控件

564
Chapter 11 Access VBA 办公实战综合案例

按 照 上 述 的 方 法 , 在 窗 体 上 添 加 一 个 “ Microsoft ImageList
Control,version 6.0”控件,并将控件名称更改为“Image”,如图 11-8 所示。

统计和打印
数据交换
2.修改
1.选择

其他应用
图 11-8 添加图像控件

双击新添加的图像控件,在打开的对话框的“Images”选项卡中将素
材文件夹中的两张图片添加到对话框中,并分别为这两张图片设置 key 为 K1
综合案例

和 K2,如图 11-9 所示。

1.双击 3.输入

2.添加

图 11-9 设置图像控件中的图像

565
Access VBA 活用范例大辞典

双击树形控件,在打开对话框中的“ImageList”下拉列表中选择
“Image”选项(即图像控件的名称),单击“确定”按钮将树形控件与图像
统计和打印

控件关联在一起,如图 11-10 所示。

1.双击
数据交换

2.选择

3.单击
其他应用

图 11-10 关联树形控件与图像控件
综合案例

在“属性表”中的内容下拉列表框中选择“窗体”选项,在“事件”
选项卡中单击“加载”事件属性右侧的 按钮,为窗体添加加载事件(在该
事件中初始化树形控件),如图 11-11 所示。

1.选择

2.单击

图 11-11 为窗体添加加载事件

566
Chapter 11 Access VBA 办公实战综合案例

在打开的 VBE 编辑器中单击“工具”菜单项,选择“引用”命令,


在打开的对话框中选中“Microsoft Windows Common Controls 6.0”复选框(如

统计和打印
果列表中没有该选项,可以单击“浏览”按钮,选择“C:\Windows\System32
\MSCOMCTL.OTC”文件),最后单击“确定”按钮,如图 11-12 所示。

1.单击
2.选择

数据交换
4.单击

3.选中

图 11-12 添加引用 其他应用


综合案例

在打开的窗口中输入如下所示的代码,该代码将在窗体加载时初始化
树形控件。
Option Compare Database
Private Sub Form_Load()
'调用函数初始化树形控件
GetSubNod 0
End Sub
Public Sub GetSubNod(ParentNod As Long)
Dim nodX As node
Dim rst As Recordset
'从 MenuList 表中获取指定的记录集
Set rst = CurrentDb().OpenRecordset( _
"select * from MenuList where ParentId=" & ParentNod)
'通过 While 循环为树形控件添加父节点和子节点
Do While Not rst.EOF
If rst![ParentID] = 0 Then
Set nodX = lstMenu.Nodes.Add(, , "No" & rst![ID], _
rst![Text], "K1", "K2")
Else

567
Access VBA 活用范例大辞典

Set nodX = lstMenu.Nodes.Add("No" & rst![ParentID], tvwChild, _


"No" & rst![ID], rst![Text], "K1", "K2")
统计和打印

End If
'递归调用函数自身
GetSubNod rst![ID]
'移动到下一条记录集
rst.MoveNext
数据交换

Loop
End Sub

2)实现子窗体功能
在设计视图下,在“属性表”中设置树形控件的高度、宽度、上边距
和左等尺寸。选择“窗体设计工具 设计”选项卡中的“[子窗体/子报表]”
其他应用

控件选项,如图 11-13 所示。

2.选择
综合案例

1.设置

图 11-13 设置树形控件的位置并添加子窗体控件

在窗体任意位置单击,在打开的对话框中单击“下一步”按钮,在下
拉列表中选择“表:T 出库表”选项,单击 按钮,如图 11-14 所示。
继续单击“下一步”按钮,设置子窗体的名称为“chl 出库表”,然
后单击“完成”按钮,在属性表中设置该子窗体的宽度、高度、上边距和左
等尺寸,如图 11-15 所示。

568
Chapter 11 Access VBA 办公实战综合案例

统计和打印
2.选择

3.单击

数据交换
1.单击

图 11-14 设置子窗体的数据源

其他应用
1.输入

3.设置 综合案例

2.单击

图 11-15 设置子窗体的名称和大小位置

按照上述相同的方法,依次创建以 T 入库表、T 库存表、T 商品列表


3 个表为数据源的子窗体,这些子窗体名称与大小位置与“chl 出库表”的设
置完全相同。
关闭 frmTreeMenu 窗体,在设计视图中分别打开这些子窗体,设置“边
框样式”属性为“无”,“记录选择器”属性为“否”,“导航按钮”属性
为“是”,“分隔线”属性为“否”,如图 11-16 所示。

569
Access VBA 活用范例大辞典
统计和打印

设置
数据交换
其他应用

图 11-16 设置子窗体的格式

打开 VBE 编辑器,在其中输入如下所示的代码。在该代码中,定义
了单击树形控件某个节点时各子窗体进行的响应。
'定义树形控件节点的单击事件
综合案例

Private Sub lstMenu_NodeClick(ByVal Node As Object)


Dim strNode As String
'获取当前单击的节点的名称
strNode = Me.lstMenu.SelectedItem.Text
'逐一对各个节点单击的操作进行定义
Select Case strNode
'当单击的节点是“出库登记”时,设置仅“chl 出库表”子窗体可见
'设置“chl 出库表”子窗体允许添加,但是不允许删除和编辑操作
Case "出库登记"
ChildFormVisilble 1, 0, 0, 0
Me.chl 出库表.Form.AllowAdditions = True
Me.chl 出库表.Form.AllowDeletions = False
Me.chl 出库表.Form.AllowEdits = False
Case "入库登记"
ChildFormVisilble 0, 0, 1, 0
Me.chl 入库表.Form.AllowAdditions = True
Me.chl 入库表.Form.AllowDeletions = False
Me.chl 入库表.Form.AllowEdits = False
Case "出入库查询"

570
Chapter 11 Access VBA 办公实战综合案例

ChildFormVisilble 0, 1, 0, 0
Me.chl 库存表.Form.AllowAdditions = False

统计和打印
Me.chl 库存表.Form.AllowDeletions = False
Me.chl 库存表.Form.AllowEdits = False
Case "库存查询"
ChildFormVisilble 0, 1, 0, 0
Me.chl 库存表.Form.AllowAdditions = False
Me.chl 库存表.Form.AllowDeletions = False

数据交换
Me.chl 库存表.Form.AllowEdits = False
Case "入库查询"
ChildFormVisilble 0, 0, 1, 0
Me.chl 入库表.Form.AllowAdditions = False
Me.chl 入库表.Form.AllowDeletions = False

其他应用
Me.chl 入库表.Form.AllowEdits = False
Case "出库查询"
ChildFormVisilble 1, 0, 0, 0
Me.chl 出库表.Form.AllowAdditions = False
Me.chl 出库表.Form.AllowDeletions = False
Me.chl 出库表.Form.AllowEdits = False
综合案例

ChildFormVisilble 0, 0, 1, 0
Case "商品管理"
ChildFormVisilble 0, 0, 0, 1
Me.chl 商品列表.Form.AllowAdditions = False
Me.chl 商品列表.Form.AllowDeletions = False
Me.chl 商品列表.Form.AllowEdits = False
Case "商品查询"
ChildFormVisilble 0, 0, 0, 1
Me.chl 商品列表.Form.AllowAdditions = False
Me.chl 商品列表.Form.AllowDeletions = False
Me.chl 商品列表.Form.AllowEdits = False
Case "添加商品"
ChildFormVisilble 0, 0, 0, 1
Me.chl 商品列表.Form.AllowAdditions = True
Me.chl 商品列表.Form.AllowDeletions = False
Me.chl 商品列表.Form.AllowEdits = False
End Select
End Sub
'由于各节点都需要设置子窗体的显示和隐藏,故定义一个函数来统一操作

571
Access VBA 活用范例大辞典

Sub ChildFormVisilble(chl 出库表 v, chl 库存表 v, chl 入库表 v, chl 商品列表 v)


Me.chl 出库表.Form.Visible = chl 出库表 v
统计和打印

Me.chl 库存表.Form.Visible = chl 库存表 v


Me.chl 入库表.Form.Visible = chl 入库表 v
Me.chl 商品列表.Form.Visible = chl 商品列表 v
End Sub
在设计视图下打开“chl 出库表”窗体,在“属性表”中单击“事件”
数据交换

选项卡的“插入后”事件后的 按钮,在打开的对话框中选择“代码生成器”
选项,单击“确定”按钮,如图 11-17 所示。

2.选择
其他应用

1.单击

3.单击
综合案例

图 11-17 为子窗体添加更新后事件

在打开的对话框中输入如下所示的代码,该代码将在登记出库信息之
后,从库存表中减去已经出库的商品数量,并提示出库成功。
'添加“chl 出库表”子窗体的插入后事件
Private Sub Form_AfterInsert()
Dim Sql As String
Dim db As DAO.Database
Dim num As Integer
Set db = CurrentDb
'通过 Update 语句更新“T 库存表中的数据”
Sql = "Update T 库存表 set 商品数量 = 商品数量 - " & Me.出库数量 & _
" where 商品名称 = " & Me.商品名称
db.Execute Sql
MsgBox "出库成功"
db.Close: Set db = Nothing
End Sub

572
Chapter 11 Access VBA 办公实战综合案例

按照上述相同的方法,为“chl 入库表”子窗体添加插入后事件,该
事件的代码如下所示。

统计和打印
'添加"chl 入库表"子窗体的插入后事件
Private Sub Form_AfterInsert()
Dim Sql As String
Dim db As DAO.Database
Dim num As Integer

数据交换
Set db = CurrentDb
'通过 Update 语句更新"T 库存表中的数据"
Sql = "Update T 库存表 set 商品数量 = 商品数量 + " & Me.入库数量 & _
" where 商品名称 = " & Me.商品名称
db.Execute Sql
MsgBox "入库成功"

其他应用
db.Close: Set db = Nothing
End Sub

3)设置系统启动项
在设计视图下打开“frmTreeMenu”窗体,在“属性表”的“标题”
综合案例

属性栏中输入“出入库管理系统”文本,如图 11-18 所示。

1.打开
2.输入

图 11-18 设置主窗体的标题

单击“文件”选项卡中的“选项”按钮,在打开的“Access 选项”对
话框中单击“当前数据库”选项卡,如图 11-19 所示。

573
Access VBA 活用范例大辞典

2.单击
统计和打印

1.单击
数据交换

图 11-19 打开“Access 选项”对话框

在“显示窗体”下拉列表中选择“frmTreeMenu”选项,取消选中“显
示导航窗格”、“允许全部菜单”和“允许默认快捷菜单”复选框,如图 11-20
其他应用

所示。

2.取消选中
综合案例

1.选择

图 11-20 设置当前数据库的一些启动选项

◎项目总结
在本系统中,着重讲解了如何通过 Access 数据库和 VBA 代码,实现一
个功能较为全面的系统。

在本例中实现的系统功能,已经初步能够使用,但是在系统中存在着较
多的缺陷,如没有对出入库数量进行限制、没有登录等权限控制、存在着一
些数据安全和运行效率方面的问题等。

其实,这些问题都可以通过新增系统功能、优化系统架构来实现,有兴
趣的读者可以自己进行尝试。

574
Chapter 11 Access VBA 办公实战综合案例

案例 2 考勤管理系统
综合案例 2

统计和打印
考勤管理系统

考勤管理系统是对公司员工的考勤进行管理的一种基本系统,该系统基于
员工信息表和考勤信息表,能够实现考勤录入、考勤记录查询和统计功能。

数据交换
◎项目说明
素材\第 11 章\考勤管理系统.accdb

源文件\第 11 章\考勤管理系统.accdb

由于本例中需要实现的功能十分简单,所有的功能基本上都可以在同一

其他应用
个窗口中完成。因此,在实现本例中的系统时,需要集中考虑主页面中的功
能,这些功能如图 11-21 所示。

考勤管理系统
综合案例

考勤录入 员工信息录 考勤信息查询 考勤信息报表

查询结果显示 查询结果统计 报表预览 报表打印

图 11-21 考勤管理系统功能结构图

其中,考勤录入和员工信息录入有两种不同的方式,一种为在打开的窗
体中录入相关信息,另一种为直接打开底层的数据库表录入。考勤信息查询
支持多条件组合查询和模糊查询。

由于本系统中,大部分的功能都集中在一个窗口中,部分较为简单、单
一的功能需要另行处理。因此,本系统采用“主窗口+弹出窗口”的模式是
十分合适的。图 11-22 所示为本系统最终实现的主窗口。

575
Access VBA 活用范例大辞典
统计和打印
数据交换
其他应用

图 11-22 系统的主窗口

◎数据字典
综合案例

在考勤管理系统中,需要使用员工基本信息和考勤记录,因此可以简单
地使用两张表来保存相关数据(这明显不符合数据库设计的相关范式,但是
对于简单数据库应用系统来说,影响较小)

在本例中,拟采用 T 员工信息和 T 考勤记录这两张表来保存数据。两张


表的设计如表 11-2 所示。

表 11-2 考勤管理系统数据字典

表名 列名 数据类型 默认值 备注
ID 自动编号 无 主键
姓名 文本 无 无
T 员工信息
性别 男/女 无 无
身份证 文本 无 身份证规则限制
ID 自动编号 无 主键
T 考勤记录 姓名 查阅字段 无 无
加班小时 数字 0.0 一位小数

576
Chapter 11 Access VBA 办公实战综合案例

续表

统计和打印
表名 列名 数据类型 默认值 备注
补休小时 数字 0.0 一位小数
公休小时 数字 0.0 一位小数
T 考勤记录
日期 日期/时间 无 无
备注 备注 无 可以为空

数据交换
◎系统实现
在本案例中,需要首先实现系统主界面的功能,然后逐渐完善弹出窗口
的功能,并在主界面的对应窗口中添加弹出窗口的代码。

其他应用
1)实现主窗口功能
打开素材文件,单击“创建”选项卡中的“窗体设计”按钮,在“属
性表”中设置该窗体的“边框样式”属性为“对话框边框”、“记录选择器”
属性为“否”、“导航按钮”属性为“否”,最后以“考勤信息管理”为名
保存窗体,如图 11-23 所示。
综合案例

1.单击

2.设置

图 11-23 创建“考勤信息管理”窗体

在窗体中添加 3 个文本框控件, 分别修改文本框的附属标签内容为 “姓


名”、“开始日期”和“结束日期”,修改文本框“名称”属性为“Text
姓名”、“Text 开始日期”和“Text 结束日期”,如图 11-24 所示。

577
Access VBA 活用范例大辞典
统计和打印

1.添加控件

2.输入
数据交换

图 11-24 添加文本框控件

选择“Text 开始日期”和“Text 结束日期”文本框,设置其“格式”


其他应用

属性为“短日期”,如图 11-25 所示。


综合案例

1.选择

2.选择

图 11-25 设置日期文本框的格式属性

在窗体上添加两个按钮控件,分别设置其名称为“cmd 查询”、“cmd
清除”,设置其标题为“查 询”和“清 除”,如图 11-26 所示。

1.输入 2.输入

图 11-26 设置按钮的名称和标题

578
Chapter 11 Access VBA 办公实战综合案例

在“窗体设计工具 设计”选项卡中选择“[子窗体/子报表]”控件
选项,在窗体任意位置单击,如图 11-27 所示。

统计和打印
2.单击

数据交换
1.选择

其他应用
图 11-27 插入子窗体控件

在打开的对话框中单击“下一步”按钮,将“T 考勤记录”表中除“ID”
字段外的所有字段添加到“选定字段”列表框中,单击“下一步”按钮,如
综合案例

图 11-28 所示。

2.添加

1.单击 3.单击

图 11-28 设置子窗体的数据源

在对话框中设置子窗体的名称为“chl 考勤记录”,单击“完成”按
钮,之后在窗体中删除子窗体附带的标签控件,并调整子窗体的位置和大小,
如图 11-29 所示。

579
Access VBA 活用范例大辞典

1.输入
统计和打印

3.删除
数据交换

2.单击

图 11-29 设置子窗体的名称并删除附属标签

在设计视图中打开“chl 考勤记录”窗体,取消边框、记录选择器、
其他应用

导航按钮和水平滚动条的显示,设置窗体不允许添加、编辑和删除操作,如
图 11-30 所示。
综合案例

1.输入

2.设置

图 11-30 设置子窗体的属性

在子窗体下方插入 4 个文本框控件,依次修改其附属标签内容为“总
加班天数”、“已补休天数”、“总公出天数”和“余补休天数”,然后依
次在属性表中修改文本框的名称属性为“Text 总加班天数”、“Text 已补休
天数”、“Text 总公出天数”和“Text 余补休天数”,如图 11-31 所示。

580
Chapter 11 Access VBA 办公实战综合案例

统计和打印
2.修改

1.添加

数据交换
图 11-31 添加统计数据的文本框控件

在文本框控件下方继续插入 4 个按钮控件,分别设置其“标题”属性
为“员工信息表”、“考勤记录表”、“预览报表”和“打印报表”,设置

其他应用
其“名称”属性为“cmd 员工信息表”、“cmd 考勤记录表”、“cmd 预览
报表”和“cmd 打印报表”,如图 11-32 所示。

2.修改
综合案例

图 11-32 添加新的按钮控件

在“查询”按钮控件上右击,选择“事件生成器”命令,在打开对话
框中选择“代码生成器”选项,单击“确定”按钮如图 11-33 所示。

1.选择
2.选择

3.单击

图 11-33 为“查询”按钮生成单击事件

581
Access VBA 活用范例大辞典

在 VBE 窗口中单击“工具”菜单项,选择“引用”命令,在打开的
对话框中选中“Microsoft DAO 3.6 Object Library”复选框,如图 11-34 所示。
统计和打印

1.选择
数据交换

2.选中
其他应用

图 11-34 引用 DAO 库

在 VBE 代码窗口中输入如下所示的代码,该代码可以根据文本框中
输入的数据在子窗体中获取满足条件的考勤记录。
'查询按钮单击事件
综合案例

Private Sub cmd 查询_Click()


Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim sch As String
Dim sch1 As String
Dim sch2 As String
Dim sch3 As String
Dim beginDate
Dim endDate
'判断开始日期和结束日期是否为空,并进行相应的处理
If IsNull(Me.Text 开始日期) Then
beginDate = DateAdd("yyyy", -10, Date)
Else
beginDate = Me.Text 开始日期.Value
End If
If IsNull(Me.Text 结束日期) Then
endDate = Date
Else
endDate = Me.Text 结束日期.Value

582
Chapter 11 Access VBA 办公实战综合案例

End If
'使用 DAO 方法中的 Filter 来对子窗体的记录集进行筛选

统计和打印
Set db = CurrentDb()
Set rs = db.OpenRecordset("T 考勤记录", dbOpenDynaset)
'获取筛选参数
sch1 = "[日期]>=#" & beginDate & "#"
sch2 = "[日期]<=#" & endDate & "#"
sch3 = "[姓名] like " & "'*" & Me.text 姓名 & "*'"

数据交换
sch = sch1 & " and " & sch2 & " and " & sch3
'执行筛选操作
rs.Filter = sch
Set rs = rs.OpenRecordset
'将筛选结果设置到窗体中

其他应用
Set Me.chl 考勤记录.Form.Recordset = rs
Me.Requery
Set rs = Nothing
Set db = Nothing
End Sub
综合案例

在 VBE 代码窗口中输入如下所示的代码,该代码主要用于清除“姓
名”、“开始日期”和“结束日期”文本框控件中的内容,并调用“查询”
按钮的单击事件清除子窗体中的显示记录。
'设置清除按钮的单击事件
Private Sub cmd 清除_Click()
'情况 3 个文本框中的内容
Me.text 姓名 = Null
Me.Text 开始日期 = Null
Me.Text 结束日期 = Null
'调用查询按钮的单击事件
cmd 查询_Click
End Sub
选择“Text 总加班天数”文本框,单击“属性表”中的“控件来源”
属性框右侧的 按钮,如图 11-35 所示。

1.选择
2.单击

图 11-35 设置文本框控件来源

583
Access VBA 活用范例大辞典

在打开的对话框的“表达式元素”列表框中依次展开至“chl 考勤记
录”子窗体,在“表达式类别”列表框中双击“加班小时”选项,最后在上
统计和打印

方的表达式框中完成表达式的输入,如图 11-36 所示。

3.输入
数据交换

1.展开 2.双击
其他应用

图 11-36 设置文本框控件来源的表达式

按照上述的方法,分别为其余 3 个文本框的控件来源属性设置如下所
综合案例

示的表达式。
'Text 已补休天数
[chl 考勤记录].Form![补休小时] / 8
'Text 总公出天数
[chl 考勤记录].Form![公休小时] / 8
'Text 余补休天数
[Text 总加班时间] - [Text 已补休天数]
选择“Text 总加班天数”等 4 个文本框,在属性表中设置这些文本框
的“格式”属性为“标准”,“小数位数”属性为“2”,如图 11-37 所示。

2.设置
1.选择

图 11-37 设置文本框的格式属性

584
Chapter 11 Access VBA 办公实战综合案例

2)实现弹出窗口功能

统计和打印
选择“cmd 员工信息表”按钮,在属性表中单击“单击”事件属性右
侧的 按钮,如图 11-38 所示。

2.单击

数据交换
1.选择

图 11-38 为员工信息表按钮添加单击事件

其他应用
在 VBE 代码窗口中输入如下所示的代码,可以在单击“员工信息表”
按钮时打开“T 员工信息”表。
'“员工信息表”按钮单击时打开“T 员工信息”表
Private Sub cmd 员工信息表_Click()
DoCmd.OpenTable "T 员工信息"
综合案例

End Sub
按照上述相同的方法,为“考勤记录表”按钮添加如下所示的单击事
件代码。
'“考勤记录表”按钮单击时打开“T 考勤记录”表
Private Sub cmd 考勤记录表_Click()
DoCmd.OpenTable "T 考勤记录"
End Sub
选择“T 考勤记录”表,单击“创建”选项卡中的“报表”按钮,创
建以“T 考勤记录”表为数据源的报表,如图 11-39 所示。

2.单击

1.选择

图 11-39 创建报表

585
Access VBA 活用范例大辞典

在设计视图下,通过拖动控件、删除控件等方式将报表的格式调整为
如图 11-40 所示的样式。
统计和打印

调整
数据交换

图 11-40 调整报表布局

在设计视图下调整报表的布局后,以“考勤记录”为名保存报表,如
图 11-41 所示。
其他应用

1.输入
综合案例

2.单击

图 11-41 保存报表

为“预览报表”按钮添加单击事件,代码如下所示。
'预览报表
Private Sub cmd 预览报表_Click()
'在预览视图中打开报表
DoCmd.OpenReport "考勤记录", acViewPreview
End Sub
为“打印报表”按钮添加单击事件,代码如下所示。
'打印报表
Private Sub cmd 打印报表_Click()
'在默认视图下打开报表将立即打印报表
DoCmd.OpenReport "考勤记录", acViewNormal
End Sub

586
Chapter 11 Access VBA 办公实战综合案例

3)设置系统启动项

统计和打印
打开“Access 选项”对话框,在“当前数据库”选项卡中设置应用程
序标题为“考勤记录管理”,设置显示窗体为“考勤信息管理”,如图 11-42
所示。

数据交换
1.输入

2.选择

其他应用

图 11-42 设置应用程序标题和显示窗体
综合案例

取消选中“显示导航窗格”、“允许全部菜单”和“允许默认快捷菜
单”复选框,单击“确认”按钮,如图 11-43 所示。
1.取消选中

2.单击

图 11-43 取消导航窗格、菜单和快捷键的使用

◎项目总结
在制作软件的时候,不一定所有的功能都需要使用代码来实现。本例中,
统计子窗体中数据就是用表达式来实现的。

587
Access VBA 活用范例大辞典

案例 3 通讯录管理系统
综合案例 3
统计和打印

通讯录管理系统

通讯录是记录联系人的常用方式之一。本例中所要实现的通讯录可以对联
系人进行分组,并对联系人和组别进行增删改查等管理操作。
数据交换

◎项目说明
素材\第 11 章\通讯录管理系统\

源文件\第 11 章\通讯录管理系统.accdb

在本例中实现的通讯录管理系统中,主要管理的对象有两个,一个是联
其他应用

系人,另一个是联系人的分组。按照数据库系统的特点,在本例中也需要实
现对这两个对象的增删改查等操作,具体的系统结构如图 11-44 所示。

通讯录管理系统
综合案例

添加联系人 查找联系人 组别管理 退出系统


查找联系人

管理联系人

新增分组

删除分组

修改分组

按字段查找 按组别查找 添加 导出 打印

图 11-44 联系人管理系统结构图

虽然在本系统中,需要实现的功能较多,但是许多的功能都可以在同一
个窗口下实现。因此,本例中使用到的窗口数量将远远小于上图所示的功能
模块。

在本例中,共计使用了 4 个较为主要的窗体来实现系统的功能,如
图 11-45 所示。

588
Chapter 11 Access VBA 办公实战综合案例

统计和打印
数据交换
其他应用
综合案例

图 11-45 通讯录管理系统主要窗口

◎数据字典
在本例中,需要对联系人及其组别进行管理,因此需要使用两个不同的
表来保存这些数据。这两个表的具体结构如图 11-3 所示。

表 11-3 通讯录管理系统的数据字典

表名 列名 数据类型 默认值 备注
T 联系人 ID 自动编号 无 主键

589
Access VBA 活用范例大辞典

续表
统计和打印

表名 列名 数据类型 默认值 备注
姓名 自动编号 无 主键
别称 文本 无 无
公司 文本 无 无
手机号码 文本 无 无
数据交换

T 联系人 工作号码 文本 无 无
传真 文本 无 无
电子邮件 文本 无 无
所属组 查阅字段 无 查阅自 T 组别表
其他应用

备注 备足 无 无
组 ID 自动编号 无 主键
T 组别 组名 文本 无 无
备注 备注 无 无
综合案例

◎系统实现
本例中实现的系统主要有 4 个窗口组成,下面将逐一讲解这些窗口的实
现过程。

1)实现主窗口功能
打开素材文件夹中的“通讯录管理.accdb”文件,单击“创建”选项
卡中的“窗体设计”按钮,在“属性表”中取消窗体中多余部分的显示,如
图 11-46 所示。

1.单击
2.设置

图 11-46 新建空白窗体

590
Chapter 11 Access VBA 办公实战综合案例

在窗体中添加一个按钮控件,在属性表中设置按钮的“名称”属性为
“cmd 添加联系人”,“图片类型”属性为“共享”,然后单击“图片”属

统计和打印
性右侧的 按钮,如图 11-47 所示。

1.添加 2.设置

数据交换
3.单击

图 11-47 设置按钮属性

其他应用
在打开的对话框中单击“浏览”按钮,选择素材文件夹中的 png 文件
夹下已准备好的图标,如图 11-48 所示。
综合案例

2.选择

3.单击
1.单击

图 11-48 选择按钮上面的图片

在对话框中设置按钮的“标题”和“图片标题排列”属性,在“窗体
设计工具 排列”选项卡中设置按钮为“正好容纳”,如图 11-49 所示。

2.选择
1.单击

图 11-49 选择按钮的图片的标题和图片属性

591
Access VBA 活用范例大辞典

按照上述的方法,在窗体中继续添加其余的按钮,最后以“联系人管
理”为名保存窗体,如图 11-50 所示。
统计和打印

1.添加
数据交换

2.输入
其他应用

图 11-50 添加其余按钮并保存窗体

2)实现添加联系人窗口
选择“T 联系人”表,单击“创建”选项卡中的“窗体向导”按钮,
综合案例

在打开的对话框中将“T 联系人”表除 ID 字段外的所有字段添加到“选定字


段”列表框中,单击“下一步”按钮,如图 11-51 所示。

2.单击 3.添加

1.选择

4.单击

图 11-51 以“T 联系人”表中数据创建窗体

在打开的对话框中确认“纵栏表”单选按钮处于选中状态,单击“下
一步”按钮,设置窗体的标题为“添加联系人”,选中“修改窗体设计”单
选按钮,单击“完成”按钮,如图 11-52 所示。

592
Chapter 11 Access VBA 办公实战综合案例

统计和打印
2.输入

1.单击 3.选中 4.单击

数据交换
图 11-52 设置窗体的属性

取消窗体的窗体页眉页脚部分的显示,选择主体部分的所有控件,单
击“窗体设计工具 排列”选项卡中的“堆积”按钮,如图 11-53 所示。

其他应用

2.单击
综合案例

1.选择

图 11-53 设置表格中控件的布局方式

调整窗体中的控件到合适的大小,然后选择所有的标签控件,在属性
表中设置标签的“文本对齐”属性为“分散”,如图 11-54 所示。

1.选择
2.选择

图 11-54 设置标签文本的对齐方式

593
Access VBA 活用范例大辞典

选择窗体,在属性表中删除窗体的“记录源”属性值,然后依次选择
窗体中的文本框控件,依次删除它们的“控件来源”属性值,如图 11-55 所
统计和打印

示。

1.删除 2.删除
数据交换
其他应用

图 11-55 删除窗体和文本框控件的数据源

选择窗体,设置窗体的边框样式为“对话框边框”,取消记录选择器
和导航按钮的显示,选择“所属组”组合框,设置“允许编辑值列表”属性
为“否”,如图 11-56 所示。
综合案例

1.设置 2.选择

图 11-56 设置窗体和组合框的格式

在窗体下方插入 3 个按钮,按钮标题分别为“保存记录”、“撤销记
录”和“关闭窗口”,名称分别为“cmd 保存记录”、“cmd 撤销记录”和
“cmd 关闭窗口”,如图 11-57 所示。

1.添加
2.修改

图 11-57 插入按钮

594
Chapter 11 Access VBA 办公实战综合案例

在窗体中选择“保存记录”按钮,在属性表中单击“单击”事件属性
右侧的 按钮,如图 11-58 所示。

统计和打印
2.单击

数据交换
1.选择

其他应用
图 11-58 为“保存记录”按钮添加单击事件

在打开的对话框中选择“代码生成器”选项,在 VBE 代码窗口中输


入如下所示的代码。
综合案例

Private Sub cmd 保存记录_Click()


'联系人姓名、所属组为必填项,手机号码和工作电话二者必填其一
'在进行数据保存前,先判断是否满足上述条件
If (IsNull(Me.姓名) Or Len(Me.姓名) = 0) Or _
((IsNull(Me.手机号码) Or Len(Me.手机号码) = 0) And _
(IsNull(Me.工作电话) Or Len(Me.工作电话)) = 0) Or _
(IsNull(Me.所属组) Or Len(Me.所属组) = 0) Then
'数据输入不完整时进行提示,并退出过程
MsgBox "数据输入不完整!", 16, "错误提示"
'“姓名”文本框获取焦点
Me.姓名.SetFocus
Exit Sub
End If
Dim sql As String
'设置插入记录的 sql 语句
sql = "insert into T 联系人(姓名,别称,公司,手机号码,工作电话," & _
"传真,电子邮件,所属组,备注)"
sql = sql & "values('" & Me.姓名 & "','" & Me.别称 & _
"','" & Me.公司 & "','" & Me.手机号码 & "','" & _

595
Access VBA 活用范例大辞典

Me.工作电话 & "','" & Me.传真 & "','" & Me.电子邮件 & _
"','" & Me.所属组 & "','" & Me.备注 & "')"
统计和打印

'关闭系统提示信息
DoCmd.SetWarnings False
'执行 sql 查询
DoCmd.RunSQL sql
'启动系统提示信息
数据交换

DoCmd.SetWarnings True
清空各控件中的数据
Me.姓名 = Null
Me.别称 = Null
Me.公司 = Null
Me.手机号码 = Null
其他应用

Me.工作电话 = Null
Me.传真 = Null
Me.电子邮件 = Null
Me.所属组 = Null
Me.备注 = Null
综合案例

End Sub
为“撤销记录”按钮的单击事件添加如下所示的代码,该代码可以清
空所有文本框和组合框中已经输入的数据。
'通过撤销记录按钮清空控件中已经输入的数据
Private Sub cmd 撤销记录_Click()
'定义一个 Access 的控件容器
Dim ctl As Access.Control
On Error Resume Next
'设置每一个控件的值为 Null
For Each ctl In Me.Controls
ctl.Value = Null
Next ctl
Me.姓名.SetFocus
End Sub
为“关闭窗口”按钮的单击事件添加如下所示的代码,该代码可以关
闭当前窗体。
'关闭当前窗体
Private Sub cmd 关闭窗口_Click()

596
Chapter 11 Access VBA 办公实战综合案例

DoCmd.Close acForm, Me.Name


End Sub

统计和打印
为“联系人管理”窗体的“添加联系人”按钮的单击事件添加如下所
示的代码,该代码可以打开“添加联系人”窗口。
'打开“添加联系人”窗体
Private Sub cmd 新增联系人_Click()
DoCmd.OpenForm "添加联系人"

数据交换
End Sub

3)实现查找联系人窗口
选择“T 联系人”表创建窗体,在属性表中设置窗体的默认视图为“数
据表”,仅允许数据表视图,并以“查询结果”为名保存窗体,如图 11-59

其他应用
所示。

1.创建

2.设置
综合案例

图 11-59 创建“查询结果”数据表窗体

设置窗体的“允许编辑”、“允许添加”和“允许删除”属性为“否”,
在窗体的“ID”字段上右击,选择“隐藏字段”命令,如图 11-60 所示。

1.设置

2.选择

图 11-60 设置子窗体允许的数据操作和显示的字段

创建空白的“查找联系人”窗体,在属性表中设置窗体的格式,如
图 11-61 所示。

597
Access VBA 活用范例大辞典
统计和打印

1.创建

2.设置
数据交换

图 11-61 创建“查找联系人”窗体并设置其格式

在窗体左上角插入一个“选项组”控件,在打开的对话框的“标签名
称”列中输入“按字段查找”和“按组别查找”文本,单击“下一步”按钮,
如图 11-62 所示。
其他应用

1.选择

2.输入
综合案例

3.单击

图 11-62 插入选项组控件

联系单击“下一步”按钮,采用默认的选项和值即可,如图 11-63 所
示。

1.单击 2.单击

图 11-63 设置选项组默认值和各选项的值

598
Chapter 11 Access VBA 办公实战综合案例

在对话框中选择选项组的控件为“选项按钮”,样式为“阴影”,单
击“下一步”按钮,最后设置选项组控件的名称为“Frame 查找方法”,如

统计和打印
图 11-64 所示。

1.选中 4.输入

2.选中

数据交换
3.单击 5.单击

图 11-64 设置选项组的控件类型、样式和名称

其他应用
在组合框下方插入一个列表框,在打开的对话框中单击“下一步”按
钮,选择“表:T 组别”选项后单击“下一步”按钮,如图 11-65 所示。

2.选择
综合案例

1.选中 3.单击

图 11-65 设置组合框的数据源

设置选定字段为“组别”,然后单击“下一步”按钮直到完成,并在
“属性表”中设置列表框名称为“list 组别查找”,如图 11-66 所示。

1.选择 3.输入

2.单击

图 11-66 设置组合框的字段和名称

599
Access VBA 活用范例大辞典

按照上述相同的方法,在窗体中插入“text 查找内容”文本框和“cmb
查找字段”组合框和“cmd 查找”按钮,如图 11-67 所示。
统计和打印

插入

图 11-67 插入文本框、组合框和按钮控件
数据交换

将“查询结果”窗体作为子窗体添加到“查找联系人”窗体中,如
图 11-68 所示。
其他应用

插入
综合案例

图 11-68 添加子窗体

在窗体的底部添加 5 个按钮,如图 11-69 所示。

添加

图 11-69 添加按钮

为“查找”按钮的单击事件添加如下所示的代码,执行该代码可以在
子窗体中显示出对应的查询结果。
'设置“查询”按钮单击时执行的操作
Private Sub cmd 查找_Click()
Dim sql As String
Dim sqlwhere As String
sql = ""
sqlwhere = ""

600
Chapter 11 Access VBA 办公实战综合案例

'根据选择组的值选择使用的查找方法
Select Case Frame 查找方法

统计和打印
'按照字段进行查找
Case 1
'处理查找内容为空的情况
If IsNull(Me.text 查找内容) Or Len(Me.text 查找内容) = 0 Then
MsgBox "请输入查找的内容!", 48, "提示"
Me.text 查找内容.SetFocus

数据交换
Exit Sub
End If
'处理查找字段为空的情况
If IsNull(Me.cmb 查找字段) Then
MsgBox "请选择需要查找的字段!", 48, "提示"

其他应用
Me.cmb 查找字段.SetFocus
Me.cmb 查找字段.Dropdown
Exit Sub
End If
'设置执行查找的 sql 语句
strwhere = Me.cmb 查找字段 & " like '*'& '" & _
综合案例

Me.text 查找内容 & "' & '*'"


sql = "select * from T 联系人 where " & strwhere
'按照组别查找的情况
Case 2
If IsNull(Me.list 组别查找) Then
Me.list 组别查找 = 1
End If
'设置执行查找的语句
sql = "select * from T 联系人 where 所属组=" & Me.list 组别查找 & ""
End Select
'设置子窗体的数据源
Me.查询结果.Form.RecordSource = sql
End Sub
为“查找方法”选项组更新后事件添加如下所示的代码,执行改代码
可以根据选择的查找方法屏蔽掉另一种方法的相关控件。
'根据选项组选择的查找方法屏蔽掉部分控件
Private Sub Frame 查找方法_AfterUpdate()
Select Case Frame 查找方法

601
Access VBA 活用范例大辞典

'按字段查找时组别查找控件不可用
Case 1
统计和打印

With Me
.list 组别查找.Enabled = False
.text 查找内容.Enabled = True
.cmb 查找字段.Enabled = True
.text 查找内容.SetFocus
数据交换

End With
'按组别查找时字段查找相关字段不可用
Case 2
With Me
.list 组别查找.Enabled = True
.text 查找内容.Enabled = False
其他应用

.cmb 查找字段.Enabled = False


.list 组别查找.SetFocus
End With
End Select
End Sub
综合案例

为“list 组别查找”组合框添加如下所示的单击事件代码,执行该代码
可以直接触发“查找”按钮的单击事件。
'列表框单击事件
Private Sub list 组别查找_Click()
'调用“查找”按钮的单击事件
cmd 查找_Click
End Sub
为“添加记录”按钮的单击事件添加如下所示的代码,该代码可以打
开“添加联系人”窗体。
'单击“添加记录”按钮打开“添加联系人”窗体
Private Sub cmd 添加记录_Click()
DoCmd.OpenForm "添加联系人"
End Sub
为“全部记录”按钮的单击事件添加如下所示的代码,该代码可以显
示所有联系人的信息。
'显示全部联系人
Private Sub cmd 全部记录_Click()
With Me

602
Chapter 11 Access VBA 办公实战综合案例

.text 查找内容 = Null


.cmb 查找字段 = Null

统计和打印
.查询结果.Form.RecordSource = "select * from T 联系人"
End With
End Sub
为“导出数据”按钮的单击事件添加如下所示的代码,该代码可以将
查询结果导出到指定路径的 Excel 表格中。

数据交换
'导出查询的结果到当前目录下的“联系人.xlsx”文件中
Private Sub cmd 导出数据_Click()
Dim xlPath As String
'获取导出路径
xlPath = CurrentProject.Path & "\联系人.xlsx"

其他应用
'将子窗体数据源导入到 Excel 文件中
DoCmd.TransferSpreadsheet acExport, , _
Me.查询结果.Form.RecordSource, xlPath, True
MsgBox "联系人已经导入到“" & xlPath & "”中"
End Sub
为“打印报表”按钮的单击事件添加如下所示的代码,该代码可以打
综合案例

印“查询结果”窗体中的联系人信息。
'打印查询结果子窗体
Private Sub cmd 打印报表_Click()
DoCmd.OpenForm "查询结果", acFormDS
DoCmd.PrintOut
DoCmd.Close acForm, "查询结果"
End Sub
为“关闭窗口”按钮的单击事件添加如下所示的代码,该代码可以关
闭当前窗口。
'关闭窗口
Private Sub cmd 关闭窗口_Click()
DoCmd.Close acForm, Me.Name
End Sub
为“联系人管理”窗体的“查找联系人”按钮的单击事件添加如下所
示的代码,该代码可以打开“查找联系人”窗体。
'打开“查找联系人”窗体
Private Sub cmd 查找联系人_Click()

603
Access VBA 活用范例大辞典

DoCmd.OpenForm "查找联系人"
End Sub
统计和打印

4)实现组别管理窗口
以“T 组别”表为数据源创建“组别”数据表窗体,再创建一个空白
的“组别管理”窗体,如图 11-70 所示。

1.创建
数据交换

2.创建
其他应用

图 11-70 创建两个窗体
综合案例

将“组别”窗体作为子窗体添加到“组别管理”窗体中,并在窗体页
眉部分添加 3 个按钮,如图 11-71 所示。

2.添加

1.添加

图 11-71 添加子窗体和按钮

为“组别管理”窗体的加载事件添加如下代码,在加载窗体之后,禁
止子窗体的新增、删除和编辑操作。
'窗体加载之后,不允许进行新增、删除和编辑操作
Private Sub Form_Load()
Me.组别.Form.AllowAdditions = False
Me.组别.Form.AllowDeletions = False
Me.组别.Form.AllowEdits = False

604
Chapter 11 Access VBA 办公实战综合案例

End Sub
为“新建分组”按钮的单击事件添加如下所示的代码,该代码允许在

统计和打印
子窗体中新建分组。
'单击“新增分组”按钮后,允许新增操作
Private Sub cmd 新建分组_Click()
Me.组别.Form.AllowAdditions = True
Me.组别.Form.AllowDeletions = False

数据交换
Me.组别.Form.AllowEdits = False
End Sub
为“修改分组”按钮的单击事件添加如下所示的代码,该代码允许在
子窗体中修改分组。
'单击“修改分组”按钮后,允许修改操作

其他应用
Private Sub cmd 修改分组_Click()
Me.组别.Form.AllowAdditions = False
Me.组别.Form.AllowDeletions = False
Me.组别.Form.AllowEdits = True
End Sub
综合案例

为“删除分组”按钮的单击事件添加如下所示的代码,该代码允许在
子窗体中删除分组。
'单击“删除分组”按钮后,允许删除操作
Private Sub cmd 删除分组_Click()
Me.组别.Form.AllowAdditions = False
Me.组别.Form.AllowDeletions = True
Me.组别.Form.AllowEdits = False
End Sub
为“联系人管理”窗体的“分组管理”按钮的单击事件添加如下所示
的代码,该代码可以打开“组别管理”窗体。
'打开“组别管理”窗体
Private Sub cmd 分组_Click()
DoCmd.OpenForm "组别管理"
End Sub

5)设置系统启动项
为“联系人管理”窗体的“退出”按钮的单击事件添加如下所示的代
码,该代码可以退出 Access 应用程序。

605
Access VBA 活用范例大辞典

'退出 Access 并保存所有变更


Private Sub cmd 退出_Click()
统计和打印

DoCmd.Quit acQuitSaveAll
End Sub
为“联系人管理”窗体的关闭事件添加如下所示的代码,该代码在关
闭窗体的同时将关闭 Access 应用程序。
'调用“退出”按钮单击事件
数据交换

Private Sub Form_Close()


cmd 退出_Click
End Sub
打开“Access 选项”对话框,在“当前数据库”选项卡中设置应用程
序的标题和显示窗体,如图 11-72 所示。
其他应用

1.输入

2.选择
综合案例

图 11-72 设置应用程序的标题和启动时显示的窗体

取消选中“显示导航窗格”和“允许全部菜单”复选框,单击“确定”
按钮,如图 11-73 所示。

1.取消选中

2.取消选中
3.单击

图 11-73 取消导航窗格和全部菜单的显示

606
Chapter 11 Access VBA 办公实战综合案例

◎项目总结

统计和打印
在制作使用数据库管理数据的软件的时候,需要实现的所有功能,几乎
都可以使用“增删改查”这 4 个字来进行概括。

而要在窗体中实现“增删改查”
,可以选择的方法较多。出于易用性考虑,
在编写软件的时候,可以自己设计界面,自己定义“增删改查”操作实现的
所有途径,与本例中的“查找联系人”功能的实现一样。

数据交换
但是,有时候编写数据库软件,仅仅是出于方便数据的管理,又或者需
要管理的数据较为简单,这时候就没有太大的必要去为这部分功能设计较为
复杂的“增删改查”操作流程了,直接在数据表窗体中进行即中,这就像本
例中的“组别管理”功能的实现一样。

其他应用
综合案例

607
读者意见反馈表
亲爱的读者:
感谢您对中国铁道出版社的支持,您的建议是我们不断改进工作的信息来源,您的需求是我
们不断开拓创新的基础。为了更好地服务读者,出版更多的精品图书,希望您能在百忙之中
抽出时间填写这份意见反馈表发给我们。随书纸制表格请在填好后剪下寄到:北京市西城区
右安门西街8号中国铁道出版社综合编辑部 苏茜 收(邮编:100054)。或者采用传真(010-
63549458)方式发送。此外,读者也可以直接通过电子邮件把意见反馈给我们,E-mail地址
是:4278268@qq.com 。我们将选出意见中肯的热心读者,赠送本社的其他图书作为奖励。同
时,我们将充分考虑您的意见和建议,并尽可能地给您满意的答复。谢谢!
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - -- - -- - -
所购书名:____________________________________________________________________________
个人资料:
姓名:______________性别:__________年龄:______________文化程度:____________________
职业:_______________________电话:___________________E-mail:________________________
通信地址:_______________________________________邮编:_______________________________
- - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - -
您是如何得知本书的:
□书店宣传□网络宣传□展会促销□出版社图书目录□老师指定□杂志、报纸等的介绍□别人推荐
□其他(请指明)______________________________________________________________________
您从何处得到本书的:
□书店 □邮购 □商场、超市等卖场 □图书销售的网站 □培训学校 □其他
影响您购买本书的因素(可多选):
□内容实用□价格合理□装帧设计精美□带多媒体教学光盘□优惠促销□书评广告□出版社知名度
□作者名气□工作、生活和学习的需要□其他
您对本书封面设计的满意程度:
□很满意 □比较满意 □一般 □不满意 □改进建议
您对本书的总体满意程度:
从文字的角度 □很满意 □比较满意 □一般 □不满意
从技术的角度 □很满意 □比较满意 □一般 □不满意
您希望书中图的比例是多少:
□少量的图片辅以大量的文字 □图文比例相当 □大量的图片辅以少量的文字
您希望本书的定价是多少:
本书最令您满意的是:
1.
2.
您在使用本书时遇到哪些困难:
1.
2.
您希望本书在哪些方面进行改进:
1.
2.
您需要购买哪些方面的图书?对我社现有图书有什么好的建议?
您更喜欢阅读哪些类型和层次的计算机书籍(可多选)?
□入门类 □精通类 □综合类 □问答类 □图解类 □查询手册类 □实例教程类
您在学习计算机的过程中有什么困难?

您的其他要求:

苏茜145X210.indd 1 2013-12-23 17:14:24

You might also like