Страница 1 из 1
Макрос на рекалькуляцию
Добавлено: 01 июн 2011, 09:58
kuznetsovSergey
Доброе утро,
Подскажите пожалуйста, каким образом можно завязать макрос на пересчёт, что то такого типа.
Private Sub Workbook_SheetCalculate
...
End Sub
Но который был бы завязан на CheckBox. Расположенный на листе. Тоесть при установки галочки, макрос отслеживал бы изменения на листе, и запускался при каждом обновлении. Если же CheckBox = false, то он не запускал бы макрос при каждом обновлении листа.
Заранее благодарю за помощь !!
Re: Макрос на рекалькуляцию
Добавлено: 02 июн 2011, 12:33
nilem
Наверное, так: если False, то выходим из процедуры
Код: Выделить всё
Private Sub Workbook_SheetCalculate
If Sheets("Лист1").CheckBox1.Value = False Then Exit Sub
...
End Sub
Re: Макрос на рекалькуляцию
Добавлено: 07 июн 2011, 16:12
kuznetsovSergey
nilem писал(а):Наверное, так: если False, то выходим из процедуры
Код: Выделить всё
Private Sub Workbook_SheetCalculate
If Sheets("Лист1").CheckBox1.Value = False Then Exit Sub
...
End Sub
Дело в том, в одной книге у меня 2 макроса, один на расчёт, другой на коррекцию.
1-ый макрос запускается с кнопки, и проводит расчёт, и как бы предлагает оптимальное решение.
2-ой макрос, для корректировки, при внесении изменений на листе, выдаёт результаты по внесенным изменениям.
Если оставить как Вы порекомендовали. То - при запуске первого макроса, который проихводит расчёт, второй будет запускаться, при вводе каждого значения первым макросом. Это убьют систему наглухо.
Поэтому для создания "френдли-интерфейса", хотелось бы с листа, включать и выключать автозапуск макроса. Причём не с кнопки, а на изменение листа.
С кнопки - это скучно, каждый раз при корректировки, нажимать кнопку - так никаких нервов не хватит ) Поэтому и было придумано, что бы после расчёта, активировать возможность коррекции с авторасчётом.
Re: Макрос на рекалькуляцию
Добавлено: 07 июн 2011, 16:13
kuznetsovSergey
Может есть способ checkbox - ом включать макрос, который работает на принципе SheetCalculate ?
Re: Макрос на рекалькуляцию
Добавлено: 16 июн 2011, 12:41
kuznetsovSergey
Добрый день, пожалуйста, помогите с этим вопрсом. На самом деле, эта тема очень актуальна, и довольно необычное решение проблемы.
проблема в том, что я могу реализовать каждую идею по отдельности, но не хватает опыта и навыков, соединить 2 макроса в один, что бы получить желаемый результат.
написан макрос, который производит расчёт, с кнопки. Второй макрос, отслеживает изменения листа на пересчёт, и как только происходит пересчёт листа, макрос запускается, и производит собственные расчёты. НО ! первый макрос ломает второй, потому что когда , первый макрос начинает считать, на каждое изменение первым макросом, второй макрос запускается. Можно ли завязать работу второго макроса на checkbox ? что бы когда галка стояла, то макрос включался бы на обновление листа, если же галки нет, то код на изменение листа не запускался бы.
Очень нужно решение этой задачки.
Re: Макрос на рекалькуляцию
Добавлено: 24 авг 2011, 14:52
kuznetsovSergey
Up!
Не уэе ли никто н езнает способ реалзиации подобной задачи?
Re: Макрос на рекалькуляцию
Добавлено: 25 авг 2011, 09:40
Naeel Maqsudov
Действительно странно что еще никто не ответил
1) если надо именно по чекбоксу, то в начале макроса (точнее обработчика события) пишем
if ЧекбоксТакойТо.value then
а потом в конце
end if
2) но есть более изящный способ
создаём глобальную переменную, скажем
dim Mutex as boolean
Точно также как в решении выше проблемный обработчик события заключаем в операторные скобки
if not Mutex then
.....
end if
Т.е. он будет запускать только если Mutex=false
Другой же обработчик события, работа которого приводит к нежелательному срабатыванию первого события должен в нужное время делать
Mutex=true (это вначале своей работы)
и
Mutex=false (когда нужно снять запрет на срабатывание события)
Re: Макрос на рекалькуляцию
Добавлено: 27 сен 2011, 10:07
kuznetsovSergey
Naeel Maqsudov писал(а):Действительно странно что еще никто не ответил
1) если надо именно по чекбоксу, то в начале макроса (точнее обработчика события) пишем
if ЧекбоксТакойТо.value then
а потом в конце
end if
2) но есть более изящный способ
создаём глобальную переменную, скажем
dim Mutex as boolean
Точно также как в решении выше проблемный обработчик события заключаем в операторные скобки
if not Mutex then
.....
end if
Т.е. он будет запускать только если Mutex=false
Другой же обработчик события, работа которого приводит к нежелательному срабатыванию первого события должен в нужное время делать
Mutex=true (это вначале своей работы)
и
Mutex=false (когда нужно снять запрет на срабатывание события)
Спасибо ! Вот только если честно не знаю ... а Можно в условие размещать всю процедуру?