当前位置:   article > 正文

Excel VBA:批量对文件任意重命名(移动)_vba对文件夹内所有文件更改名称

vba对文件夹内所有文件更改名称

目录

一、普通VBA代码的问题

二、创建任意文件夹的思路

1.创建FSO对象【文件系统对象】

2.判断盘符是否存在

3.循环逐层判断文件夹

(1)不存在的文件夹路径存入数组

(2)倒着循环arr

(3)创建文件夹

(4)完成

三、创建任意多层文件夹示例代码

四、批量对文件任意重命名

1.整理新旧文件名

2.执行

3.示例代码

五、文件


一、普通VBA代码的问题

如果用Dir()方法和MkDir方法,一般只能在已经存在的文件夹内创建一层新的子文件夹。无法命名任意多层文件夹。

也就是说,如现在如果已经存在文件夹【E:\ABC】,才能创建【E:\ABC\DEF】;否则是不能直接创建后面的新文件夹的。

二、创建任意文件夹的思路

1.创建FSO对象【文件系统对象】

用FSO对象主要是因为它处理文件与文件夹更专业,里面有各种函数和方法,不需要自己通过Mkdir/Dir/Split等函数和方法慢慢构造路径;同时避免很多出错的可能。

2.判断盘符是否存在

比如给定需要创建的文件夹是

路径 = "E:\A\b/C\d/ef\g/h\i\j\k/m/n"

利用【FSO.DriveExists()】函数判断给定的路径对应的盘符【E:\】是否存在,如果盘符不存在,是不可能创建出给定文件夹的,此时直接即出程序;否则,继续向下执行程序。

3.循环逐层判断文件夹

关于如果创建多层文件夹,之前有写过一篇文章:

【VBA:用MkDir函数创建多层文件夹】http://t.csdn.cn/2YFUo当时用的VBA自带的Dir()和Mkdir函数,可以参考一下。

而本文用的是另一种方法——FSO对象,更加方便和保险,减少出错。

(1)不存在的文件夹路径存入数组

利用【FSO.FolderExists()】函数,从给定的完整路径开始,逐级向上判断第级文件夹路径是否存在。

判断流程:

第1次,判断【E:\A\b/C\d/ef\g/h\i\j\k/m/n】是否存在
第2次,判断【E:\A\b/C\d/ef\g/h\i\j\k/m】是否存在
第3次,判断【E:\A\b/C\d/ef\g/h\i\j\k】是否存在
……
第n次,判断【E:\A】是否存在

A.如果不存在,则装入一个动态数组arr中;

B.如果该级文件夹路径存在,则往上肯定都存在了,就不再向上一级父文件夹进行判断。

(2)倒着循环arr

即从上面记录文件夹路径的数组arr的最大下标开始循环,直到最小下标结束,步长-1。

因为我们创建文件夹,是要按下面箭头所示的顺序由下向上逐级来操作的:

创建文件夹的秦顺序

(3)创建文件夹

用【FSO.CreateFolder】方法逐级创建文件夹

(4)完成

循环arr完成,多层文件夹创建完成

