ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 批量修改文件名的问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-12-19 23:22 | 显示全部楼层 |阅读模式

请教各位老师,在批量修改文件名遇到一个问题,如附件中,需要对A列原文件名做处理生成C列新文件名,处理规则就是将A列原文件名前面的m_去掉,我用替换又不行,因为怕中间会有m_,只需要处理掉前面的m_。
请老师指导一下如何用VBA实现这个功能,谢谢老师了。


批量修改文件名的问题.rar

11.19 KB, 下载次数: 19

TA的精华主题

TA的得分主题

发表于 2013-12-19 23:41 | 显示全部楼层
请测试:
  1. Sub Macro1()
  2.     Dim p$, f$, arr$(), m%, i%
  3.     p = ThisWorkbook.Path & ""
  4.     f = Dir(p & "m_*.jpg")
  5.     Do While f <> ""
  6.         m = m + 1
  7.         ReDim Preserve arr(1 To m)
  8.         arr(m) = f
  9.         f = Dir()
  10.     Loop
  11.     If m = 0 Then
  12.         MsgBox "没有发现以m_开头的图片文件!", vbInformation
  13.         Exit Sub
  14.     End If
  15.     For i = 1 To m
  16.         Name p & arr(i) As p & Mid(arr(i), 3)
  17.     Next
  18.     MsgBox "处理完毕", vbInformation
  19. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2013-12-19 23:44 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
请注意,把工作簿放在图片文件夹中,不用输入文件名,程序自动查询以m_开头的图片文件并改名,如果没有发现会提示后退出程序
请看附件
111.rar (20.07 KB, 下载次数: 22)

TA的精华主题

TA的得分主题

发表于 2013-12-20 16:32 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
ailvlv 发表于 2013-12-20 16:28
谢谢老师,我刚才测试了一下,发现还是那个问题,解压后,运行批量修改文件名.xls,找到“指定文件夹”下 ...

8楼我已经点评告诉你了:
10楼附件有点问题,已更新
就是Call GetFiles(ThisWorkbook.Path, sFileType, Fso, arr, m)改为
Call GetFiles(p, sFileType, Fso, arr, m)

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-12-20 12:37 | 显示全部楼层
zhaogang1960 发表于 2013-12-19 23:44
请注意,把工作簿放在图片文件夹中,不用输入文件名,程序自动查询以m_开头的图片文件并改名,如果没有发现 ...

谢谢版主老师指导,就是这个效果,但是有2个扩展细节问题老师能解决吗?
一、程序自动查询以m_开头的图片将m_去掉,如果去掉m_后文件夹里有同名文件,就删除原文件,再改名,也就是覆盖掉原文件的效果。
二、能把只支持图片扩展到支持文件夹内所有文件吗?就是可以指定更改的文件夹,然后把指定文件夹里所有的文件不局限于图片都按照规则修改命名。
请老师指导,谢谢了。

改名覆盖已存在文件.rar

26.06 KB, 下载次数: 11

TA的精华主题

TA的得分主题

发表于 2013-12-20 13:04 | 显示全部楼层
ailvlv 发表于 2013-12-20 12:37
谢谢版主老师指导,就是这个效果,但是有2个扩展细节问题老师能解决吗?
一、程序自动查询以m_开头的图片 ...
  1. Sub Macro1()
  2.     Dim f$, Fso As Object, sFileType$, i&, arr$(), brr$(), m&
  3.     sFileType = "m_*.*"
  4.     Set Fso = CreateObject("Scripting.FileSystemObject")
  5.     Call GetFiles(ThisWorkbook.Path, sFileType, Fso, arr, m)
  6.     If m = 0 Then
  7.         MsgBox "没有发现以m_开头的文件!", vbInformation
  8.         Exit Sub
  9.     End If
  10.     For i = 1 To m
  11.         f = arr(1, i) & Mid(arr(2, i), 3)
  12.         If Dir(f) <> "" Then Kill f
  13.         Name arr(1, i) & arr(2, i) As f
  14.     Next
  15.     MsgBox "处理完毕", vbInformation
  16.     Set Fso = Nothing
  17. End Sub

  18. Private Sub GetFiles(ByVal sPath$, ByVal sFileType$, ByRef Fso As Object, ByRef arr$(), ByRef m&)
  19.     Dim Folder As Object
  20.     Dim SubFolder As Object
  21.     Dim File As Object
  22.     Set Folder = Fso.GetFolder(sPath)
  23.     For Each File In Folder.Files
  24.         If File.Name Like sFileType Then
  25.             If File.Name <> ThisWorkbook.Name Then
  26.                 m = m + 1
  27.                 ReDim Preserve arr(1 To 2, 1 To m)
  28.                 arr(1, m) = sPath & ""
  29.                 arr(2, m) = File.Name
  30.             End If
  31.         End If
  32.     Next
  33.     If Folder.SubFolders.Count > 0 Then
  34.         For Each SubFolder In Folder.SubFolders
  35.             Call GetFiles(SubFolder.Path, sFileType, Fso, arr, m)
  36.         Next
  37.     End If
  38.     Set Folder = Nothing
  39.     Set File = Nothing
  40.     Set SubFolder = Nothing
  41. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2013-12-20 13:05 | 显示全部楼层
