ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] VBA求助!如何遍历文件夹中的XLS文件并进行相应操作?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-9-23 17:51 | 显示全部楼层
zhulx_wx 发表于 2015-9-23 17:33
运行了一下,没有问题
您和赵老师写的代码差别好像赵老师是用UNION后,一起存出来的,
您是在每一次循环中 ...

觉得加链接似乎没必要。如果想实现同步更新。可通过:数据-现有连接,选择合适的刷新方式。

TA的精华主题

TA的得分主题

发表于 2015-9-23 19:11 | 显示全部楼层
zhulx_wx 发表于 2015-9-23 17:33
运行了一下,没有问题
您和赵老师写的代码差别好像赵老师是用UNION后,一起存出来的,
您是在每一次循环中 ...

加上超链接功能,为了按照每个工作簿添加一个超链接,就不再使用联合查询了:
  1. Sub ado查询()
  2.     Dim cnn As Object, rs As Object, SQL$, f$, p$, r&, sh As Worksheet, objWMI As Object
  3.     Const HKEY_LOCAL_MACHINE = &H80000002
  4.     Set objWMI = GetObject("winmgmts:\\.\root\default:StdRegProv")
  5.     objWMI.SetDWORDValue HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Jet\4.0\Engines\Excel", "TypeGuessRows", 200
  6.     Application.ScreenUpdating = False
  7.     [a1].CurrentRegion.Offset(1).ClearContents
  8.     r = 2
  9.     Set sh = ActiveSheet
  10.     p = ThisWorkbook.Path & ""
  11.     f = Dir(p & "*.xls")
  12.     While f <> ""
  13.         If f <> ThisWorkbook.Name Then
  14.             Set cnn = CreateObject("adodb.connection")
  15.             Set rs = CreateObject("adodb.recordset")
  16.             cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='excel 8.0;imex=1';Data Source=" & p & f
  17.             SQL = "select * from [工作表目录$]"
  18.             rs.Open SQL, cnn, 1, 3
  19.             Cells(r, 1).CopyFromRecordset rs
  20.             sh.Hyperlinks.Add Anchor:=Cells(r, 1).Resize(rs.RecordCount), Address:=p & f 'A列添加超链接
  21.             r = r + rs.RecordCount
  22.         End If
  23.         f = Dir()
  24.     Wend
  25.     With ActiveSheet.UsedRange
  26.         .Value = .Value
  27.     End With
  28.     cnn.Close
  29.     Set cnn = Nothing
  30.     Set objWMI = Nothing
  31.     Application.ScreenUpdating = True
  32. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-9-23 19:13 | 显示全部楼层
请测试附件
遍历xls文件的操作.rar (32.08 KB, 下载次数: 100)

TA的精华主题

TA的得分主题

发表于 2015-9-23 20:45 | 显示全部楼层
zhaogang1960 发表于 2015-9-23 15:13
请注意:
1、每个文件的工作表名都是“工作表目录”
2、待合并的工作簿不超过49个

请教老师,待合并的工作簿不超过49个,这是有什么约定?

TA的精华主题

TA的得分主题

发表于 2015-9-23 22:14 | 显示全部楼层
onlycxb 发表于 2015-9-23 20:45
请教老师,待合并的工作簿不超过49个,这是有什么约定?

只是个规定:
[分享]ADO+SQL联合查询的限制
http://club.excelhome.net/thread-344998-1-1.html
(出处: ExcelHome技术论坛)

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-9-24 08:51 | 显示全部楼层
本帖最后由 zhulx_wx 于 2015-9-24 08:54 编辑
zhaogang1960 发表于 2015-9-23 19:11
加上超链接功能,为了按照每个工作簿添加一个超链接,就不再使用联合查询了:
试了一下,真是太神奇了!
谢谢赵老师!一定会好好学习!
不过看着真是好深奥啊!
特别想问一下,这个ADO,FSO,SQL有什么关联吗?
这些方法在使用上有什么差别呢?
什么时候用ADO,什么时候用FSO,什么时候用SQL?
烦赵老师能帮我稍稍指点一下啊!

TA的精华主题

TA的得分主题

发表于 2015-9-24 12:12 | 显示全部楼层
zhulx_wx 发表于 2015-9-24 08:51
试了一下,真是太神奇了!
谢谢赵老师!一定会好好学习!
不过看着真是好深奥啊!

ADO (ActiveX Data Objects)是一种基于OLE DB技术的高性能应用程序接口,用以实现访问关系或非关系数据库中的数据。
SQL(Structured Query Language)结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
VBA在使用ADO时需要使用SQL语句

FSO(File System Object)文件系统对象 ,这种对象模型提出了有别于传统的文件操作语句处理文件和文件夹的方法。
我们经常使用FSO进行搜索文件,修改文件属性,或删除文件等

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-9-24 13:12 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 zhulx_wx 于 2015-9-24 13:14 编辑
zhaogang1960 发表于 2015-9-24 12:12
ADO (ActiveX Data Objects)是一种基于OLE DB技术的高性能应用程序接口,用以实现访问关系或非关系数据 ...

非常感谢!

另外我在测试代码时,发现只要有相关文件开着,就会报错,我看了您以前的贴子,加了两句
On Error Goto HErrorHandler
ErrorHandler:
    MsgBox "存在未关闭文档"

但是怎么才能让它提示是哪个文件打开的呢?
这个能实现吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-9-24 14:38 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
zhouzhongchi 发表于 2015-9-23 17:42
这个链接不太懂,最好直接求助zhaogang老师,大神且乐于助人。顺便我也学下。

发现一个奇怪的现象,D文件中有部分卡号是提不出来的
试了很多方法,把格式调成和A文件一致,仍然无法提出来
后来想到赵老师说过ADO会判断字符与数字的比例这个情况,
于是我就把字符的移到上面去之后,再运行就好了.

问题原因已经明确,只是好奇怎么才能规避这个现象呢?

遍历xls文件的操作_0924.rar

30.7 KB, 下载次数: 44

TA的精华主题

TA的得分主题

发表于 2015-9-24 14:57 | 显示全部楼层
zhulx_wx 发表于 2015-9-24 13:12
非常感谢!

另外我在测试代码时,发现只要有相关文件开着,就会报错,我看了您以前的贴子,加了两句

我从来没有遇见过ADO不能连接开着的工作簿
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-12 15:54 , Processed in 0.026384 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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