运行时错误“1004”:对象“_Workbook”的方法“SaveAs”失败
Posted
技术标签:
【中文标题】运行时错误“1004”:对象“_Workbook”的方法“SaveAs”失败【英文标题】:Run-time error '1004': Method 'SaveAs' of object'_Workbook' failed 【发布时间】:2015-08-21 11:14:51 【问题描述】:用户有一个 Excel 电子表格。为了保存它,他们按下一个运行以下 VBA 代码的按钮。
代码尝试将 Excel 电子表格保存到网络位置,并用今天的日期修改文件名。
代码会间歇性地失败
“运行时错误'1004':对象'_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
【问题讨论】:
基本上;您的代码无法访问映射的驱动器 【参考方案1】:正如 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
声明的不准确声明添加了删除线(参见下面的 cmets)。基本上,由于With
和End With
之间的任何内容都没有以.
开头,因此该语句根本没有做任何事情。
【讨论】:
wbNew
不会引起任何问题,它只是完全多余和未使用的。但它不会影响任何其他代码行。
你说得对,wbNew
本身不会引起任何问题,我的解释应该更清楚。在原始代码示例中,除了ActiveWorkbook之外,还使用了with
语句,这基本上导致ActiveWorkbook.ActiveWorkbook.SaveAs...
@EricHarlan 刚刚遇到这个,因为有人建议这是一个新问题的重复。 FWIW 原始代码中的With
块不会影响事物 - 只有当它说.ActiveWorkbook.SaveAs
(即带有前导.
)时,它才会被视为ActiveWorkbook.ActiveWorkbook.SaveAs
。原始代码中的 With
块实际上并没有被使用,因此可以删除,但不会导致任何错误。
好点,@YowE3K 和 Wolfie(只能标记一个用户)。我已经更新了我的答案。抱歉,最初指出时我没有遵循。【参考方案2】:
我也在寻找导致此错误的原因,然后我想起我正在处理已恢复的电子表格版本。一旦我手动保存恢复的文件并重新打开它,保存工作簿的 vba 代码就没有问题了。
【讨论】:
【参考方案3】:当我遇到这种情况时,我在保存之前添加了一个命令。
On Error Resume Next
Kill TargetFullname
On Error GoTo 0
wb.SaveCopyAs TargetFullname
(我也用application.display=false
)
【讨论】:
【参考方案4】:这对我有用。确保您的工作簿未共享。我猜“共享”工作簿有限制。
在这里看到这个: https://www.ozgrid.com/forum/forum/help-forums/excel-general/27843-save-xls-as-txt
在“审阅”选项卡中,单击“共享工作簿”并确保“允许多个用户同时进行更改。这允许工作簿合并”未选中。
【讨论】:
以上是关于运行时错误“1004”:对象“_Workbook”的方法“SaveAs”失败的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用 OLEDBConnection 运行时错误“1004”运行查询:应用程序定义或对象定义错误