Excel和Access是互补关系。作为微软Office大礼包里的两员大将,Access的表和Excel的表在特定格式下可以通用,但是二者对数据的处理和分析的方法有所不同,用Access储存和管理数据还是有很多优点的。
本案例以一张Excel人员表为原材料,将这张表移植到Access里进行加工,展现一下Access强大的窗体和查询功能。
第1章 效果展示
本案例的数据来源是一张Excel做成的人员表表,要将其导入Access里,并进行定向查询和窗体展示,最终形成了一个查询窗体界面,窗体界面分为5个部分:
3个筛选控件(列表框);
2个输出子窗体。
3个列表框是查询条件,2个子窗体是输出结果。操作演示如下:
最终效果动画图
用Access数据库管理数据表有很多优点:
- 表里的信息不变
需要注意的是,list3“姓名”字段是受到前两个控件的控制的,也就是说我们选择“角色阵营”和“性别”的时候,list3是被筛选的。具体步骤我们马上讲解。
4.查询设计
这个部分是本案例的重点和难点,查询功能是Access的优势功能,Excel里没有对应的功能。
我们来逐一对控件进行查询和自动化设计。
上个章节我们讲到,list3“姓名”字段受到list1和list2的控制,具体是怎么被控制的呢?
我们点击list3-“属性表”-“数据”-“行来源”点击三个点,进入“查询生成器”,把“角色阵营”和“性别”字段也拉到下方的查询字段里。
在“角色阵营”的“条件”里输入下面的SQL代码:
Like [Form]![人员台账]![List1] &”*”这行代码的含义是,“姓名”字段有筛选条件“角色阵营”,这个“角色阵营”在窗体“人员台账”的“list1”控件里,下同。
在“性别”的“条件”里输入下面的SQL代码:
Like [Form]![人员台账]![List2] &”*”“表1 子窗体”和“表1 子窗体1”两个是嵌入主窗体里的子窗体,他们的筛选条件略有不同。
“表1 子窗体”受list1和list2控制。
“表1 子窗体1”受list1、list2和list3控制。
查询方法和list3基本类似,但也有不同,子窗体的数据源里,必须把表里的所有字段都拉到查询条件里,不能遗漏,因为子窗体要展示所有这些字段的数据。
具体的查询方法,请大家参考list3“姓名”的查询方法,自己试试如何解决。
5.自动化设计
查询设计完毕,要进行的是VBA编程设计,主要目的是要让窗体进行自动化查询,点击控件会自动进行窗体结果生成。这也是窗体设计的最后一步。
有两种解决思路,一种是“全部刷新”,在所有的控件里,都设置成单击就“全部刷新”所有的控件。
另一种是“部分刷新”,顾名思义“部分刷新”只刷新相关的控件。
“部分刷新”代码如下:
Option Compare DatabasePrivate Sub List1_Click() List2 = Null List3 = Null List3.Requery 表1_子窗体.Requery 表1_子窗体1.RequeryEnd SubPrivate Sub List2_Click() List3.Requery 表1_子窗体.Requery 表1_子窗体1.RequeryEnd SubPrivate Sub List3_Click() 表1_子窗体1.RequeryEnd SubPrivate Sub 主体_Click() List1 = Null List2 = Null List3 = Null 表1_子窗体.Requery 表1_子窗体1.RequeryEnd Sub如果初学者可以简单的用“全部刷新”即可。
这部分代码涉及到一些逻辑,比如点击list为什么先会清空list2?留给大家来思考~
