用户有一个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
答案 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
语句的不准确陈述的删除(请参阅下面的评论)。基本上,由于With
和End 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
)