首页 > 解决方案 > 使用 ActiveWorkbook.SaveCopyAs 文件名时出现运行时错误

问题描述

ActiveWorkbook.SaveCopyAs Filename: 给

运行时错误 1004

但点击 Debug>Run> Continue 代码按预期运行。

我有一个启用宏的 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)

标签: excelvba

解决方案


您还必须停用这些事件,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 SubCancel = TrueBeforeSaveInsteadOfSaveBeforeSave

注意ThisWorkbookActiveWorkbook不一样。我假设您打算使用ThisWorkbook运行此代码的工作簿,而在代码运行时ActiveWorkbook具有焦点(位于顶部)的工作簿。


推荐阅读