在VBA中,可以将Excel工作表作为数据库进行访问,通过ADO(活动数据访问对象)访问Excel中的数据。同时,在Excel中也可以访问数据库(如Access、SQ LServer等)中的数据,并将数据填充到Excel工作表中。
因为Excel具有易用性、通用性和庞大的用户群,在一些小的应用程序中,可以将Excel作为后台数据库,用来保存用户的数据。
ADO(ActiveX Data Objects)是微软的一种数据访问技术,它被设计用来提供通用数据访问。ADO 对象模型定义了一个可编程的分层对象集合,主要由三个对象成员(Connection、Command 和Recordset),以及几个集合对象Errors、Parameters 和Fields 等组成。
可以使用Connection 对象连接到数据源,通过该对象可生成ADO 层次中的其他对象。
在VBA 中使用ADO 对象,必须先为当前工程引用ADO 的对象库,选择菜单“工具/引用”,打开“引用”对话框,在列表框中找到“Microsoft ActiveX Data Objects 2.8 Library”选项并选中,如下所示。
将ADO 对象库添加到当前工程中后,就可以使用ADODB.Connection 定义数据库连接对象变量,以及其他ADO 对象变量。
有如下工作表(表名是数据库):
商品名称 |
规格型 |
颜色 |
单位 |
单价 |
期初库存 |
三星手机 |
E508 |
黑 |
台 |
3500.00 |
5 |
诺基亚手机 |
3200 |
灰 |
台 |
2800.00 |
5 |
诺基亚手机 |
7260 |
红 |
台 |
3200.00 |
2 |
三星手机 |
808 |
灰 |
台 |
1000.00 |
2 |
摩托罗拉手机 |
1200 |
灰 |
台 |
3880.00 |
2 |
摩托罗拉手机 |
V3 |
黑 |
台 |
1560.00 |
1 |
摩托罗拉手机 |
V3i |
黑 |
台 |
2200.00 |
1 |
按商品名称模糊查询记录:
Sub 以SQL方式查询数据() Dim cnn As ADODB.Connection Dim rs As ADODB.Recordset Dim strSql As String, str1 As String On Error Resume Next Set cnn = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Extended Properties=Excel 8.0;" _ & "Data Source=" & ThisWorkbook.FullName str1 = ActiveSheet.Range("A2") strSql = "Select * FROM [数据库$] Where 商品名称 like '%" & str1 & "%'" rs.Open strSql, cnn, adOpenStatic With ActiveSheet .Range("A5:G1000").ClearContents .Range("A5").CopyFromRecordset rs End With rs.Close cnn.Close Set rs = Nothing Set cnn = NothingEnd Sub
活动工作表的效果如下:
查找名称 |
|||||
三星 |
|||||
商品名称 |
规格型 |
颜色 |
单位 |
单价 |
期初库存 |
三星手机 |
黑 |
台 |
3500 |
5.00 |
|
三星手机 |
808 |
灰 |
台 |
1000 |
2.00 |
记录集返回从数据库取回的查询结果集,可使用记录集的Open 方法打开记录集,该方法的语法格式如下:
recordset.Open Source, ActiveConnection, CursorType, LockType, Options
各参数的含义如下。
● Source:为变量名、SQL 语句、表名、存储过程调用等。
● ActiveConnection:为连接数据库的连接字符串。
● CursorType:确定提供者打开Recordset 时应该使用的游标类型。
● LockType:确定提供者打开Recordset 时应该使用的锁定(并发)类型。
● Options:用于指示提供者如何计算Source 参数(如果它代表的不是Command 对象),或从以前保存Recordset 的文件中恢复Recordset。
据按“商品名称”进行汇总:
Sub 汇总数据() Dim cnn As ADODB.Connection Dim rs As ADODB.Recordset Dim strSql As String, str1 As String On Error Resume Next Set cnn = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Extended Properties=Excel 8.0;" _ & "Data Source=" & ThisWorkbook.FullName strSql = "Select 商品名称, sum(期初库存) FROM [数据库$] group by 商品名称" rs.Open strSql, cnn, adOpenStatic With Sheet1 .Range("A2:G1000").ClearContents .Range("A2").CopyFromRecordset rs End With rs.Close cnn.Close Set rs = Nothing Set cnn = NothingEnd Sub
将Excel 作为数据库可用在一些小型应用中,对于需要处理大量的数据时,更多的还是使用专业的数据库系统(如Access、SQL Server 数据库系统等)。在很多情况下,用户希望从这些专业的数据库系统中获取部分数据,然后在Excel 中进行分析处理。
ref
吴永佩,成丽君 《征服Excel VBA:让你工作效率倍增的239 个实用技巧 》
-End-
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!