ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1377|回复: 9

[求助] 取多个工作薄中指定内容至同一个工作薄相应子表中

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-7-21 16:52 | 显示全部楼层 |阅读模式
我想取附件中各个月工作薄中地市为“汕头”的内容至汇总工作薄相应的子表中,怎么处理呢,请指教,我尝试了:
Sub 各月报类汇总()
Set conn = CreateObject("ADODB.Connection")
conn.Open "provider=Microsoft.Ace.OleDb.12.0;extended properties=excel 12.0;data source=" & ThisWorkbook.Path & "\7月.xlsx"
Sql = "select * from [sheet1$] where 地市='汕头'"
Sheets(1).[a2].CopyFromRecordset conn.Execute(Sql)
conn.Close: Set conn = Nothing
End Sub



但运行出错,也不知原因出错,麻烦指导下。 附件.rar (248.21 KB, 下载次数: 14)




TA的精华主题

TA的得分主题

 楼主| 发表于 2015-7-21 21:42 | 显示全部楼层
{:soso_e154:}麻烦高人再帮忙看看

TA的精华主题

TA的得分主题

发表于 2015-7-22 10:05 | 显示全部楼层
请参考:
  1. Sub 各月报类汇总()
  2.     Dim cnn As Object, rs As Object, rst As Object, SQL$, s$, p$, f$, sh As Worksheet
  3.     p = ThisWorkbook.Path & ""
  4.     f = Dir(p & "*.xlsx")
  5.     Do While f <> ""
  6.         On Error Resume Next
  7.         Set sh = Worksheets(Replace(f, ".xlsx", ""))
  8.         On Error GoTo 0
  9.         If Not sh Is Nothing Then
  10.             sh.UsedRange.ClearContents
  11.             Set cnn = CreateObject("adodb.connection")
  12.             cnn.Open "Provider=Microsoft.ace.OLEDB.12.0;Extended Properties=excel 12.0;Data Source=" & p & f
  13.             Set rs = cnn.OpenSchema(20)
  14.             Do Until rs.EOF
  15.                 If rs.Fields("TABLE_TYPE") = "TABLE" Then
  16.                     s = Replace(rs("TABLE_NAME").Value, "'", "")
  17.                     If Right(s, 1) = "$" Then
  18.                         SQL = "select * from [" & s & "] where 地市='汕头'"
  19.                         Set rst = cnn.Execute(SQL)
  20.                         For i = 1 To rst.Fields.Count
  21.                             sh.Cells(1, i) = rst.Fields(i - 1).Name
  22.                         Next
  23.                         sh.[a2].CopyFromRecordset rst
  24.                     End If
  25.                 End If
  26.                 rs.MoveNext
  27.             Loop
  28.         End If
  29.         f = Dir()
  30.     Loop
  31.     rs.Close
  32.     rst.Close
  33.     cnn.Close
  34.     Set rs = Nothing
  35.     Set rst = Nothing
  36.     Set cnn = Nothing
  37. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2015-7-22 10:06 | 显示全部楼层
请测试附件
附件.rar (256.3 KB, 下载次数: 30)

TA的精华主题

TA的得分主题

发表于 2015-7-22 10:09 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-7-22 13:14 | 显示全部楼层

谢谢指导,但还有点小问题,1、就是如果工作薄都不是.XLSX结尾就失效了,有个别是.XLS的;2、如果工作薄有多个子表也会出错;

我重新上传了附件,麻烦帮忙{:soso_e163:} 附件2.rar (270.14 KB, 下载次数: 4)

TA的精华主题

TA的得分主题

发表于 2015-7-22 14:12 | 显示全部楼层
ljming 发表于 2015-7-22 13:14
谢谢指导,但还有点小问题,1、就是如果工作薄都不是.XLSX结尾就失效了,有个别是.XLS的;2、如果工作薄 ...
  1. Sub 各月报类汇总()
  2.     Dim cnn As Object, rs As Object, rst As Object, SQL$, s$, wn$, p$, f$, m&, sh As Worksheet
  3.     p = ThisWorkbook.Path & ""
  4.     f = Dir(p & "*.xls*")
  5.     Do While f <> ""
  6.         If Right(f, 5) = ".xlsx" Or Right(f, 4) = ".xls" Then
  7.             wn = Split(f, ".")(0)
  8.             On Error Resume Next
  9.             Set sh = Worksheets(wn)
  10.             On Error GoTo 0
  11.             If Not sh Is Nothing Then
  12.                 sh.UsedRange.ClearContents
  13.                 Set cnn = CreateObject("adodb.connection")
  14.                 cnn.Open "Provider=Microsoft.ace.OLEDB.12.0;Extended Properties=excel 12.0;Data Source=" & p & f
  15.                 Set rs = cnn.OpenSchema(20)
  16.                 m = 0
  17.                 Do Until rs.EOF
  18.                     If rs.Fields("TABLE_TYPE") = "TABLE" Then
  19.                         s = Replace(rs("TABLE_NAME").Value, "'", "")
  20.                         If Right(s, 1) = "$" Then
  21.                             m = m + 1
  22.                             SQL = "select * from [" & s & "] where 地市='汕头'"
  23.                             Set rst = cnn.Execute(SQL)
  24.                             If m = 1 Then
  25.                                 For i = 1 To rst.Fields.Count
  26.                                     sh.Cells(1, i) = rst.Fields(i - 1).Name
  27.                                 Next
  28.                             End If
  29.                             sh.Range("A" & sh.Rows.Count).End(xlUp).Offset(1).CopyFromRecordset rst
  30.                         End If
  31.                     End If
  32.                     rs.MoveNext
  33.                 Loop
  34.             End If
  35.         End If
  36.         f = Dir()
  37.     Loop
  38.     rs.Close
  39.     rst.Close
  40.     cnn.Close
  41.     Set rs = Nothing
  42.     Set rst = Nothing
  43.     Set cnn = Nothing
  44. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-7-22 14:13 | 显示全部楼层
请测试附件
附件2.rar (266.41 KB, 下载次数: 31)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-7-22 15:48 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-8-17 09:03 | 显示全部楼层
本帖最后由 LMY123 于 2018-8-24 10:58 编辑

合并工作薄所有工作表,写入总薄对应的工作表中
Set rs = cnn.OpenSchema(20)


补充内容 (2019-1-2 17:16):
已入库
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-12 07:58 , Processed in 0.027427 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表