Excel, кажется, долго ждать, чтобы начать сохранение документа - PullRequest
0 голосов
/ 04 января 2019

У меня странные явления.Открывая свой лист, я создаю файл резервной копии текущей рабочей книги.Это происходит практически без задержки.Когда я закрываю файл, создается еще одна копия рабочей книги, которая также выполняется практически без задержки.Но при сохранении мастер-файла Excel, похоже, долго ждет (иногда это занимает несколько минут), прежде чем он будет сохранен.

Теперь мастер-файл не большой, всего 1.05 МБ, поэтому его не должно быть.проблема.Я перепробовал все решения по ускорению, доступные в сети, но безрезультатно.Даже попытался переустановить Excel, опять же безрезультатно.

Это кодировка, довольно простая.

Private Sub Workbook_Open()
  ... ' perform some actions like setting NewName and ext
  ActiveWorkbook.SaveCopyAs (NewName & " (backup)." & ext)
  ....
End Sub

Private Sub Workbook_Deactivate()
  ... ' perform some actions like setting NewName and ext
  ActiveWorkbook.SaveCopyAs (NewName & " (backup)." & ext)
  ....
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  If SaveAsUI Then Cancel = True 'Excel will close and handle saving itself.
  If ActiveWorkbook.Saved Then Cancel = True ' Cancel saving when no changes were made
  ...
  Application.EnableEvents = False
  Application.ScreenUpdating = False
  Application.Calculation = xlCalculationManual
  Application.DisplayAlerts = False  ' Make sure no close message pops up from the application
  ActiveWorkbook.Save
  Application.DisplayAlerts = True
  ActiveWorkbook.Saved = True
  .... ' Processing stuff amongst with resetting ScreenUpdating, EnableEvents and Calculation 
  Cancel = True ' Or it will fire twice for some reason
End Sub

Как видно из моего примера кодирования, после закрытия Excel япусть он сам обрабатывает все сбережения.Но даже тогда это очень медленно при сохранении документа.Чтобы быть более точным, Excel, кажется, долго ждать, чтобы начать сохранение документа.

Книга и ее копии хранятся на файловом сервере через сеть 1 Гб.Сеть не является проблемой, поскольку копии сохраняются очень быстро.Это только главный файл, который сохраняется (очень) вяло.Это может быть моим воображением, но, кажется, это даже медленнее, когда я дольше работаю с книгой.

Еще более странно ... Я недавно перешел с Office 2007 на Office 2016 (= 365).До переключения?Нет проблем.

Я не могу обдумать это.Может быть, один из вас может?

Ответы [ 3 ]

0 голосов
/ 04 января 2019

Вы можете проверить, был ли файл уже сохранен перед запуском события сохранения:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If SaveAsUI Then Cancel = True 'Excel will close and handle saving itself.

    If ActiveWorkbook.Saved = False Then
        Application.DisplayAlerts = False
        Application.EnableEvents = False
        ActiveWorkbook.Save
        Application.DisplayAlerts = True
        Application.EnableEvents = True
        'Debug.Print "Fired"
    End If
End Sub
0 голосов
/ 15 января 2019

После тщательного тестирования я пришел к выводу: разница между сохранением копии или мастер-файла заключается в том, что при сохранении мастер-файла обрабатываются также временные файлы и деньги (?).Это приводит к дополнительной задержке перед сохранением файла.Это единственная причина, которую я могу найти, которая объясняет разницу в поведении между сохранением копии или мастер-файла.

0 голосов
/ 04 января 2019

Событие Workbook_BeforeSave запускается каждый раз, когда текущая рабочая книга сохраняется.По завершении рабочая книга сохраняется, если для параметра Отмена не установлено значение True (в любой точке подпрограммы).Настройка Cancel = True останавливает сохранение рабочей книги по завершении подпрограммы.

Проблема заключается в том, что при вызове метода Save в пределах события Workbook_BeforeSave он сразу же вызывает то же событие, чтозатем снова пытается сохранить книгу, а затем снова вызывает событие.Это повторяется до тех пор, пока вы не достигнете предела числа вложенных подпрограмм, которые могут выполняться одновременно.

SaveCopyAs сохраняет копию рабочей книги, которая не вызывает событие BeforeSave, поэтому он просто сохраняетоднажды быстро скопируйте рабочую книгу.

Возможно, 2007 не разрешил этот рекурсивный вызов события Workbook_BeforeSave, или у него был меньший предел количества вложенных подпрограмм.

Для параметра Отмена установлено значение Trueне останавливает событие в его дорожках, он просто останавливает Excel от повторного сохранения рабочей книги после завершения подпрограммы.Если вы намерены не обрабатывать сохранение вручную, если не было никаких изменений (обнаруженных SaveAsUI = True), то, возможно, вам следует просто выйти из подпрограммы в этой точке:

If SaveAsUI Then Exit Sub

Затем подпрограмма остановитсябез вызова метода сохранения, но книга все равно будет сохранена после завершения подпрограммы, завершив рекурсивный цикл.

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