将 xls 转换为 xlsx 并删除旧文件
Posted
技术标签:
【中文标题】将 xls 转换为 xlsx 并删除旧文件【英文标题】:Converting xls to xlsx and deleting the old file 【发布时间】:2015-01-20 02:58:39 【问题描述】:我正在使用以下宏将 xls 文件转换为 xlsx。它的问题在于SaveAs
的行。这将创建第二个文件,一个带有原始 xls 扩展名,第二个带有 xlsx 扩展名。如果我只是说“保存”,我会收到错误消息。如何删除 xls 文件或让宏执行 Save 而不是 SaveAs?我们需要转换文件的原因是,当我们通过电子邮件发送文件时,它的大小会更小。
Dim s As String
s = ActiveWorkbook.FullName
s = Replace(s, "xls", "xlsx")
ActiveWorkbook.SaveAs Filename:=s, _
FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
【问题讨论】:
这里有两个独立的操作——创建一个新文件(xlsx 格式)和删除一个旧文件。真的没有办法解决这个问题。听起来你已经完成了第一个任务。这是与第二个相关的一些答案:***.com/questions/67835/deleting-a-file-in-vba 【参考方案1】:在保存当前文件方面,您有两种选择:覆盖当前文件(使用相同类型),或生成新文件。这是 Excel 的限制(功能?),而不是 VBA。
因此,为了实现您想要的,我们需要做更多的工作。我们需要的是FileSystemObject。这基本上允许您通过 VBA 与计算机上的文件和目录进行交互。我们需要做的第一件事是保留原始文件名;这将允许我们按名称删除它。从那里,我们将创建FileSystemObject
,并使用它来调用DeleteFile
方法。所以,你的代码应该是这样的
Dim old_name As String, new_name As String
old_name = ActiveWorkbook.FullName
new_name = Replace(old_name, "xls", "xlsx")
ActiveWorkbook.SaveAs Filename:=new_name, _
FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
Dim FSO as FileSystemObject
Set FSO = New FileSystemObject
FSO.DeleteFile old_name
Set FSO = Nothing
请注意,您需要设置对 Microsoft Scripting Runtime
的引用才能创建和使用 FileSystemObject。
【讨论】:
以上是关于将 xls 转换为 xlsx 并删除旧文件的主要内容,如果未能解决你的问题,请参考以下文章
如何批处理将多个文件夹下的excel文件(xls,xlsx,csv等)合并成一个文件?
从python中的xls或xlsx文件读取后将数据转换为字符串
使用 python 将 tsv 文件转换为 xls/xlsx