ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 請問如何在不打開所有檔案下,複製指定儲存格內容至新檔案中,快速完成資料彙整?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-2-26 11:12 | 显示全部楼层 |阅读模式
因工作上需要彙整之前提供給各單位之檔案(格式相同),只需要彙整這些格式相同檔案中某些特定儲存格的資料。
但每次因為都要打開檔案-->複製儲存格資料-->貼在新檔案-->關閉舊檔案,依彙整檔案數量多寡重覆進行多次,且浪費很多時間。
因對於VBA還沒有很熟,需要請教各位高手,如何用VBA,將同一個資料夾中多個相同格式的檔案,將這些檔案內某些特定儲存格的資料,快速完成彙整的動作。
例如:要複製檔案A、檔案B、檔案C的B2及B8在新檔案中的A2及B2、A3及B3、A4及B4中。

範例.zip

13.94 KB, 下载次数: 16

TA的精华主题

TA的得分主题

发表于 2011-2-26 11:57 | 显示全部楼层
  1. Public Sub ZL1()
  2. F = Dir(ThisWorkbook.path & "\*.xls")
  3. Do While F <> ""
  4.    If F <> ActiveWorkbook.Name Then
  5.     S = S & "/" & F
  6.    End If
  7.   F = Dir
  8. Loop
  9. For Each F In Split(Right(S, Len(S) - 1), "/")
  10.   With Sheet1.[a65536].End(xlUp)
  11.      .Offset(1, 0) = GetValue(ThisWorkbook.path, F, "Sheet1", "B2")
  12.      .Offset(1, 1) = GetValue(ThisWorkbook.path, F, "Sheet1", "B8")
  13.   End With
  14. Next
  15. End Sub
  16. Private Function GetValue(path, file, sheet, ref)
  17. '   从未打开的Excel文件中检索数据
  18.     Dim arg As String
  19. '   确保该文件存在
  20.     If Right(path, 1) <> "" Then path = path & ""
  21.     If Dir(path & file) = "" Then
  22.         GetValue = "File Not Found"
  23.         Exit Function
  24.     End If
  25. '   创建变量
  26.     arg = "'" & path & "[" & file & "]" & sheet & "'!" & _
  27.       Range(ref).Range("A1").Address(, , xlR1C1)
  28. '   执行XLM 宏
  29.     GetValue = ExecuteExcel4Macro(arg)
  30. End Function
复制代码
试下吧

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-2-26 19:56 | 显示全部楼层
複製貼上程式碼後,執行第一段(ZL1)是可以達成我要的目的,但有幾點想請教一下:
1.程式分為二個段落,若滑鼠停在第二段執行(GetValue)時,沒有作用。請問第二段程式的目的是?
2.延伸思考:如果資料來源不只在B2及B8等B欄,而是在B2、C3、D4等,程式要如何修正?是否為:
With Sheet1.[a65536].End(xlUp)
     .Offset(1, 0) = GetValue(ThisWorkbook.path, F, "Sheet1", "B2")
     .Offset(1, 1) = GetValue(ThisWorkbook.path, F, "Sheet1", "C3")
     .Offset(1, 2) = GetValue(ThisWorkbook.path, F, "Sheet1", "D4")
  End With

再麻煩指教一下。

TA的精华主题

TA的得分主题

发表于 2011-2-26 22:43 | 显示全部楼层
第二段是函数,为第一段所调用执行。

理论你修改的代码是正确的。你可以试验一下。

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-2-28 18:47 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-10-16 04:33 , Processed in 0.036010 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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