Ошибка выполнения при использовании ActiveWorkbook.SaveCopyAs Имя файла - PullRequest
0 голосов
/ 11 февраля 2019

ActiveWorkbook.SaveCopyAs Filename: дает

Ошибка времени выполнения 1004

, но при нажатии «Отладка> Выполнить> Продолжить код» выполняется, как и ожидалось.

У меня естьмакрос включения электронной таблицы Excel2016.После обновления и сохранения на ПК я также хочу сохранить копию на моем NAS.Я написал код (см. Ниже) и использовал идентичный код, отличный от имени файла, для двух других электронных таблиц.Эти две другие электронные таблицы сохраняются в соответствии с ожиданиями (т.е. на NAS и ПК без ошибок времени выполнения)). Код выглядит следующим образом:

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 голосов
/ 11 февраля 2019

Вы также должны деактивировать события 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 - это та, которая имеет фокус (находится сверху) во время выполнения кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...