ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何提取不同文件夹里同名excel文档里的信息

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-5-19 22:05 | 显示全部楼层 |阅读模式
本帖最后由 rmajly 于 2015-5-21 16:46 编辑

如何点击“提取并更新数据”按钮后,能自动提取同文件夹里的不同文件夹里同名excel文档里的信息(详见附件),同时自动生成更新时间如表所示。
数据来源均来自“档案M”的excel文档
其中源数据中对应的单元格分别为:sheet1 姓名AJ4,性别(男H1√,女J1√),年龄AJ5+AK5,工号AJ6,档案号 AJ7Sheet5:个人评价:H9
001.png
a01.zip (103.1 KB, 下载次数: 19)
非常感谢!
旁边的手工录入下表这个功能已经搞好,这个按钮请直接忽视,另外,同文件夹下的不同文件,这里只放了几个实例,实际上可能有60-80个。

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-5-20 07:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
旁边的手工录入下表这个功能已经搞好,这个按钮请直接忽视,另外,同文件夹下的不同文件,这里只放了几个实例,实际上可能有60-80个。

TA的精华主题

TA的得分主题

发表于 2015-5-20 08:14 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-5-20 08:39 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
不同文件夹下只放一个档案文件的话,可以把档案文件名直接改成员工的名字,然后放同一个文件夹下,这样操作起来好像方便些。

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-5-20 14:25 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
JingPeng 发表于 2015-5-20 08:39
不同文件夹下只放一个档案文件的话,可以把档案文件名直接改成员工的名字,然后放同一个文件夹下,这样操作 ...

那自然,但是现在的文件都已经这么搞好了,再一个个弄更费事啊。多时几十个,几百个

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-5-20 20:10 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 rmajly 于 2015-5-21 15:21 编辑

我尝试提三个数据试试看,结果出现:“错误1004,不能对合并单元格作部分更改”。不知何故?可我那表格已经固定不好再做更改,必须用到合并单元格,怎么办?做不下去了,求高手
  1. Private Sub 按钮8_单击()
  2.     Dim arr()
  3.     Application.ScreenUpdating = False
  4.     Application.DisplayAlerts = False
  5.     Set cnn = CreateObject("adodb.connection")
  6.     [B29:O1000].ClearContents
  7.     Mypath = ThisWorkbook.Path & ""
  8.     MyName = Dir(Mypath, vbDirectory)
  9.     Do While MyName <> ""
  10.         If MyName <> "." And MyName <> ".." Then
  11.             If (GetAttr(Mypath & MyName) And vbDirectory) = vbDirectory Then
  12.                 m = m + 1
  13.                 ReDim Preserve arr(m)
  14.                 arr(m) = Mypath & MyName & ""
  15.             End If
  16.         End If
  17.         MyName = Dir
  18.     Loop
  19.     h = 36
  20.     For k = 1 To m
  21.         f = Dir(arr(k) & "*.xls")
  22.         Do While f > " "
  23.             cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='excel 8.0;hdr=no';Data Source=" & arr(k) & f
  24.             Sql = "select * from [sheet1$aj4:aj4]"
  25.             Cells(h, 2).CopyFromRecordset cnn.Execute(Sql)
  26.             Sql = "select * from [sheet1$aj5:aj5]"
  27.             Cells(h, 4).CopyFromRecordset cnn.Execute(Sql)
  28.             Sql = "select * from [sheet1$aj6:aj6]"
  29.             Cells(h, 5).CopyFromRecordset cnn.Execute(Sql)
  30.             Cells(h, 2) = f
  31.             Cells(h, 1) = h - 6
  32.             h = h + 1
  33.             cnn.Close
  34.             f = Dir
  35.         Loop
  36.     Next
  37.         Application.DisplayAlerts = True
  38.     Application.ScreenUpdating = True
  39. End Sub
复制代码
a02.zip (106.44 KB, 下载次数: 12)

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-5-21 16:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

代码是借别人的,还有四个问题没有解决,请高手再帮帮忙,谢谢!
1、 性别不知道怎么提取
2、 提取的年龄只有数值,后面怎么再自动加个“岁”字
3、 更新的时间用固定格式,比方yyyy-m-d,如图生成的却是“##”
4、 如附件002里,合并单元格里就出现问题,如何能解决?
001.zip (130.07 KB, 下载次数: 5) 002.zip (126.1 KB, 下载次数: 5)

TA的精华主题

TA的得分主题

发表于 2015-5-21 16:49 | 显示全部楼层
本帖最后由 opiona 于 2015-5-21 16:59 编辑

完整代码见附件

  1. '*********************************
  2. '*******  北极狐工作室出品  ******
  3. '*******  QQ:14885553      ******
  4. '*********************************

  5. Sub Opiona() '//函数实例

  6. Set SH0 = Worksheets("Sheet2")
  7. SH0.Range("B29:R65536").ClearContents
  8. FileArr = FileAllArr(ThisWorkbook.Path, "档案M.xls", ThisWorkbook.Name, False)
  9. For I = 0 To UBound(FileArr)

  10.     Set WB = Workbooks.Open(FileArr(I))   '//打开工作簿
  11.         SH0.Cells(I + 29, 2) = WB.Worksheets("Sheet1").Range("AJ4")
  12.         If InStr(WB.Worksheets("Sheet1").Range("H1"), "√") > 0 Then SH0.Cells(I + 29, 4) = "男"
  13.         If InStr(WB.Worksheets("Sheet1").Range("J1"), "√") > 0 Then SH0.Cells(I + 29, 4) = "女"
  14.         SH0.Cells(I + 29, 5) = WB.Worksheets("Sheet1").Range("AJ5") & "岁"
  15.         SH0.Cells(I + 29, 6) = WB.Worksheets("Sheet1").Range("AJ6")
  16.         SH0.Cells(I + 29, 8) = WB.Worksheets("Sheet1").Range("AJ7")
  17.         SH0.Cells(I + 29, 12) = Format(Now, "YYYY-MM-DD")
  18.         SH0.Cells(I + 29, 15) = WB.Worksheets("Sheet5").Range("H9")
  19.     WB.Close False  '//保存
  20. Next

  21. End Sub


复制代码

TA的精华主题

TA的得分主题

发表于 2015-5-21 17:00 | 显示全部楼层
aaa.rar (210.58 KB, 下载次数: 41)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-5-21 20:11 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

非常感谢,确实很好用!献花权表谢意!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 18:27 , Processed in 0.043142 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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