【问题标题】:Converting xls to xlsx and deleting the old file将 xls 转换为 xlsx 并删除旧文件
【发布时间】: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 格式)和删除一个旧文件。真的没有办法解决这个问题。听起来你已经完成了第一个任务。这是与第二个相关的一些答案:stackoverflow.com/questions/67835/deleting-a-file-in-vba

标签: vba excel


【解决方案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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    • 2016-07-11
    • 1970-01-01
    • 1970-01-01
    • 2021-01-27
    • 2012-09-06
    • 2013-05-27
    相关资源
    最近更新 更多