使用单元格中的标题将工作簿保存在当前目录中

时间:2013-02-01 12:12:47

标签: excel vba

我根据单元格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

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

1 个答案:

答案 0 :(得分:0)

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

macro-free WB save warning

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

还有一个问题 - 无论您使用何种扩展程序,您的代码都会将该图书保存为您使用的Excel版本的默认格式(对于2007版和未来版本,可能是XLSX或xlOpenXMLWorkbook,我有2007)。因此,您将打开保存的文件,打开类似的内容:

Incorrect format

解决方案:

  1. 要避免第一次警告 - 请在运行宏之前将初始工作簿(即保留VBA代码的工作簿)保存为启用宏
  2. 为Save方法添加正确的格式说明 - 在您的情况下为FileFormat:=xlExcel8 - 因此您将获得真正的XLS。
  3. 还有一件事 - 在将文件保存为XLS时要避免aby兼容性警报,请在保存之前添加.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
    
  4. 但要小心 - 这样的构造会无声地覆盖任何现有文件。希望有点帮助。