运行时错误“1004”:object'_Workbook的方法'SaveAs'失败

用户有一个Excel电子表格,当他们去保存它,他们按下一个button,在macros内运行下面的VBA代码。 该脚本尝试将Excel电子表格保存到networking位置,并使用今天的date修改文件名。 间歇性的脚本将失败,并出现“运行时错误”1004“:object'_Workbook'方法'SaveAs'失败。 有谁知道原因是什么? 脚本是:

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 

正如雨果所说,这可能是映射驱动器的问题。 我更喜欢使用完整的UNCpath(\\ Thismachine \ …),以防工作簿在未设置映射驱动器的计算机上使用。

我以为缺less扩展可能是问题,但我只是在Excel 2013中testing它,它会自动添加.xlsx文件名。

这个问题可能是由于wbNew引用。 这是完全没有必要的,不应该与ActiveWorkbook结合 。 基本上,您应该有一个工作簿的引用,或者使用预定义的ActiveWorkbook引用。 我还build议使用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命令以防止任何保存popup窗口,如使用.xlsx而不是.xlsm,并覆盖现有的副本。

编辑2018-08-11:添加转义反斜杠来修复UNCpath显示。 增加了关于With语句不准确的陈述(见下面的评论)。 基本上,因为WithEnd With之间没有任何一个以. ,声明完全没有做任何事情。