Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 7952|回复: 6

[已解决]【求高手帮忙合并代码】批量重命名文件名+获取文件的创建时间

[复制链接]
发表于 2012-5-27 22:27 | 显示全部楼层 |阅读模式

有一大批文件需要统一重新命名,就是在所有文件名称前面统一加上文件的信息例如:“创建日期,【2012年05月】文件名.xls"。
希望在一个Excel表格里面有两个按钮(【查找】、【修改】)
1、点击【查找】以后实现:
从A2开始,A列显示这个表格所在目录下(包括文件下里面的文件)所有文件的名称,从B2开始,B列显示文件的创建时间,从C2开始,显示文件的修改时间等文件信息求……

2、再点击【修改】
那么文件能修改为E列对应的新文件名称。(前提是从E2开始,E列有对应的名称)


已经有相关代码,求高手帮忙修改,感谢。


批改文件名的VB代码为:
  1. Dim fs, f, f1, fc, objxls
  2. Dim filename() As Variant
  3. Dim fullfilename() As Variant
  4. Dim newfullfilename() As Variant
  5. Dim namefilter() As Variant
  6. Dim i%, n%
  7. Sub getnames()
  8. Dim error
  9. On Error Resume Next
  10. Set objxls = CreateObject("Excel.application")
  11. Set fs = CreateObject("Scripting.FileSystemObject")
  12. Set f = fs.GetFolder(ActiveWorkbook.Path)
  13. Set fc = f.Files
  14. n = 0
  15. For Each f1 In fc
  16.     ReDim Preserve filename(n)
  17.     ReDim Preserve fullfilename(n)
  18.     ReDim Preserve namefilter(n)
  19.     fullfilename(n) = f1
  20.     namefilter(n) = Right(f1, Len(f1) - InStrRev(f1, "."))
  21.     filename(n) = Mid(f1, InStrRev(f1, "") + 1, Len(f1) - InStrRev(f1, "") - Len(namefilter(n)) - 1)
  22.     n = n + 1
  23. Next
  24. Range("C2").Resize(n) = Application.Transpose(filename)
  25. Range("E2").Resize(n) = Application.Transpose(fullfilename)
  26. End Sub
  27. Sub changenames()
  28. Dim error
  29. On Error Resume Next
  30. n = Range("E65536").End(xlUp).Row - 1
  31. ReDim newfullfilename(n - 1)
  32. ReDim filename(n - 1)
  33. ReDim fullfilename(n - 1)
  34. For i = 0 To n - 1
  35.     fullfilename(i) = Range("E" & 2 + i)
  36.     filename(i) = Range("D" & 2 + i)
  37.     If Range("D" & 2 + i) = "" Then GoTo 200
  38.     newfullfilename(i) = ActiveWorkbook.Path & "" & filename(i) & "." & Right(fullfilename(i), Len(fullfilename(i)) - InStrRev(fullfilename(i), "."))
  39.     Name fullfilename(i) As newfullfilename(i)
  40. 200
  41. Next
  42. 'Range("F2").Resize(n) = Application.Transpose(newfullfilename)
  43. End Sub
复制代码

