ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 遍历子文件夹,根据规则拷贝指定文件到指定目录并重命名

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-3-12 18:08 | 显示全部楼层 |阅读模式
本帖最后由 zp602 于 2020-3-12 22:14 编辑

各位老师好!我对VBA不太熟悉,能否帮忙编一段代码,解决文件重命名的问题。谢谢!
遍历子文件夹,根据规则重新命名指定文件,并拷贝到指定目录
1.子文件夹可能有几百个;
2.每个子文件夹(不确定文件名)都包含一个.xls文件(不确定文件名),同时包含一个.cdr或一个.ai的文件(不确定文件名);
3.每个.xls文件的A2单元格,是一个由数字和字母组成的字符串,称之为“物料编码”,“物料编码”不会重复;
4.想实现的功能:
  复制子文件夹下面的.cdr或.ai文件到素材文件夹,用A2单元格“物料编码”的字符串重命名该文件,例如:
  “物料编码”为12345678,cdr文件为abcd123.cdr,拷贝abcd123.cdr到“素材”文件夹并重命名为12345678.cdr
  如果子文件夹里没有.cdr文件,一定有.ai文件,那么拷贝.ai文件到素材文件夹,用“物料编码”对.ai重命名。
  对所有的子文件夹都进行以上操作。

遍历文件夹并根据规则重新命名.rar

6.82 KB, 下载次数: 48

TA的精华主题

TA的得分主题

发表于 2020-3-12 18:54 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
MARK学习一下,这个还是有难度的

TA的精华主题

TA的得分主题

发表于 2020-3-12 21:31 | 显示全部楼层
在“遍历文件夹并根据规则重新命名”文件夹中新建个Excel文件,将下面代码粘贴即可。
Sub 遍历子文件夹,根据规则拷贝指定文件到指定目录并重命名()
  Dim i&, n&, MyPath$
  On Error Resume Next
  Application.ScreenUpdating = False
  Application.DisplayAlerts = False
  '**********************************************************************************
  Rem 提取路径名及文件名
  Set dic = CreateObject("Scripting.Dictionary")    '创建一个字典对象
  MyPath = ThisWorkbook.Path
  dic.Add (MyPath & "\"), ""
  i = 0
  Do While i < dic.Count
    ke = dic.keys   '开始遍历字典
    Filename = Dir(ke(i), vbDirectory)    '查找目录
      Do While Filename <> ""
        If Filename <> "." And Filename <> ".." Then
          If (GetAttr(ke(i) & Filename) And vbDirectory) = vbDirectory Then    '如果是次级目录
            dic.Add (ke(i) & Filename & "\"), ""  '就往字典中添加这个次级目录名作为一个条目
          End If
        End If
        Filename = Dir    '继续遍历寻找
      Loop
    i = i + 1
  Loop
  i = 0
'**********************************************************************************
  struser = MyPath & "\"
  For Each ke In dic.keys '以查找总表所在文件夹下所有excel文件为例
'    m = m + 1
    If InStr(ke, "素材") Then GoTo 1
      myfliename = Dir(ke & "*.*")  '过滤器:EXCEL2003为:*.xls,excel2007为:*.xlsx
      Do While myfliename <> ""
        If myfliename <> Liwai Then  '排除例外文件
          If myfliename <> ThisWorkbook.Name And myfliename <> "求助说明.txt" Then
            If InStr(myfliename, ".xls") Or InStr(myfliename, ".xlsx") Then
              Set wb = Workbooks.Open(ke & myfliename)
              With wb
                nm = .Sheets(1).Range("a2").Value
                .Close
              End With
            End If
            If Dir(ke & myfliename, ".cdr") <> "" Or Dir(ke & myfliename, ".ai") <> "" Then
              If InStr(myfliename, ".cdr") Then
                FileCopy ke & myfliename, struser & "素材\" & nm & ".cdr"
              End If
              If InStr(myfliename, ".ai") Then
                FileCopy ke & myfliename, struser & "素材\" & nm & ".ai"
              End If
            End If
          End If
        End If
        myfliename = Dir
      Loop
1:
  Next
  Application.DisplayAlerts = True
  Application.ScreenUpdating = True
End Sub

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-3-12 21:32 | 显示全部楼层
本帖最后由 乐乐2006201505 于 2020-3-12 21:34 编辑

代码需审核,耐心等待。刚给你私发了,估计你也没报什么大的希望,或者不急用。处于离线状态。心有点凉。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-12 21:42 | 显示全部楼层
乐乐2006201505 发表于 2020-3-12 21:32
代码需审核,耐心等待。刚给你私发了,估计你也没报什么大的希望,或者不急用。处于离线状态。心有点凉。

我一直在忙于工作,所以没有及时在线,感谢你抽出宝贵的时间帮我写代码,十分感谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-13 17:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 zp602 于 2020-3-14 13:45 编辑
乐乐2006201505 发表于 2020-3-12 21:31
在“遍历文件夹并根据规则重新命名”文件夹中新建个Excel文件,将下面代码粘贴即可。
Sub 遍历子文件夹, ...

乐乐老师,我在使用过程中发现重命名出错了。原始文件.cdr和.ai的文件名,包含“#”、“$”、"%"等特殊符号,执行代码后重命名的文件出现2种情况:1.缺失;2.重复。

怀疑是特殊符号引起的,我将文件手动重命名为正常文件名,再执行代码,同样会出现以上错误。
具体情况见附件,麻烦你有空帮我看一下,谢谢!

批量改名出错例子2.rar

53.26 KB, 下载次数: 14

TA的精华主题

TA的得分主题

发表于 2020-3-14 09:23 | 显示全部楼层
乐乐2006201505 发表于 2020-3-12 21:31
在“遍历文件夹并根据规则重新命名”文件夹中新建个Excel文件,将下面代码粘贴即可。
Sub 遍历子文件夹, ...

这思路清奇啊,妙用字典存储,实在是高

TA的精华主题

TA的得分主题

发表于 2020-3-14 09:40 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
zp602 发表于 2020-3-13 17:02
乐乐老师,我在使用过程中发现重命名出错了。原始文件.cdr和.ai的文件名,包含“#”、“$”、"%"等特殊符 ...

VBA还加密码?

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-14 13:45 | 显示全部楼层

对不起,重新上传了。

批量改名出错例子2.rar

53.26 KB, 下载次数: 20

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-14 14:45 | 显示全部楼层
乐乐2006201505 发表于 2020-3-12 21:31
在“遍历文件夹并根据规则重新命名”文件夹中新建个Excel文件,将下面代码粘贴即可。
Sub 遍历子文件夹, ...

乐乐老师,请再帮我看一下。我上传3个出错的示例,其中一个只修改cdr文件且保证了所有文件名不重复,代码执行改错了文件名,出错的文件夹是39283438806S和38114408893S。

批量改名出错例子3.rar

93.29 KB, 下载次数: 36

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

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-20 14:43 , Processed in 0.049413 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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