使用VBA对excel、word等文件改名需要用到Name,比如以下代码是基础用法:
Sub 重命名文件() Name "D:\VBA\新建 XLSX 工作表.xlsx" As "D:\VBA\重命名EXCEL文件.xlsx" End Sub
要注意的是,使用Name重新命名文件时,重命名的文件必须处于未打开状态,否则代码会报错:
前面的基础用法虽然简单,但是需要人工写文件路径,容易写错名称和后缀导致改名失败,想要优化可以加入文件对话框通过选取文件来获取文件路径,并直接对基名称替换来重命名。代码如下:
Sub 文件对话框选择指定文件重命名1() new_name = "重命名文件" '定义文件的重命名(无需后缀) Set FolderDialogObject = Application.FileDialog(msoFileDialogOpen) '新建一个文件对话框对象,允许用户选择一个文件 With FolderDialogObject '配置对话框 .Title = "请选择要重命名的文件" .InitialFileName = "C:\" End With FolderDialogObject.Show '显示对话框 Set paths = FolderDialogObject.SelectedItems '获取选择对话框选择的文件 file_fullname = paths(1) '返回文件路径+名称 file_basename = CreateObject("scripting.filesystemobject").getbasename(file_fullname) '返回基名称 new_file_fullname = Replace(file_fullname, file_basename, new_name) '将原文件名替换为重命名 Name file_fullname As new_file_fullname End Sub
以上代码优化了文件路径的填写,基础的操作不成问题,但是存在缺点,如果文件路径名称中存在与原文件名一致的字符时,以上代码就会报错,比如路径“D:\VBA待改名文件\待改名文件.xlsx”,以上代码的new_file_fullname会将路径改为“D:\VBA重命名文件\重命名文件.xlsx”,导致无法找到“VBA重命名文件”文件夹而报错。
想要完善代码的以上缺点,那就需要加入代码精准获取重命名的文件名在路径中的位置,只对其进行改名:
Sub 文件对话框选择指定文件重命名2() new_name = "重命名文件" '定义文件的重命名(无需后缀) Set FolderDialogObject = Application.FileDialog(msoFileDialogOpen) '新建一个文件对话框对象,允许用户选择一个文件 With FolderDialogObject '配置对话框 .Title = "请选择要重命名的文件" .InitialFileName = "C:\" End With FolderDialogObject.Show '显示对话框 Set paths = FolderDialogObject.SelectedItems '获取选择对话框选择的文件 file_fullname = paths(1) '返回文件路径+名称 file_basename = CreateObject("scripting.filesystemobject").getbasename(file_fullname) '返回基名称 Split_file_fullname = Split(file_fullname, "\" & file_basename & ".") '将文件路径+名称按“\基名称.”拆分 Serial_Number = UBound(Split_file_fullname) '根据拆分数组的最大下标,识别最后一个“\基名称.”在文件路径+名称第几位(序号) new_file_fullname = Application.Substitute(file_fullname, "\" & file_basename & ".", "\" & new_name & ".", Serial_Number) '将原文件名替换为重命名 Name file_fullname As new_file_fullname End Sub
代码优化的内容就是利用基名称在路径中前面有“\”后面有“.”且一定在路径最后的特性,用数组拆分路径获取其出现位置,再用Substitute代替了Replace对原文件名进行精准替换。
以上内容对您有帮助可以分享或转藏,避免以后找不到。想要了解更多VBA相关知识,欢迎到http://moqingyan.360doc.com我的个人图书馆查看。
联系客服