请看附件
改名覆盖已存在文件.rar (29.64 KB, 下载次数: 37)

TA的精华主题

TA的得分主题

发表于 2013-12-20 14:05 | 显示全部楼层
zhaogang1960 发表于 2013-12-20 13:05
请看附件

老师太牛了,顶一下

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-12-20 15:01 | 显示全部楼层
zhaogang1960 发表于 2013-12-20 13:05
请看附件

感谢老师您的指导,2个问题都得到解决,但是在指定文件夹这个处理上,我没表达清楚,您现在的程序实现了替换,但是处理的对象是同级目录下所有的文件夹都会处理掉,能不能向我在附件指定文件夹效果那样,先选定文件夹再处理,谢谢老师了。

指定文件夹.rar

28.26 KB, 下载次数: 9

点评

10楼附件有点问题,已更新  发表于 2013-12-20 16:13

TA的精华主题

TA的得分主题

发表于 2013-12-20 15:25 | 显示全部楼层
本帖最后由 zhaogang1960 于 2013-12-20 16:12 编辑
ailvlv 发表于 2013-12-20 15:01
感谢老师您的指导,2个问题都得到解决,但是在指定文件夹这个处理上,我没表达清楚,您现在的程序实现了替 ...

不用分两步:
  1. Sub Macro1()
  2.     Dim p$, f$, Fso As Object, sFileType$, i&, arr$(), brr$(), m&
  3.     With Application.FileDialog(msoFileDialogFolderPicker)
  4.         If .Show = False Then Exit Sub
  5.         p = .SelectedItems(1)
  6.     End With
  7.     sFileType = "m_*.*"
  8.     Set Fso = CreateObject("Scripting.FileSystemObject")
  9.     Call GetFiles(p, sFileType, Fso, arr, m)
  10.     If m = 0 Then
  11.         MsgBox "没有发现以m_开头的文件!", vbInformation
  12.         Exit Sub
  13.     End If
  14.     For i = 1 To m
  15.         f = arr(1, i) & Mid(arr(2, i), 3)
  16.         If Dir(f) <> "" Then Kill f
  17.         Name arr(1, i) & arr(2, i) As f
  18.     Next
  19.     MsgBox "处理完毕", vbInformation
  20.     Set Fso = Nothing
  21. End Sub

  22. Private Sub GetFiles(ByVal sPath$, ByVal sFileType$, ByRef Fso As Object, ByRef arr$(), ByRef m&)
  23.     Dim Folder As Object
  24.     Dim SubFolder As Object
  25.     Dim File As Object
  26.     Set Folder = Fso.GetFolder(sPath)
  27.     For Each File In Folder.Files
  28.         If File.Name Like sFileType Then
  29.             If File.Name <> ThisWorkbook.Name Then
  30.                 m = m + 1
  31.                 ReDim Preserve arr(1 To 2, 1 To m)
  32.                 arr(1, m) = sPath & ""
  33.                 arr(2, m) = File.Name
  34.             End If
  35.         End If
  36.     Next
  37.     If Folder.SubFolders.Count > 0 Then
  38.         For Each SubFolder In Folder.SubFolders
  39.             Call GetFiles(SubFolder.Path, sFileType, Fso, arr, m)
  40.         Next
  41.     End If
  42.     Set Folder = Nothing
  43.     Set File = Nothing
  44.     Set SubFolder = Nothing
  45. End Sub
复制代码


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

本版积分规则

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

GMT+8, 2025-1-13 02:51 , Processed in 0.029572 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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