Ваша проблема может быть связана с тем, что Excel в процессе выполнения кода находится в состоянии, который препятствует изменению режима расчётов (например, если происходит вычисление формул или в файле есть внешние ссылки). Вот несколько возможных причин и решений:
1. Файл может быть заблокирован на пересчёт
Если во время выполнения макроса происходит пересчёт формул (даже если режим пересчёта установлен на ручной), Excel может заблокировать изменения режима расчёта. Это может привести к тому, что строка Application.Calculation = xlAutomatic просто не выполняется.
Решение: Попробуйте добавить задержку перед изменением режима расчёта:
Application.Wait (Now + TimeValue("00:00:01"))
Application.Calculation = xlAutomatic
2. Проблема с самой рабочей книгой
Если в вашей рабочей книге есть внешние ссылки, подключённые данные или повреждённые формулы, это может блокировать изменения настроек расчётов.
Решение: Проверьте рабочую книгу на наличие внешних ссылок, подключений данных или повреждений. Попробуйте открыть книгу в другом экземпляре Excel и убедитесь, что нет скрытых ошибок.
3. Необходимость отключения событий
В некоторых случаях Excel может игнорировать команды из-за включённых событий. Попробуйте отключить события перед изменением режима расчётов.
Application.EnableEvents = False
Application.Calculation = xlAutomatic
Application.EnableEvents = True
4. Конфликт с другими макросами
Возможно, в файле или другом открытом файле выполняются другие макросы, которые могут конфликтовать с вашим кодом.
Решение: Убедитесь, что нет активных макросов, которые могли бы блокировать изменения настроек.
5. Проблемы с производительностью
В зависимости от размера и сложности файла, Excel может не успевать обработать запросы вовремя. Попробуйте уменьшить нагрузку на систему (например, закрыть другие книги или программы) или добавить дополнительную обработку ошибок.
6. Проверка доступности команды
В случае, если команда не срабатывает, можно обернуть её в обработку ошибок и вывести сообщение для диагностики:
On Error Resume Next
Application.Calculation = xlAutomatic
If Err.Number <> 0 Then
MsgBox "Error changing calculation mode: " & Err.Description
End If
On Error GoTo 0
Application.Calculation = xlManual
[Какой-то код]
Application.Calculation = xlAutomatic
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs ActiveWorkbook.Path & "\FileName_" & Year & "_" & Months(Month)
Application.DisplayAlerts = True
Так на строчке: Application.Calculation = xlAutomatic всё дропается и код который идёт после неё - не работает. Ошибок нет.
Я ставил после этой строчки Debug.Print "Stage"
Он не вывел ничего. А значит, именно эта строчка не срабатывает. Впрочем оно и видно. Метод расчётов остаётся ручным.
При этом на других файликах. Точно таких же - всё работало.