我使用以下宏将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
答案 0 :(得分: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。