ActiveWorkbook.SaveCopyAs Filename
:给出
运行时错误1004
但点击Debug> Run>继续代码按预期运行。
我有一个启用Excel2016电子表格的宏。更新并保存到PC后,我也希望将副本保存到NAS。我已经编写了代码(请参见下文),并为其他两个电子表格使用了相同的代码(文件名除外)。其他两个电子表格将按预期方式保存(即保存到NAS和PC,没有运行时错误) 代码如下:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'Saves the current file to a backup folder and the default folder
'Note that any backup is overwritten
Application.DisplayAlerts = False
ActiveWorkbook.SaveCopyAs Filename:="\\ReadyNasDuo\Dell\Excelbak\finance18_19.xlsm"
ActiveWorkbook.Save
Application.DisplayAlerts = True
End Sub
我希望问题文件的行为与其他两个类似。任何人都知道为什么不这样做。唯一的区别是问题文件更大,受密码保护,链接到另一个电子表格并且具有更多的“编码”(即,更多的宏和VBA)
答案 0 :(得分:1)
您还必须停用事件Application.EnableEvents = False
,否则您的Save
/ SaveCopyAs
将触发另一个Workbook_BeforeSave
事件。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'Saves the current file to a backup folder and the default folder
'Note that any backup is overwritten
Application.DisplayAlerts = False
Application.EnableEvents = False
ThisWorkbook.SaveCopyAs Filename:="\\ReadyNasDuo\Dell\Excelbak\finance18_19.xlsm"
'ActiveWorkbook.Save 'needed?
Application.EnableEvents = True
Application.DisplayAlerts = True
End Sub
我还认为您不需要ActiveWorkbook.Save
,因为只要您未设置End Sub
,它就会一直保存在Cancel = True
中。该事件称为BeforeSave
而不是InsteadOfSave
,因此,BeforeSave
完成后,原始保存操作仍然会发生。
请注意,ThisWorkbook
和ActiveWorkbook
是不同的。我假设您打算使用ThisWorkbook
,这是代码在其中运行的工作簿,而ActiveWorkbook
是在代码运行时将焦点放在顶部的工作簿。