如何修改Excel 2007的代码以使用SaveAs

时间:2011-05-24 14:23:32

标签: excel vba

我有一个excel模板,它使用宏来保存文件,以便用户保持标准化的文件名格式。我使用Excel 2003创建了代码。代码如下:

Sub SaveBook()
   Dim sFile As String
   sFile = "ConsolidatedDemand" & "_" & Format(Now(), "yyyy.mm.dd") & ".xls"
   ActiveWorkbook.SaveAs Filename:= "\\file location\" & sFile
End Sub

我有一个用户使用Excel 2007.当他们尝试运行宏时,他们收到错误: “以下功能无法保存在无宏工作簿中:VB项目。 要保存具有这些功能的文件,请单击“否”,然后在文件类型列表中选择启用宏的文件类型。要继续保存为无宏工作簿,请单击“是”

我尝试在第二行代码中将文件扩展名转换为“.xlsm”,但是产生了相同的错误消息。关于如何修改此代码以使其适用于Excel 2007用户的任何其他想法?

2 个答案:

答案 0 :(得分:5)

(取自:http://blogs.office.com/b/microsoft-excel/archive/2009/07/07/use-the-vba-saveas-method-in-excel-2007.aspx

在Excel 2007中,SaveAs方法要求您提供FileFormat参数和正确的文件扩展名。

例如,在Excel 2007中,如果ActiveWorkbook不是.xlsm文件,则此行代码将失败:

ActiveWorkbook.SaveAs "C:\ron.xlsm"

但是这段代码将始终有效:

ActiveWorkbook.SaveAs "C:\ron.xlsm", fileformat:=52 

这些是Excel 2007中的主要文件格式:

  • 51 = xlOpenXMLWorkbook(2007年没有宏,.xlsx)
  • 52 = xlOpenXMLWorkbookMacroEnabled(2007年有或没有宏, .xlsm)
  • 50 = xlExcel12(2007年的Excel二进制工作簿,有或没有 macro's,.xlsb)
  • 56 = xlExcel8(Excel 2007中的97-2003格式,.xls)

答案 1 :(得分:2)

只是因为您不知道,您可以检查应用程序在宏中的版本,这样您就可以确定它是否应该保存为“xls”或“xlsm”

If Application.Version = "13.0" Then
    MsgBox "You are using Excel 2010."
ElseIf Application.Version = "12.0" Then
    MsgBox "You are using Excel 2007."
ElseIf Application.Version = "11.0" Then
    MsgBox "You are using Excel 2003."
ElseIf Application.Version = "10.0" Then
    MsgBox "You are using Excel 2002."
ElseIf Application.Version = "9.0" Then
    MsgBox "You are using Excel 2000."
ElseIf Application.Version = "8.0" Then
    MsgBox "You are using Excel 97."
ElseIf Application.Version = "7.0" Then
    MsgBox "You are using Excel 95."
Else
    MsgBox "You are using an unknown version of Excel: " & Application.Version
End If

希望这有帮助。