Страницы: 1
RSS
уведомление о режиме ручного пересчета формул
 
Добрый день, уважаемые форумчане.
Прошу помочь в следующей проблеме:
Имеется макрос, в начале которого, в целях ускорения, отключается автоматический пересчет формул, а в конце - включается.
В процессе работы макроса редко, но могут возникать ошибки (над перехватом всех ошибок ведется работа, но медленно).
При возникновении ошибки пользователь останавливает макрос и продолжает работу с файлом вручную.
При этом режим пересчета формулы остается ручным, но визуально этого не видно.
Пользователь может забыть о том, что пересчет формул осуществляется вручную и это может привести к нежелательным последствиям.
Вопрос: каким образом в автоматическом режиме "напомнить" пользователю о том, что включен режим ручного пересчета формул?
 
Добрый.
У меня с утра разыгралась нездоровая фантазия и возник такой вариант:
1. В основном макросе в начале вставляем команду, которая пишет в ячейку А1 (или какую придумаете) определенного листа число 1.
2. В конце макроса вставляем команду, которая удаляет значение 1 из ячейки из п.1
3. Рисуем еще один макрос, который привязан на активацию листа (на сохранение книги), в общем, на какое-то действие, которое обязательно будет и который проверяет наличие 1 в заданной ячейке - если там 1, то значит основной макрос завершился аварийно, доп.макрос включает автоматический пересчет (еще чего включает, может обновление экрана? и т.д.) и удаляет 1. А если там 1 нет, то ничего не делает.
Кому решение нужно - тот пример и рисует.
 
Sergey U, здравствуйте
Цитата
Sergey U: каким образом в автоматическом режиме "напомнить" пользователю
Msgbox "Внимание! Включён РУЧНОЙ режим пересчёта формул!", vbInfomation
Но я бы, всё-таки, включал автомат в коде перед выходом…

Пытливый, зачем так сложно  :D
Есть же статичные переменные или скрытые имена — если нужно что-то хранить долго и между сеансами… И это точно не для этого случая)))
Изменено: Jack Famous - 29.11.2022 10:11:45 (Форматирование строки кода)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Sergey U написал:
над перехватом всех ошибок ведется работа, но медленно
так надо именно её закончить. Для начала можно все On Error Resume Next заменить на On Error GoTo ErrHandler. Даже в автоматическом режиме без проблем это делается(через Ctrl+H)
А перед End Sub прописать эту самую метку с возвратом всех параметров. Что-то типа:
Код
Sub Test()
'оптимизируем настройки
Application.Calculation = xlCalculationmanual
On Error GoTo ErrHandler
'основной код
ErrHandler:
If Err.Number > 0 Then
msgbox "Во время выполнения кода возникла ошибка: " & Err.Descrition, vbInformation
end if
'возвращаем настройки
Application.Calculation = xlCalculationAutomatic
End Sub

Потому что без этого ну очень фиговые остальные варианты.
Например, можно при любом выделении любой ячейки проверять режим пересчета и либо автоматом его включать, либо информировать. Но! Для этого надо быть уверенным, что и отслеживание событий не отключается тем же макросом, что отключает автопересчет. Если это все же происходит - вариантов вообще почти не остается.
Изменено: Дмитрий(The_Prist) Щербаков - 29.11.2022 09:45:31
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Спасибо всем за ответы.
Но, видимо, я не совсем верно описал проблему.
В процессе работы кода могут появляться ошибки типа:
Run-time error '438': Object doesn't support this property or method
После чего пользователь прерывает работу макроса и продолжает работу с файлом (в режиме ручного пересчета формул, если не переключит).
Поэтому, видимо, предложенные варианты не работают, кроме, скорее всего, предложенного Дмитрием:
Цитата
написал:
Например, можно при любом выделении любой ячейки проверять режим пересчета и либо автоматом его включать, либо информировать.
Буду работать в этом направлении
Еще раз всем спасибо!
 
Цитата
Sergey U написал:
В процессе работы кода могут появляться ошибки типа:Run-time error '438': Object doesn't support this property or method
для этого существует обработка ошибок, которая позволяет вернуть начальные установки которые были изменены в процессе выполнения и выйти из процедуры после этого.
По вопросам из тем форума, личку не читаю.
Страницы: 1
Наверх