Макросом активировать "Вычислять автоматически" и F9

Автор Tigrik, 8 марта 2022, 22:52

0 Пользователи и 1 гость просматривают эту тему.

Tigrik

Всё-таки, решил разделить эти 4 сообщения в отдельные темы (сначала они были задуманы для новой темы из раздела "Calc" "Быстродействия Calc..."), но они очень разные - поэтому, 3 сообщения "уходят" в раздел "basic" со своими отдельными темами.

Все файлы, которые были "завязаны" для очень объемной задачи, сейчас, отключены от автоматического вычисления и они будут работать под управлением макроса basic.
Я вижу только два варианта задать просчёт после введение необходимых данных:
1. В начале макроса активировать "Вычислять автоматически", а, при закрытие макроса, снова деактивировать этот переключатель.
2. Каждый раз, после ввода данных, запускать "Пересчитать"(F9).

Конечно, всё это можно делать в ручную, но это не очень удобно.

Подскажите, пожалуйста, как эти два варианта можно реализовать в макросе. Возможно, что у них один и тот же сервис?
Спасибо.

eeigor

#1
Посмотрите методы:
Thiscomponent.isAutomaticCalculationEnabled()
Thiscomponent.enableAutomaticCalculation()
Они позволяют управлять автоматическим пересчётом формул.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

Tigrik


sokol92

Цитата: Tigrik от  8 марта 2022, 22:52В начале макроса активировать "Вычислять автоматически"
Обычная практика - наоборот. В начале макроса отключаем автоматическое вычисление формул и производим пересчет формул по мере необходимости (а не непрерывно).
Владимир.

Tigrik

Владимир, у меня очень "тяжелые" файлы и я отключил "Вычислять автоматически" - так легче редактировать их.
Когда эти файлы будут под макросом, тогда, чтобы не "посылать" каждый раз F9 ("Пересчитать"), мне думается, лучше один раз активировать "Вычислять автоматически" в самом начале приёма данных, а перед завершением работы макроса деактивировать этот переключатель.

Возможно, что я не правильно Вас понял.
Работа моей программы: принять данные, просчитать, выдать результат, снова данные - новый результат. И так, пока, не будет дана команда (кнопка) "завершить макрос".

sokol92

Все зависит от того, как Вы вносите изменения макросом значений ячеек. После каждого изменения ячейки зависимые ячейки будут немедленно пересчитываться (а макрос будет ждать). Если Вы меняете в одном операторе сразу все ячейки, то это приемлемо. Если же Вы делаете много "мелких" изменений, то пересчет ячеек может тормозить процесс.
Владимир.

mikekaganski

Цитата: Tigrik от  9 марта 2022, 15:08Когда эти файлы будут под макросом, тогда, чтобы не "посылать" каждый раз F9 ("Пересчитать"), мне думается, лучше один раз активировать "Вычислять автоматически" в самом начале приёма данных, а перед завершением работы макроса деактивировать этот переключатель.
Лучше перед "выдать результат" активировать и тут же деактивировать автопересчёт, чтобы вызвать пересчёт всех ячеек, требующих пересчёта. Альтернативно можно вызвать в этой же точке hard recalc - но тут всё зависит от того, сколько данных реально требуют пересчёта, а сколько нет (hard recalc пересчитает всё, в т.ч. то, что не менялось, что может быть неоптимально для некоторых сценариев).
С уважением,
Михаил Каганский

Tigrik

Макрос будет изменять значение только в одной ячейке.
Все вычисление в текущем файле будут от изменения в этой ячейке.

Tigrik

Цитата: mikekaganski от  9 марта 2022, 15:43(hard recalc пересчитает всё, в т.ч. то, что не менялось, что может быть неоптимально для некоторых сценариев)
Для моего сценария это точно не подходит - 2 млн. ячеек всех формул. Но, исходя из введенных данных, в самых сложных "условиях" будут "работать" 1.5 млн. - всё же чуть полегче и быстрее.