运行时错误' 1004':方法' SaveAs'对象' _Workbook'失败

时间:2015-08-21 11:14:52

标签: excel vba excel-vba

用户有一个Excel电子表格,当他们去保存它时,他们按下一个按钮,在宏中运行下面的vba代码。该脚本尝试将Excel电子表格保存到网络位置,以修改今天日期的文件名。间歇性地,脚本将失败并出现"运行时错误' 1004':方法' SaveAs'对象' _Workbook'失败&#34 ;.有谁知道原因是什么?脚本是:

Public Sub Copy_Save_R2()
    Dim wbNew As Workbook
    Dim fDate As Date

    fDate = Worksheets("Update").Range("D3").Value

    Set wbNew = ActiveWorkbook

    With wbNew
        ActiveWorkbook.SaveAs Filename:="Q:\R2 Portfolio Prints\#Archive - R2 Portfolio\" & "R2 Portfolio - CEC A " & Format(fDate, "mm-dd-yyyy")
    End With

    Sheets("Update").Activate
End Sub

4 个答案:

答案 0 :(得分:2)

正如Hugo所说,这可能是映射驱动器的问题。我更喜欢使用完整的UNC路径(\\ Thismachine \ ...),以防工作簿在没有设置映射驱动器的机器上使用。

我认为丢失的扩展名可能是问题所在,但我只是在Excel 2013中对其进行了测试,并自动将.xlsx添加到文件名中。

问题可能是由wbNew引用引起的。这完全没必要,不应与ActiveWorkbook 结合使用。基本上,您应该具有对工作簿的引用,或使用预定义的ActiveWorkbook引用。我还建议使用ThisWorkbook,因为用户可能会在代码运行时点击另一本书。

Public Sub Copy_Save_R2()
    Dim wbNew As Workbook
    Dim fDate As Date

    fDate = Worksheets("Update").Range("D3").Value

    Application.DisplayAlerts = False
    ThisWorkbook.SaveAs Filename:="Q:\R2 Portfolio Prints\#Archive - R2 Portfolio\R2 Portfolio - CEC A " & Format(fDate, "mm-dd-yyyy") & ".xlsx"
    Application.DisplayAlerts = True

    ThisWorkbook.Sheets("Update").Activate
End Sub

编辑:添加Application.DisplayAlerts命令以阻止任何保存弹出窗口,例如使用.xlsx而不是.xlsm,并覆盖现有副本。

编辑2018-08-11:添加了转义反斜杠来修复UNC路径显示。添加了关于With语句的不准确陈述的删除(请参阅下面的评论)。基本上,由于WithEnd With之间没有任何内容以.开头,因此该声明根本没有做任何事情。

答案 1 :(得分:0)

这对我有用。确保不共享您的工作簿。我想"共享"工作簿有局限性。

在这看到: https://www.ozgrid.com/forum/forum/help-forums/excel-general/27843-save-xls-as-txt

在"评论"选项卡单击"共享工作簿"并确保"允许多个用户同时进行更改。这允许工作簿合并"是未选中

答案 2 :(得分:0)

我也在寻找导致此错误的原因,然后记得我正在使用已恢复的电子表格版本。手动保存恢复的文件并重新打开后,保存工作簿的vba代码就没有问题。

答案 3 :(得分:0)

发生这种情况时,我在保存之前添加了一条命令。

On Error Resume Next
    Kill TargetFullname
On Error GoTo 0

wb.SaveCopyAs TargetFullname

(我也使用application.display=false