2014-11-21 49 views
0

我正在使用以下宏将xls文件转换为xlsx。它的问题是表示SaveAs的行。这将创建第二个文件,其中一个使用原始xls扩展名,另一个使用xlsx扩展名。如果我只是说保存,我会得到一个错误。我如何删除xls文件或让宏执行Save而不是SaveAs?我们需要转换文件的原因是,当我们通过电子邮件发送文件时,它的体积更小。将xls转换为xlsx并删除旧文件

Dim s As String 
s = ActiveWorkbook.FullName 
s = Replace(s, "xls", "xlsx") 
ActiveWorkbook.SaveAs Filename:=s, _ 
     FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False 
+0

这里有两个单独的操作 - 创建一个新文件(以xlsx格式)并删除一个旧文件。真的没有办法解决这个问题。听起来你有第一个任务。这里有一些与第二个相关的答案:http://stackoverflow.com/questions/67835/deleting-a-file-in-vba – Adam 2014-11-21 21:13:28

回答

1

在保存当前的文件方面,你有2个选择:覆盖当前文件(与同类型),或生成新文件。这是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 

请注意,您将需要一个参考,以创建和使用为FileSystemObject设置为Microsoft Scripting Runtime