杏彩体育开户

关于杏彩体育开户
Excel VBA【案例】Excel文件改名:根据Excel工作表单元格内容批量更改文件名
发布日期:2024-07-22 01:12    点击次数:194

内容提要

Excel文件批量另存Excel文件批量重命名大家好,我是冷水泡茶,今天分享一个小案例,来自一个求助贴:

[求助] 如何用VBA实现批量重新命名文件(求助,万分感谢)?

他的数据表是这样的:

图片

他的具体要求是:

图片

看他这个需求,费了好大劲。我在分析他提供的一个样表后,感觉就是根据工作表指定单元格的信息组成新的文件名,他的目标是这样:

图片

关于文件批量改名,前期分享过一个例子【文件批量改名】,是把旧文件列表读到Excel表里,在新的一列填上对应的新文件名,然后执行改名。显然不能满足今天这个需求。我们得另想办法,一起来看一下吧:基本思路:1、循环文件夹下所有Excel文件。2、逐个打开文件。3、读取工作表中指定单元格的内容,按照要求组合成新文件名字符串。4、把旧文件另存为新文件,保留旧文件;或者直接把文件名改掉。VBA代码:一、另存,saveCopy过程
Sub saveCopy()    Dim fso As Object    Dim newName As String    Dim oldFolder As String    Dim newFolder As String    Dim follder As Object    Dim file As Object    Dim fileExtn As String    Dim wb As Workbook, ws As Worksheet    Application.ScreenUpdating = False    Application.DisplayAlerts = False    oldFolder = ThisWorkbook.Path & "\oldfile"    newFolder = ThisWorkbook.Path & "\newfile\"    Set fso = CreateObject("Scripting.FileSystemObject")    Set folder = fso.getfolder(oldFolder)    For Each file In folder.Files        fileExtn = Mid(file.Name, InStrRev(file.Name, "."))        If fileExtn Like ".xl*" Then            Set wb = Workbooks.Open(file.Path)            Set ws = ActiveSheet            With ws                newName = .Cells(5, "H") _                    & "-" & .Cells(5, "O") _                    & "-" & .Cells(1, "M") _                    & "-" & .Cells(12, "H") _                    & fileExtn            End With            wb.SaveAs newFolder & newName            wb.Close        End If    Next    Application.ScreenUpdating = True    Application.DisplayAlerts = True    MsgBox "Done"End Sub
代码解析:1、Line2~9,定义变量。2、Line12~13,获取原文件目录oldFolder ,新文件目录newFolder 。3、Line14,创建文件系统对象FileSystemObject。4、Line15,设置原文件目录对象。5、Line16~31,循环文件夹下所有文件,打开工作簿文件,读取单元格信息并组成新的文件名,把文件以新的文件名另存,关闭工作簿。二、改名,renameFiles过程
Sub renameFiles()    Dim fso As Object    Dim newName As String    Dim targetFolder As String    Dim follder As Object    Dim file As Object    Dim fileExtn As String    Dim wb As Workbook, ws As Worksheet    Application.ScreenUpdating = False    Application.DisplayAlerts = False    targetFolder = ThisWorkbook.Path & "\reName\"    Set fso = CreateObject("Scripting.FileSystemObject")    Set folder = fso.getfolder(targetFolder)    For Each file In folder.Files        fileExtn = Mid(file.Name, InStrRev(file.Name, "."))        If fileExtn Like ".xl*" Then            Set wb = Workbooks.Open(file.Path)            Set ws = ActiveSheet            With ws                newName = .Cells(5, "H") _                    & "-" & .Cells(5, "O") _                    & "-" & .Cells(1, "M") _                    & "-" & .Cells(12, "H") _                    & fileExtn            End With            wb.Close            Name file.Path As targetFolder & newName        End If    Next    Application.ScreenUpdating = True    Application.DisplayAlerts = True    MsgBox "Done"End Sub
代码解析:1、Line2~8,定义变量。2、Line11,获取目标文件夹路径。3、Line12,创建文件系统对象。4、Line13,设置目标文件夹对象。5、Line14~29,循环文件夹下所有文件,打开Excel工作簿文件,读取单元格信息并组成新的文件名,关闭工作簿,把文件改成新的文件名。后记:这个案例比较简单,重点是循环指定文件夹下所有文件,打开Excel工作簿进行相关操作。为了简便起见,把相关文件夹都设置好了直接指定使用,也可以采用浏览选择打开的方式,这样更为灵活,感兴趣的朋友可以自行修改。关于新的文件名,我们要根据实际情况修改取值代码。在本案例中,默认excel文件只有一张工作表,如果有多张工作表,应该通过一定的条件来判断读取哪个工作表单元格的内容。好,今天就到这,我们下期再会。~~~~~~End~~~~~~ 本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。