0

我下载了需要根据单元格 A1 中包含的名称重命名的文件。该文件已经保存在当前目录中,所以我只需要保存到当前目录,文件名在调用 A1 中,扩展名为“.xls”

试过这段代码:

Sub SaveToRelativePath()
    Dim relativePath As String, sname As String
    sname = ActiveWorkbook.Worksheets(1).Range("A1") & ".xls"
    relativePath = Application.ActiveWorkbook.Path & "\" & sname
    ActiveWorkbook.SaveAs Filename:=relativePath
End Sub

但是调试器在最后一行报错:ActiveWorkbook.SaveAs Filename:=relativePath

关于如何做到这一点的任何线索?

4

1 回答 1

0

未指定错误,但如果您看到:

无宏 WB 保存警告

这意味着您尝试将带有上述代码的工作簿保存为“XLS”(实际上,不完全是,见下文) - 这意味着无格式。Excel 警告您将丢失代码。

还有一个问题 - 无论您编码的扩展名是什么,都会将该书保存为您使用的 Excel 版本的默认格式(即 XLSX 或xlOpenXMLWorkbook2007 以及未来版本,我有 2007)。结果,您将打开保存的文件,如下所示:

格式不正确

解决方案:

  1. 为避免第一次警告 - 在运行宏之前将初始工作簿(即保存 VBA 代码的工作簿)保存为启用宏。
  2. 为 Save 方法添加正确的格式描述 - 在您的情况下,FileFormat:=xlExcel8您将获得真正的 XLS。
  3. 还有一件事 - 为避免在将文件另存为 XLS 时出现兼容性警报,请在保存.CheckCompatibility = False前添加。结果代码应该是这样的:

    Sub SaveToRelativePath()
        Dim relativePath As String, sname As String
        sname = ActiveWorkbook.Worksheets(1).Range("A1") & ".xls"
        relativePath = Application.ActiveWorkbook.Path & "\" & sname
        Application.DisplayAlerts = False
        ActiveWorkbook.CheckCompatibility = False
        ActiveWorkbook.SaveAs Filename:=relativePath, FileFormat:=xlExcel8
        Application.DisplayAlerts = True
    End Sub
    

但是要小心——这样的结构会默默地覆盖任何现有的文件。希望这对您有所帮助。

于 2013-02-01T12:43:37.633 回答