下面的内容接着《经典代码解析4.1:使用ADO整合Excel与Access》继续讲解。
代码使用情形
上面的代码虽然是以指定的工作表为例,但具有通用性,你只需将代码中的相关工作表名、数据库名等替换为自已实际使用的名称,或者稍作修改即可使用。
使用上面的代码,我们可以以Excel工作表数据为基础,创建Access数据库,并且可以添加、提取、更改、删除Access中的数据。
上述各段代码都是独立的,你可以使用任意一段代码实现具体的操作功能。例如,如果你已经在Access中建立了数据库,那么你可以使用“将Access数据表中的数据输入到Excel工作表中”的代码获取该数据库中的数据,或者使用“在工作表中根据单元格值筛选并输入Access表中的数据”来从Access中提取需要的数据。
有Access这个强大的数据库作为基础,你就可以专注于使用Excel来分析数据了!
将Access数据表中的数据输入到Excel工作表中
下面的代码将Access数据库指定表中的数据输入到指定的Excel工作表中:
解析:
与前面的代码一样,先要创建对数据库的连接,并指定从tblStudent表中获取记录,然后遍历该表中的字段名并将它们输入到工作表的第1行。通常,使用Fields集合来返回记录集中每个字段的列名称。
接着,使用Range对象的CopyFromRecordset方法将数据库表中的记录输入到工作表以单元格A2开始的区域。CopyFromRecordset方法能够一次遍历所有记录并复制记录集中的内容。
最后,关闭连接并清除对象引用。
在工作表中根据单元格值筛选并输入Access数据表中的数据
如下图所示,在“班级”工作表中,选取单元格B1下拉列表中的条目后,会从Access数据库表中提取出相应的数据并放置在以单元格D1开始的工作表单元格区域:
首先,在“班级”工作表Change事件代码中,输入下面的代码:
解析:
当工作表发生变化时,触发Change事件并执行其中的代码。
为避免因事件代码降低运行速度,代码限定当其中一个单元格发生改变时才执行代码,否则退出,并且关闭事件响应以便调用子程序使工作表单元格填充数据时不会大量反复触发该事件,仅单元格B1发生改变时才调用相应的子程序。
然后,在标准模块中输入下列代码:
代码将连接字符串直接赋值给Recordset对象的ActiveConnection属性,创建了一个本记录集所使用的Connection对象。
代码根据工作表单元格B1中的数据在数据库表中查找相应的记录,并将找到的记录复制到工作表单元格D1开始的单元格区域中。
在工作表中修改数据后更新Access数据表中的相应数据
如下图所示,当修改工作表中的数据后,更新数据库表中的相应数据。例如,修改studentID为2的学生的班级后,运行程序,数据库tblStudent表中的数据相应更新。
代码如下:
解析:
代码首先获取要修改的记录的索引值,即当前修改的单元格所在行列A中的值,然后创建SQL查询语句筛选出对应索引值的记录。
接着,创建ADO连接,并基于SQL语句打开记录集,遍历当前单元格所在行的每列(索引值列除外)并将单元格值写入数据库记录表中。
最后,关闭连接并清除对象。
注意,由于不是在数据库表中写入全部记录,因此本例中光标类型设置为adOpenKeyset,而不是前面代码中的adOpenForwardOnly或adDynamic。
小结
使用VBA及一些特定的技术,将Office套件整合起来,发挥各自独特的优势,这是多么美妙的一件事!~^~
如果您对本文介绍的内容还有什么好的示例,欢迎发送邮件给我:xhdsxfjy@163.com
也可以在本文下方留言,提出您的看法或建议。
本文属原创文章,转载请联系我或者注明出处。
联系客服