ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何写代码把子文件夹的文件全部复制至一个文件夹

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-1-28 17:28 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 bet007 于 2021-1-28 17:40 编辑

我现在有几十个子文件夹,里面是两个文件(不同名),但是各个子文件夹的文件名是相同的。如何写代码把子文件夹的文件全部复制至一个文件夹,并自动按序号改名。谢谢! C.zip (58.05 KB, 下载次数: 33)




TA的精华主题

TA的得分主题

发表于 2021-1-28 19:49 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
http://club.excelhome.net/thread-1258425-1-1.html
文件及 文件夹操作,具体需要楼主根据需求可以使用字典排序

TA的精华主题

TA的得分主题

发表于 2021-1-29 12:54 | 显示全部楼层
Sub ListFilesTest() '
Application.ScreenUpdating = False '
Set sht = ThisWorkbook.Worksheets("汇总") '
    T = Timer '
   ReDim brr(1 To 10000, 1 To 3) '
   With Application.FileDialog(msoFileDialogFolderPicker) '
    If .Show Then myPath$ = .SelectedItems(1) Else Exit Sub '
  End With '
  If Right(myPath, 1) <> "" Then myPath = myPath & "" '
  arr = ListAllFsoDic(myPath, 1) '
  For i = 0 To UBound(arr) '
    m = Dir(arr(i) & "\*.*") '
    Do While m <> "" '
        If m <> ThisWorkbook.Name Then '
            rr = Split(m, ".")
            FileCopy arr(i) & "\" & m, "D:\合并文件\" & rr(0) & "_" & i + 1 & "." & rr(1)
        End If '
      m = Dir '
      Loop '
    Next i '
    TT = Timer - T '
    MsgBox TT '
    Application.ScreenUpdating = True '
End Sub
Function ListAllFsoDic(myPath$, Optional k = 0) '使用2个字典但无需递归的遍历过程
   Dim i&, j&
  Set d1 = CreateObject("Scripting.Dictionary") '字典d1记录子文件夹的绝对路径名
  Set d2 = CreateObject("Scripting.Dictionary") '字典d2记录文件名 (文件夹和文件分开处理)
   d1(myPath) = ""           '以当前路径myPath作为起始记录,以便开始循环检查
  Set Fso = CreateObject("Scripting.FileSystemObject")
  Do While i < d1.Count
  '当字典1文件夹中有未遍历处理的key存在时进行Do循环 直到 i=d1.Count即所有子文件夹都已处理时停止
     kr = d1.Keys '取出文件夹中所有的key即所有子文件夹路径 (注意每次都要更新)
    For Each F In Fso.GetFolder(kr(i)).Files '遍历该子文件夹中所有文件 (注意仅从新的kr(i) 开始)
         j = j + 1: d2(j) = F.Name
         '把该子文件夹内的所有文件名作为字典Item项加入字典d2 (为防止文件重名不能用key属性)
      Next
      i = i + 1 '已经处理过的子文件夹数目 i +1 (避免下次产生重复处理)
      For Each fd In Fso.GetFolder(kr(i - 1)).SubFolders '遍历该文件夹中所有新的子文件夹
          d1(fd.Path) = " " & fd.Name & ""
          '把新的子文件夹路径存入字典d1以便在下一轮循环中处理
      Next
  Loop
  If k Then ListAllFsoDic = d1.Keys Else ListAllFsoDic = d2.Items
  '如果参数=1则列出字典d1中所有子文件夹的路径名 (如使用d1.Items则仅列出子文件夹名称不含路径)
   '如果参数=0则默认列出字典d2中Items即所有文件名
End Function

TA的精华主题

TA的得分主题

发表于 2021-1-29 12:55 | 显示全部楼层
文件合并.rar (16.44 KB, 下载次数: 79)

TA的精华主题

TA的得分主题

发表于 2021-1-29 12:56 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
先在D盘新建一个文件夹,命名为   合并文件,这一步切记不能少,因为,合并后的文件就在这个文件夹内

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-4-9 13:15 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
3190496160 发表于 2021-1-29 12:56
先在D盘新建一个文件夹,命名为   合并文件,这一步切记不能少,因为,合并后的文件就在这个文件夹内

这个要是能通过选择文件夹或者是新建文件夹将更灵活。

TA的精华主题

TA的得分主题

发表于 2024-4-9 15:36 | 显示全部楼层
参与一下,顺便为自己做个小工具
image.png

C.rar

78.99 KB, 下载次数: 15

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-4-9 16:11 | 显示全部楼层
练个手。批量文件复制。
复制后的文件在d:\复制后方件夹\路径下,此文件夹会自动生成。

C.7z

45.23 KB, 下载次数: 13

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-4-9 16:12 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
参与一下。。。

  1. Sub ykcbf()  '//2024/4.9
  2.     Application.ScreenUpdating = False
  3.     Application.DisplayAlerts = False
  4.     Dim fns As New Collection
  5.     Set fso = CreateObject("Scripting.FileSystemObject")
  6.     Set d = CreateObject("Scripting.Dictionary")
  7.     p2 = "d:\复制后方件夹"
  8.     If Not fso.FolderExists(p2) Then fso.CreateFolder p2
  9.     p = ThisWorkbook.path & ""
  10.     Set ff = fso.GetFolder(p)
  11.     getFiles ff, fns, fso
  12.     For Each f In fns
  13.         d(f(1)) = ""
  14.     Next
  15.     For Each k In d.keys
  16.         m = 0
  17.         For Each fn In fns
  18.             If fn(1) = k Then
  19.                 m = m + 1
  20.                 FileCopy fn(0), p2 & k & "-" & m & "." & fn(2)
  21.             End If
  22.         Next
  23.     Next
  24.     Set d = Nothing
  25.     Set fso = Nothing
  26.     Application.ScreenUpdating = True
  27.     MsgBox "OK!"
  28. End Sub

  29. Function getFiles(ff, fns, fso)
  30.     For Each f In ff.Files
  31.         If f.Name Like "*.doc*" Then
  32.             fns.Add Array(f.path, fso.GetBaseName(f), fso.GetExtensionName(f))
  33.         End If
  34.     Next
  35.     For Each fd In ff.SubFolders
  36.         getFiles fd, fns, fso
  37.     Next
  38. End Function
复制代码


评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-4-10 09:30 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

你好,9楼的代码测试了一下,文件夹创建了,但复制到D盘下了。加了 “\“&  试成功了。
但看不懂语句,能不能注释一下中文的意思?谢谢!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 06:55 , Processed in 0.050269 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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