execl用宏查询mysql_VBA使用SQL语句检索Excel数据

把Excel当做数据库,用ActiveX Data Objects打开连接并使用Select语句来查询数据,效率要比Workbook.Open和Range().Value效率高的多。

下面来看以个例子:

Sub ExeSQL()

' 引用Microsoft ActiveX Data Objects 2.5

' 引用Microsoft Scripting Runtime

Dim conn As New ADODB.Connection

Dim rs As New ADODB.Recordset

Dim fs As New FileSystemObject

Dim extenName$, connStr$, sqlStr$

extenName = fs.GetExtensionName(ThisWorkbook.FullName) ' 文件扩展名

If extenName = "xls" Then '03

connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;" & _

"Data Source=" & ThisWorkbook.FullName

ElseIf extenName = "xlsx" Then '07

connStr="Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;" & _

"Data Source=" & ThisWorkbook.FullName

End If

Set fs = Nothing

sqlStr = "select x.来源,x.访问次数,x.订单总数,y.成功交易量,y.销售额" & _

" from [订单表$] as x inner join [收入表$] as y" & _

" on x.来源=y.来源"

conn.Open connStr

Set rs = conn.Execute(sqlStr)

Sheets("新表").Range("A2").CopyFromRecordset rs

' Sheets("新表").Range("A2").CopyFromRecordset conn.Open(connStr)

Set rs = Nothing: conn.Close: Set conn = Nothing

End Sub

说明:

1、数据库的ConnectionString(连接字符串)的获取,我推荐一个网址:www.connectionstring.com/;

2、ConnectionString里的DataSource(数据源)是ThisWorkbook.FullName(本工作薄);

3、Excel作为数据源时,默认工作表的第一行为字段;

3、本工作薄里面有“订单表”、“收入表”和“新表”三个表,第一行(字段)分别为[来源],[访问次数],[...]等。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值