ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 只需两步,用EXCEL批量修改某个文件夹里的所有文件名

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2011-1-23 11:14 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
在日常生活中,我们经常需要整理相片以及一些扫描的相片文件,扫描仪器以及数码相机导出来的文件名称,往往是带着长长字符串的文件名。一个个的对每一个文件进行重命名的动作固然能解决问题。但是如果该文件夹里的文档数量相当庞大,--一一转换起来就显得太麻烦了。今天要帮助大家提高工作效率,又快又好地用EXCEL批量迅速修改某个文件夹里的文件名字,而且能随心所欲的运用EXCEL对文件名进行拖拽。
       创建模块
打开EXCEL2003,右击第一张工作表标签选择“查看代码”,之后右击工程VBA PROJECT->插入->模块,或 “工具”->”宏”->”VISUAL BASIC编辑器”


添加VBA代码
选择新插入的模块后,插入以下代码后保存退出。

Dim filePath As Variant            '定义filepath为变量
Dim obj As Object                  '定义obj为变量对象
Dim fld, ff, gg                    '定义fld,ff,gg为变量
Sub getpath()
    Range("A2:C1000").ClearContents               '清空A2:C1000列
    On Error Resume Next
    Dim shell As Variant
    Set shell = CreateObject("Shell.Application")
    Set filePath = shell.BrowseForFolder(&O0, "选择文件夹", &H1 + &H10, "")   '获取文件夹路径地址
    Set shell = Nothing
  If filePath Is Nothing Then                 '检测是否获得有效路径,如取消直接跳出程序
       Exit Sub
    Else
       gg = filePath.Items.Item.path
  End If
    Set obj = CreateObject("Scripting.FileSystemObject")   '定义变量
    Set fld = obj.getfolder(gg)                            '获取路径
     For Each ff In fld.Files                   '遍历文件夹里文件
        m = m + 1
        Cells(m + 1, 1) = ff.Name
        Cells(m + 1, 2) = "-------"
        Cells(m + 1, 3) = ff.Name
      Next
End Sub

Sub renamefile()
     On Error Resume Next
     If [a2] = "" Then MsgBox "请点击第一步": Exit Sub
      For Each ff In fld.Files                 '遍历文件夹里的所有文件
        m = m + 1
       ff.Name = Cells(m + 1, 3)              '将实际文件名改成目录中C列的对应文件名
      Next
      MsgBox "改名已完成,请检查", vbOKOnly
End Sub
创建两个按钮,
按钮一名称改为“第一步,获得原文件名”,按钮二名称改为”第二步,改成新文件名”
     将按钮一“第一步,获得原文件名”指向宏getpath
     按钮二”第二步,改成新文件名”指向宏renamefile
当然也可以直接点击“工具”->”宏->运行”宏”,然后选择相关的宏getpath和renamefile。
这样,整个批量修改文件名的EXCEL表格也就创建出来了。

具体操作
以后凡遇到需要批量修改文件名的时候,只需要打开该EXCEL文件,按一下第一步按钮一获取文件路径,EXCEL将会弹出一个对话框(“选择文件夹”)向导。

选择需要修改的文件夹之后,
EXCEL里就会罗列出该文件夹里的所有文件名于A列和对应的C列上。将所希望修改的文件名字对应填在C列即可。例如:在C2上填个1.扩展名,然后CTRL+拖拽到C101,这样就可以得到有序的1到100的文件名。
确认之后按一下按钮,则成功将该文件夹里的文件名真正修改成了EXCEL里的C列的名。之后会出现一句提示:"改名已完成,请检查"
确认后就可以去检查目标文件夹里文件名的修改情况。
对需要大量处理文档以及相片的工作者相当实用。

注:由于该目录是需要通过宏功能起作用的,所以当打开工作簿时,EXCEL2007默认会禁用宏,得单击警告栏中的“选项”按钮,选中“启用此内容”单选项,确定后才能运行宏更新目录。EXCEL2003则在“工具”->“宏”->“安全性”中设置为“中”或“低”即可

批量修改文件名.rar

13.95 KB, 下载次数: 3456

评分

5

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-1-23 13:15 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
下载收藏。与zhaogang1960老师设计的很相似

TA的精华主题

TA的得分主题

发表于 2011-1-23 15:15 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-1-23 18:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原帖由 szqhb 于 2011-1-23 13:15 发表
下载收藏。与zhaogang1960老师设计的很相似


哈哈,可能都是基于以前qlz100的原始基础文件上改进的吧。

TA的精华主题

TA的得分主题

发表于 2011-1-23 21:03 | 显示全部楼层
已下载,并稍微改进了一下。遍历单元格改成用数组。呵呵

TA的精华主题

TA的得分主题

发表于 2011-1-23 21:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
太好用了,谢谢呀!

TA的精华主题

TA的得分主题

发表于 2011-4-15 16:26 | 显示全部楼层

TA的精华主题

TA的得分主题

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

回复 1楼 jacksonzeng 的帖子

老师好,您的软件很好,很实用,是目前最方便的。我遇到的问题是:当需要改名的文件夹内的文件有20个以上且已经有顺序编号如:合同-1.doc,合同-2.doc....合同-20.doc,,执行您的程序第一步的时候,它们在,您的A列里被强制的排序啦,顺序变成合同-1.doc,合同-10.doc,合同-11.doc,....合同-2.doc,合同-20.doc,合同-21.doc。而我的新文件名是复制已经在excel表里某一列中各个客户的姓名,我把它们粘贴到您新文件名C列。按照您的程序执行第二步,改名的结果就乱了。没有了一一对应的关系。我又尝试的把您表里的A列排序(加辅助列),然后再把各个客户的姓名粘贴到您新文件名C列,执行以后发现还不是一一对应。有何办法在您的程序里,不要强制的对A列原文件名进行排列呐?或者有没有其他更好的办法解决这个不能一一对应的问题?谢谢您啦。盼答复。

TA的精华主题

TA的得分主题

发表于 2011-4-26 11:32 | 显示全部楼层

是否对程序里的ff.name加上=text(ff,“000”),可以把使得数据排序按照自然的序列?谢

是否对程序里的ff.name加上=text(ff,“000”),可以把使得数据排序按照自然的序列?谢

TA的精华主题

TA的得分主题

发表于 2011-12-26 22:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
楼上的,关于对应问题,一般都会碰到。我的做法是用辅助列,再用Vlookup函数进行查找。这里面其实还有个问题:对于C列如果有重名,改名过程将会出错,因此我在第二步之前,都要进行一下C列的“查重复”操作,不知楼主有何高招?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 07:43 , Processed in 0.050989 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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