三、创建任意多层文件夹示例代码

  1. Sub 创建任意文件目录主程序()
  2. Dim 路径 As String
  3. 路径 = "E:\A\b/C\d/ef\g/h\i\j\k/m/n" '只要此处所写的路径的盘符【E:\】在电脑存在,就能创建成功
  4. Call fsoCreatAnyFolder(路径)
  5. End Sub
  6. Sub fsoCreatAnyFolder(路径)
  7. Dim FSO As Object
  8. Dim p As String
  9. Dim s As String
  10. Dim arr() As String
  11. Dim i As Integer
  12. Set FSO = CreateObject("Scripting.FileSystemObject")
  13. p = Replace(folderToCreate, "/", "\")
  14. If Not FSO.DriveExists(Left(p, 3)) Then
  15. Debug.Print "错误:盘符不存在!"
  16. Set FSO = Nothing
  17. Exit Sub
  18. End If
  19. s = p
  20. Do While Not FSO.FolderExists(s)
  21. i = i + 1
  22. ReDim Preserve arr(1 To i)
  23. arr(i) = s
  24. s = FSO.GetParentFolderName(s)
  25. Loop
  26. For i = UBound(arr) To LBound(arr) Step -1
  27. FSO.CreateFolder (arr(i))
  28. Debug.Print arr(i)
  29. Next
  30. Set FSO = Nothing
  31. End Sub

四、批量对文件任意重命名

在上述创建多层文件夹的方法的基础上,咱们可以对已经存在的文件任意移动或重命名

操作方法:

1.整理新旧文件名

在Excel的【Sheet1】表格和A列写原文件完整路径B列写新文件名的完整路径

注:第一行是标题不会算在内

2.执行

点击【Sheet1】表格里的【执 行】按钮,即可完成。

运行方法

或者打开文件,在代码主程序处点击运行也一样。

3.示例代码

  1. Sub 重命名(原文件名 As String, 新文件名 As String)
  2. Dim FSO As Object
  3. Dim 原文件夹 As String
  4. Dim 新文件夹 As String
  5. Set FSO = CreateObject("Scripting.FileSystemObject")
  6. If Not FSO.FileExists(原文件名) Then Exit Sub
  7. If FSO.DriveExists(Left(新文件名, 3)) Then
  8. 新文件夹 = Replace(新文件名, FSO.GetFileName(新文件名), "")
  9. If Not FSO.FolderExists(新文件夹) Then
  10. fsoCreatAnyFolder 新文件夹
  11. End If
  12. Name 原文件名 As 新文件名
  13. End If
  14. Set FSO = Nothing
  15. End Sub
  16. Sub fsoCreatAnyFolder(folderToCreate As String)
  17. Dim FSO As Object
  18. Dim p As String
  19. Dim s As String
  20. Dim arr() As String
  21. Dim i As Integer
  22. Set FSO = CreateObject("Scripting.FileSystemObject")
  23. p = Replace(folderToCreate, "/", "\")
  24. If Not FSO.DriveExists(Left(p, 3)) Then
  25. Debug.Print "错误:盘符不存在!"
  26. Set FSO = Nothing
  27. Exit Sub
  28. End If
  29. s = p
  30. Do While Not FSO.FolderExists(s)
  31. i = i + 1
  32. ReDim Preserve arr(1 To i)
  33. arr(i) = s
  34. s = FSO.GetParentFolderName(s)
  35. Loop
  36. For i = UBound(arr) To LBound(arr) Step -1
  37. FSO.CreateFolder (arr(i))
  38. Debug.Print arr(i)
  39. Next
  40. Set FSO = Nothing
  41. End Sub
  42. Rem 注意:
  43. '1. 此处以下是主程序,光标定位在主程序任何位置,点击运行即可
  44. '2. 新旧文件路径分别放在表格名为【Sheet1】的表格的【A列】和【B列】
  45. '3. 表格第一行为标题行,不算数据
  46. '4. 都必须为绝对路径,不可省略
  47. Sub 批量重命名主程序()
  48. Dim arr
  49. Dim i As Long
  50. arr = Sheets("Sheet1").Cells(1, 1).CurrentRegion.Value
  51. For i = LBound(arr, 1) + 1 To UBound(arr)
  52. Call 重命名(CStr(arr(i, 1)), CStr(arr(i, 2)))
  53. Debug.Print arr(i, 1), " 已经命名为 ", arr(i, 2)
  54. Next
  55. MsgBox Format(UBound(arr) - LBound(arr), "完成 共处理了0个文件")
  56. End Sub

五、文件

链接: https://pan.baidu.com/s/1zKAlHsCTd8fU33cxMVgtGw?pwd=uhsi 提取码: uhsi 复制这段内容后打开百度网盘手机App,操作更方便哦

打开文件直接操作即可。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/842448
推荐阅读
相关标签
  

闽ICP备14008679号