ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求助:如何不打开多个EXCEL文件提取数据存入指定EXCEL文件

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-3-5 14:17 | 显示全部楼层 |阅读模式
如有:文件XXX   文件XXX  文件XXX   文件XXXX ~~~~~一系列不同文件(个数,名称不定),且文件名称不一样,但放在同一个文件夹里,如何自动提取该文件夹内所有文件的指定单元格的数据存入一个指定的统计表格.
要求:提取当前文件路径下book1.xls的sheet1工作表中的a1单元格数据。注:不能打开book.xls文件
我知道用vlookup方法结合文件路径是可以做到的,但是有没有在VBA下用程序的方式来搜索得到呢?

notopenexcel.rar

4.72 KB, 下载次数: 168

TA的精华主题

TA的得分主题

发表于 2011-3-5 15:26 | 显示全部楼层
原帖由 terryzj 于 2011-3-5 14:17 发表
如有:文件XXX   文件XXX  文件XXX   文件XXXX ~~~~~一系列不同文件(个数,名称不定),且文件名称不一样,但放在同一个文件夹里,如何自动提取该文件夹内所有文件的指定单元格的数据存入一个指定的统计表格.
要求 ...

Sub Macro1()
    Dim cnn As Object, SQL$, Mypath$, MyFile$, n%
    Set cnn = CreateObject("adodb.connection")
    Mypath = ThisWorkbook.Path & "\"
    MyFile = Dir(Mypath & "*.xls")
    Do While MyFile <> ""
        If MyFile <> ThisWorkbook.Name Then
            n = n + 1
            If n = 1 Then
                cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & Mypath & MyFile
                SQL = "select* from [Sheet1$] where Project is not null"
            Else
                SQL = SQL & " union all select * from [Excel 8.0;Database=" & Mypath & MyFile & "].[Sheet1$] where Project is not null"
            End If
        End If
        MyFile = Dir()
    Loop
    [a1].CurrentRegion.Offset(1).ClearContents
    [a2].CopyFromRecordset cnn.Execute(SQL)
    cnn.Close
    Set cnn = Nothing
End Sub

TA的精华主题

TA的得分主题

发表于 2011-3-5 15:27 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
附件
notopenexcel.rar (13.71 KB, 下载次数: 483)

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-3-5 15:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
十分感谢!
没想到是用到SQL来做
学习Ing

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-3-5 15:52 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & Mypath & MyFile
这句话
我的文件夹中即有2007版本的文件.xlsm,又有2003版本的文件.xls
似乎:Microsoft.ACE.OLEDB.12.0才支持.xlsx、.xlsm等2007excel文件
microsoft.jet.oledb.4.0只支持.xls
怎么解决阿?
==========
另外一个问题,我想根据某一个字段查找所需数据,sql语句怎么写?
十分感谢!

TA的精华主题

TA的得分主题

发表于 2011-3-5 16:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原帖由 terryzj 于 2011-3-5 15:52 发表
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & Mypath & MyFile
这句话
我的文件夹中即有2007版本的文件.xlsm,又有2003版本的文件.xls
似乎:Microsoft.ACE.OLEDB ...

稍加修改就可以了,不要自连接,cnn连接到xls和xlsx文件都可以查询到超过65536行记录(针对xlsx文件):
Sub Macro1()
    Dim cnn As Object, SQL$, Mypath$, MyFile$, n%
    Set cnn = CreateObject("adodb.connection")
    Mypath = ThisWorkbook.Path & "\"
    MyFile = Dir(Mypath & "*.xls*")
    Do While MyFile <> ""
'        If MyFile <> ThisWorkbook.Name Then
        If Right(MyFile, 4) <> "xlsm" Then '不查询启用宏的工作簿(xlsm)
            n = n + 1
            If n = 1 Then
                cnn.Open "Provider=Microsoft.Ace.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & Mypath & MyFile
                SQL = "select* from [Sheet1$] where Project is not null"
            Else
                SQL = SQL & " union all select * from [Excel 12.0;Database=" & Mypath & MyFile & "].[Sheet1$] where Project is not null"
            End If
        End If
        MyFile = Dir()
    Loop
    [a1].CurrentRegion.Offset(1).ClearContents
    [a2].CopyFromRecordset cnn.Execute(SQL)
    cnn.Close
    Set cnn = Nothing
End Sub

[ 本帖最后由 zhaogang1960 于 2011-3-5 16:42 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-3-5 16:41 | 显示全部楼层
附件
自己设置数据超过65536试试看:
notopenexcel - 副本.rar (151.4 KB, 下载次数: 298)

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-3-5 17:10 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢!
另外一个问题, 还有一个问题如何根据表中A列字段,查询所需字段,然后返回C列的数据
即A列是查询条件,C列是需要返回的结果
这样的sql语句怎么写啊?

TA的精华主题

TA的得分主题

发表于 2011-3-5 17:13 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 terryzj 于 2011-3-5 17:10 发表
谢谢!
另外一个问题, 还有一个问题如何根据表中A列字段,查询所需字段,然后返回C列的数据
即A列是查询条件,C列是需要返回的结果
这样的sql语句怎么写啊?

不是太理解,请上传附件并详细说明

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-3-5 19:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
还有一个问题
我用的是excel2007,vba程序是放在采用启用宏的excel(*.xlsm),用上面的代码,程序没有反应啊?
具体见附件
zhao:can u help me? thkx very much!

GetData.zip

28.74 KB, 下载次数: 34

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-12 18:56 , Processed in 0.024417 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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