使用ActiveWorkbook.SaveCopyAs文件名时出现运行时错误

时间:2019-02-11 15:25:31

标签: excel vba

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)

1 个答案:

答案 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完成后,原始保存操作仍然会发生。

请注意,ThisWorkbookActiveWorkbook是不同的。我假设您打算使用ThisWorkbook,这是代码在其中运行的工作簿,而ActiveWorkbook是在代码运行时将焦点放在顶部的工作簿。