【问题标题】:Save Workbook in current directory with title from cell将工作簿保存在当前目录中,标题来自单元格
【发布时间】:2013-01-16 18:00:58
【问题描述】:

我下载了需要根据单元格 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

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

【问题讨论】:

  • 错误信息是什么?改用Debug.Print relativePath 看看名字是否正确...
  • 能否分享一下错误画面/文字?

标签: excel vba


【解决方案1】:

错误未指定,但万一你看到:

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

还有一个问题 - 无论您编码的扩展名如何,都会将本书保存为您使用的 Excel 版本的 默认 格式(对于 2007 年和未来的版本,我有 XLSX 或 xlOpenXMLWorkbook 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
    

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

【讨论】:

  • msdn.microsoft.com/en-us/library/office/… - 详细了解允许的保存格式。
  • 非常感谢彼得!我使用的是一个非常旧的 Excel 版本 (2002),所以也许由于这个原因,我在调试器中收到了这个错误:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-03
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 2016-04-15
  • 1970-01-01
相关资源
最近更新 更多