当前位置:   article > 正文

VBA学习(14):给1000个文件重命名_vba多文件文件夹分别命名

vba多文件文件夹分别命名

如下图所示,一个文件夹内包含了大量文件,现在需要在每个文件前面增加前缀"星光牌-"


为了使代码更具有通用性,更方便大家使用,我们还是采用两步走的方式。

首先,使用以下代码,将该文件夹内的文件名批量提取到当前活动工作表的A列。

  1. Sub GetlWbNames()
  2. Dim strPath As String, strName As String
  3. Dim k As Long
  4. strPath = getStrPath() '获取用户选中文件夹的路径
  5. If strPath = "" Then Exit Sub '如果用户为选择文件夹,则退出程序
  6. Application.ScreenUpdating = False
  7. With ActiveSheet.Columns(1)
  8. .Clear '清空A列
  9. .NumberFormat = "@" '设置文本格式
  10. End With
  11. k = 1
  12. Cells(k, 1) = "目录"
  13. strName = Dir(strPath & "*.*")
  14. Do While strName <> ""
  15. k = k + 1 '计数器
  16. Cells(k, 1) = strName
  17. strName = Dir() '第2次调用dir函数但未带参数
  18. Loop
  19. Application.ScreenUpdating = True
  20. MsgBox "OK"
  21. End Sub
  22. Function getStrPath() As String
  23. Dim strPath As String
  24. With Application.FileDialog(msoFileDialogFolderPicker)
  25. If .Show Then
  26. strPath = .SelectedItems(1)
  27. Else '如用户未选中文件夹则退出
  28. Exit Function
  29. End If
  30. End With
  31. If Right(strPath, 1) <> "\" Then strPath = strPath & "\"
  32. getStrPath = strPath
  33. End Function

然后,在B列使用函数公式或其它方式,填写A列文件名对应的新名字。本例中B2单元格输入以下公式,并向下复制填充

="星光牌-"&A2

公式运算结果如下图所示:

最后,复制运行以下代码即可将A列旧的文件名修改为新的文件名。

  1. Sub ChangeNames()
  2. Dim rngData As Range, aData, aRes
  3. Dim i As Long, n As Long, strPath As String
  4. Dim strOldName As String, strNewName As String
  5. Dim strMsg As String
  6. On Error Resume Next '忽略错误使程序继续运行
  7. strPath = getStrPath() '获取文件夹路径
  8. If strPath = "" Then Exit Sub
  9. Set rngData = Range("a1:b" & Cells(Rows.Count, 1).End(xlUp).Row)
  10. aData = rngData '数据存入数组
  11. ReDim aRes(1 To UBound(aData), 1 To 1) '结果数组
  12. Application.ScreenUpdating = False
  13. Application.DisplayAlerts = False
  14. For i = 2 To UBound(aData) '扣掉标题行遍历数组
  15. If aData(i, 2) <> "" Then
  16. Err.Clear
  17. strOldName = strPath & aData(i, 1) '旧路径名
  18. strNewName = strPath & aData(i, 2) '新路径名
  19. Name strOldName As strNewName '重命名
  20. If Err.Number Then
  21. aRes(i, 1) = "失败"
  22. n = n + 1
  23. Else
  24. aRes(i, 1) = "成功"
  25. End If
  26. End If
  27. Next
  28. Columns(3).ClearContents
  29. aRes(1, 1) = "处理结果"
  30. Range("c1").Resize(UBound(aRes, 1)) = aRes '处理结果写回Excel
  31. Application.ScreenUpdating = True
  32. Application.DisplayAlerts = True
  33. strMsg = "处理完成。"
  34. If n Then strMsg = strMsg & vbCrLf & _
  35. "有" & n & "个文件重命名失败," & _
  36. "需核对新文件名是否有重复。"
  37. MsgBox strMsg
  38. End Sub
  39. Function getStrPath() As String
  40. Dim strPath As String
  41. With Application.FileDialog(msoFileDialogFolderPicker)
  42. If .Show Then
  43. strPath = .SelectedItems(1)
  44. Else '如用户为选中文件夹则退出
  45. Exit Function
  46. End If
  47. End With
  48. If Right(strPath, 1) <> "\" Then strPath = strPath & "\"
  49. getStrPath = strPath
  50. End Function

第7至第8行代码调用getStrPath函数过程,打开【文件浏览】对话框,允许用户选择的目标文件夹,并获取相关文件的路径。

第9至第10行代码将A:B列的数据源数据存入数组aData。

第11行代码声明一个结果数组aRes,用于存放处理结果信息。

第14至第27行代码遍历数据源数组,把第1列的旧文件名重命名为第2列的新文件名。第20至第25行代码,采用试错法,将处理结果信息写入结果数组。

第28至第30行代码将结果数组写回当前工作表的C列。

第33至第37行代码使用MsgBox语句弹出消息框显示处理结果。

第40至第51行代码是getStrPath函数过程。

技术交流,软件开发,欢迎加微信xwlink1996 


作者其他作品:

VBA实战(Excel)(1):提升运行速度

Ribbon第一节:控件大全

HTML实战(1):新建一个HTML

VB.net实战(VSTO):Excel插件的安装与卸载

 

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

闽ICP备14008679号