Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Excel VBA код Application.Calculation = xlAutomatic не работает. Почему?

LGD Знаток (268), на голосовании 2 недели назад
Есть код:
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"
Он не вывел ничего. А значит, именно эта строчка не срабатывает. Впрочем оно и видно. Метод расчётов остаётся ручным.
При этом на других файликах. Точно таких же - всё работало.
Голосование за лучший ответ
Татьяна Просветленный (36345) 1 месяц назад
Ваша проблема может быть связана с тем, что 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
LGDЗнаток (268) 1 месяц назад
1 - не помогло.
2 - ссылок нет
3 - не помогло
4 - там всего три макроса. 1 скрывает столбцы по checkbox, второй вызывается кнопкой. Этот тоже. Так что нет.
5 - Точно нет. Другие файлы были больше - и проблем не было.
6 - Не сработало. Ведь код после Application.Calculation = xlAutomatic не выполняется. Программа доходит до Application.Calculation = xlAutomatic и просто обрывается.
LGDЗнаток (268) 1 месяц назад
Я закомментил эту строчку и код начал сыпаться с самого начала. Короче, походу, просто скрипт "перегрелся". Ибо я сегодня запустил и всё заработало. Хз чё это было.
Koshkina Гуру (3497) 1 месяц назад
Возможно, файл повреждён. Попробуйте создать новый файл и перенести данные и макросы в него.

Ещё у вас должны быть все необходимые права для изменения настроек расчёта в Excel.

Попробуйте изолировать проблему, закомментировав другие части кода, чтобы убедиться, что именно эта строка вызывает проблему.
LGDЗнаток (268) 1 месяц назад
Я закомментил эту строчку и код начал сыпаться с самого начала. Короче, походу, просто скрипт "перегрелся". Ибо я сегодня запустил и всё заработало. Хз чё это было.
Сергей Мудрец (10348) 1 месяц назад
когда пишешь application.calculation предлагается вариант
Application.Calculation = xlCalculationAutomatic
Months - это ваша функция?
LGDЗнаток (268) 1 месяц назад
Да. Там просто массив из название месяцев. Функция принимает номер месяца, а выдаёт название.
Похожие вопросы