VBA中使用SQL

 取出同文件夹下所有表格中相关信息

Dim Cnn As Object, MyCat As Object, rst As Object, sql$, SheetName$, f$, ph$, r&, strConn$
ph = ThisWorkbook.Path & "\": f = Dir(ph & "*.xls?") '注意写法,创建路径
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=excel 12.0;Data Source="
Application.ScreenUpdating = False

[A:C].ClearContents: [a1:c1] = [{"文件名","类别","员数"}]

Set MyCat = CreateObject("ADOX.Catalog")
Set Cnn = CreateObject("ADODB.Connection")
Cnn.Open strConn & ThisWorkbook.FullName
Do While f <> "" '循环所有文件
    If (f <> ThisWorkbook.Name) * (f <> "0030.xlsx") Then '如果不是本文件,进行提取
        Set rst = CreateObject("ADODB.recordset")
        MyCat.ActiveConnection = strConn & ph & f
        SheetName = Replace(MyCat.Tables(0).Name, "'", "")
        sql = "select f1,f7 from [Excel 12.0;Hdr=no;Database=" & ph & f & "].[" & SheetName & "i3:o30] where f1 is not null" '写SQL
        rst.Open sql, Cnn, 3, 1: r = Range("a" & Rows.Count).End(3).Row + 1  '执行SQL
        Range("a" & r).Resize(rst.RecordCount) = "'" & Left(f, InStrRev(f, ".") - 1) '
        Range("b" & r).CopyFromRecordset rst '取出记录
    End If
    f = Dir
Loop

Application.ScreenUpdating = True

SQL语句示例

Sql=select a.物料编号,sum(iif(isnull(b.库存),0,b.库存)) as 本周库存,sum(iif(isnull(c.库存),0,c.库存)) as 上周库存,sum(iif(isnull(b.库存),0,b.库存))-sum(iif(isnull(c.库存),0,c.库存)) as 差异 from ((select distinct 物料编号 from (select 物料编号 from [本周$] union all select 物料编号 from [上周$])) a left join [本周$] b on a.物料编号=b.物料编号) left join [上周$] c on a.物料编号=c.物料编号 group by a.物料编号

 

 

  • 4
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值