ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 关于使用VBA批量修改文件夹下子文件下excel文件名

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-8-16 11:54 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Sub RenameExcelFilesInSubfolders()
    Dim targetPath As String
    Dim oldName1 As String
    Dim newName1 As String
    Dim oldName2 As String
    Dim newName2 As String
    Dim folder As Object
    Dim subFile As Object
    Dim fso As Object
    Dim subFolder As Object

    ' 设置目标文件夹路径
    targetPath = "D:\文件\回收率1" ' 请修改成实际路径
    oldName1 = ThisWorkbook.Sheets("回收明细").Range("H2").Value ' 从 H2 获取要查找的文件名
    newName1 = ThisWorkbook.Sheets("回收明细").Range("I2").Value ' 从 I2 获取新的文件名
    oldName2 = ThisWorkbook.Sheets("回收明细").Range("H3").Value ' 从 H3 获取要查找的文件名
    newName2 = ThisWorkbook.Sheets("回收明细").Range("I3").Value ' 从 I3 获取新的文件名

    Set fso = CreateObject("Scripting.FileSystemObject")

    ' 遍历目标文件夹下的所有子文件夹
    For Each subFolder In fso.GetFolder(targetPath).SubFolders
        ' 遍历子文件夹中的所有文件
        For Each subFile In subFolder.Files
            ' 检查文件扩展名是否为Excel文件(.xls, .xlsx, .xlsm等)
                ' 判断文件名是否匹配
                If subFile.Name = oldName1 Then
                    subFile.Name = newName1
                ElseIf subFile.Name = oldName2 Then
                    subFile.Name = newName2
                End If
        Next subFile
    Next subFolder
    MsgBox "操作完成!", vbInformation
End Sub


写是这么写的,最终运行结果只有H3变成了I3,H2重命名为I2失败了。


1.png
2.png

TA的精华主题

TA的得分主题

发表于 2024-8-16 12:25 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
应该是扩展名有大小写的,建议全转化为小写后比较。

TA的精华主题

TA的得分主题

发表于 2024-8-16 13:16 | 显示全部楼层
使用name as修改文件名是否可行的

TA的精华主题

TA的得分主题

发表于 2024-8-16 14:04 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-8-16 14:04 | 显示全部楼层
  1.         
  2. Sub 批量修改文件夹内Word文档名称()
  3.    
  4.     Dim folderPath As String
  5.     Dim file As String
  6.     Dim name As String
  7.     Dim dialog As FileDialog
  8.     Dim n, i
  9.    
  10.     Set dialog = Application.FileDialog(msoFileDialogFolderPicker)
  11.    
  12.     ' 打开文件夹选择对话框
  13.     With dialog
  14.         .Title = "选择文件夹"
  15.         .AllowMultiSelect = False
  16.         If .Show <> -1 Then
  17.             MsgBox "未选择文件夹!"
  18.             Exit Sub
  19.         Else
  20.             folderPath = .SelectedItems(1)
  21.         End If
  22.     End With
  23.    
  24.     i = 0
  25.     ' 遍历文件夹中的所有文件
  26.     file = Dir(folderPath & "\*.*")
  27.     Do While file <> ""
  28.         ' 如果是Word文件,则进行重命名
  29.         If InStr(1, LCase(file), ".doc") > 0 Or InStr(1, LCase(file), ".docx") > 0 Then

  30.             name = file
  31.             name = Replace(name, "模板", "模板二号")
  32.             Name folderPath & "" & file As folderPath & "" & name
  33.             i = i + 1
  34.         End If
  35.         file = Dir
  36.     Loop
  37.    
  38.     MsgBox i & "个文件重命名完成!"
  39. End Sub
复制代码


TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-16 21:37 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
ynzsvt 发表于 2024-8-16 12:25
应该是扩展名有大小写的,建议全转化为小写后比较。

看过了,拓展名全都是小写的。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-16 21:40 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-8-17 05:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
zx6091024 发表于 2024-8-16 21:37
看过了,拓展名全都是小写的。

那就要打包这两个文件了。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 13:36 , Processed in 0.035527 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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