查找文件创建日期的VB代码为:

  1. Option Explicit

  2. Sub 提取文件信息()
  3.   Dim arr(1 To 10000) As String
  4.   Dim f, i, k, f2, f3, x
  5.   Dim arr1(1 To 100000, 1 To 6) As String, q As Integer
  6.   Dim fso As Object, myfile As Object
  7.   arr(1) = ThisWorkbook.Path & ""
  8.   i = 1: k = 1
  9.   Do While i < UBound(arr)
  10.     If arr(i) = "" Then Exit Do
  11.     f = Dir(arr(i), vbDirectory)
  12.     Do
  13.       If InStr(f, ".") = 0 And f <> "" Then
  14.         k = k + 1
  15.         arr(k) = arr(i) & f & ""
  16.       End If
  17.       f = Dir
  18.     Loop Until f = ""
  19.     i = i + 1
  20.   Loop
  21.   '*******下面是提取各个文件夹的文件***
  22.   Set fso = CreateObject("Scripting.FileSystemObject")
  23.   For x = 1 To UBound(arr)
  24.       If arr(x) = "" Then Exit For
  25.        f3 = Dir(arr(x) & "*.*")
  26.      Do While f3 <> ""
  27.        q = q + 1
  28.        arr1(q, 6) = arr(x) & f3
  29.        Set myfile = fso.GetFile(arr1(q, 6))
  30.        arr1(q, 1) = f3
  31.        arr1(q, 2) = myfile.Size
  32.        arr1(q, 3) = myfile.DateCreated
  33.        arr1(q, 4) = myfile.DateLastModified
  34.        arr1(q, 5) = myfile.DateLastAccessed
  35.        f3 = Dir
  36.      Loop
  37.   Next x
  38.   Range("a2").Resize(1000, 6) = ""
  39.   Range("a2").Resize(q, 6) = arr1
  40. End Sub
复制代码


最佳答案
2012-5-28 10:39
本帖最后由 zjdh 于 2012-5-28 10:47 编辑

批量修改文件名3.rar (18.81 KB, 下载次数: 113)
发表于 2012-5-28 00:00 | 显示全部楼层
回复

使用道具 举报

发表于 2012-5-28 10:39 | 显示全部楼层    本楼为最佳答案   
本帖最后由 zjdh 于 2012-5-28 10:47 编辑

批量修改文件名3.rar (18.81 KB, 下载次数: 113)
回复

使用道具 举报

发表于 2013-5-21 21:08 | 显示全部楼层
zjdh 发表于 2012-5-28 10:39

非常感谢您的代码,正需要批量重命名文件名。
有2点小建议不知道能否实现:
1、现在重命名结束以后,会出一个提示框,能否改成:重命名结束后,直接用资源管理器打开文件所在路径。
2、如果文件格式都一样,新文件名之中有重复的名字,那么只有一个文件会被重命名,能否在重命名之前进行判断,如果发现有新文件名有一种或多种相同的,给出提示信息,询问是否强行改名,如果是,改名后用资源管理器打开,如果否,则不进行改名。

再次感谢您的帮助!!

回复

使用道具 举报

发表于 2013-5-30 10:38 | 显示全部楼层
问题1可以解决。
问题2 系统不允许相同名称文件强制存在,所以只给一个提示。
批量修改文件名4.rar (17.03 KB, 下载次数: 57)
回复

使用道具 举报

发表于 2013-5-30 23:59 | 显示全部楼层
zjdh 发表于 2013-5-30 10:38
问题1可以解决。
问题2 系统不允许相同名称文件强制存在,所以只给一个提示。

对于问题2,用新VBA又做了一些测试,又有了一些想法:

  • 如果新文件名和原文件名相同,则不进行改名,计数器A+1。
  • 如果新文件名和原文件名不同,则进行改名,计数器B+1。
  • 最后给出提示信息,”A个文件未改名,B个文件改名成功“。
  • 如果新文件名存在相同的情况,比较原文件名的格式是否相同,如果相同,提示“无法改名,请确保新文件名不同”;如果格式不同,则进行改名。
  • 在原文件名格式相同的情况下,新文件名相同可能出现几组相同的情况,比如说2个AA,两个BB,只要检测出有一组相同,即无法满足条件。


对于批量修改文件名的工具来说,如果遇到新文件名都是自定义且无规律的情况,此VBA会相当有用。上述思考仅是在改名过程中进行一个检查及提示,如果方便,希望能更新代码。

非常感谢!

回复

使用道具 举报

发表于 2014-9-27 15:40 | 显示全部楼层
zjdh 发表于 2012-5-28 10:39

非常感谢,帮我大忙了,呵呵
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-27 01:46 , Processed in 0.275552 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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