将xls转换为xlsx并删除旧文件

时间:2014-11-21 21:00:13

标签: excel vba excel-vba

我使用以下宏将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

1 个答案:

答案 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。