Макрос на рекалькуляцию
Модератор: Naeel Maqsudov
-
- Сообщения: 163
- Зарегистрирован: 05 мар 2009, 11:27
Доброе утро,
Подскажите пожалуйста, каким образом можно завязать макрос на пересчёт, что то такого типа.
Private Sub Workbook_SheetCalculate
...
End Sub
Но который был бы завязан на CheckBox. Расположенный на листе. Тоесть при установки галочки, макрос отслеживал бы изменения на листе, и запускался при каждом обновлении. Если же CheckBox = false, то он не запускал бы макрос при каждом обновлении листа.
Заранее благодарю за помощь !!
Подскажите пожалуйста, каким образом можно завязать макрос на пересчёт, что то такого типа.
Private Sub Workbook_SheetCalculate
...
End Sub
Но который был бы завязан на CheckBox. Расположенный на листе. Тоесть при установки галочки, макрос отслеживал бы изменения на листе, и запускался при каждом обновлении. Если же CheckBox = false, то он не запускал бы макрос при каждом обновлении листа.
Заранее благодарю за помощь !!
Наверное, так: если False, то выходим из процедуры
Код: Выделить всё
Private Sub Workbook_SheetCalculate
If Sheets("Лист1").CheckBox1.Value = False Then Exit Sub
...
End Sub
-
- Сообщения: 163
- Зарегистрирован: 05 мар 2009, 11:27
nilem писал(а):Наверное, так: если False, то выходим из процедурыКод: Выделить всё
Private Sub Workbook_SheetCalculate If Sheets("Лист1").CheckBox1.Value = False Then Exit Sub ... End Sub
Дело в том, в одной книге у меня 2 макроса, один на расчёт, другой на коррекцию.
1-ый макрос запускается с кнопки, и проводит расчёт, и как бы предлагает оптимальное решение.
2-ой макрос, для корректировки, при внесении изменений на листе, выдаёт результаты по внесенным изменениям.
Если оставить как Вы порекомендовали. То - при запуске первого макроса, который проихводит расчёт, второй будет запускаться, при вводе каждого значения первым макросом. Это убьют систему наглухо.
Поэтому для создания "френдли-интерфейса", хотелось бы с листа, включать и выключать автозапуск макроса. Причём не с кнопки, а на изменение листа.
С кнопки - это скучно, каждый раз при корректировки, нажимать кнопку - так никаких нервов не хватит ) Поэтому и было придумано, что бы после расчёта, активировать возможность коррекции с авторасчётом.
-
- Сообщения: 163
- Зарегистрирован: 05 мар 2009, 11:27
Может есть способ checkbox - ом включать макрос, который работает на принципе SheetCalculate ?
-
- Сообщения: 163
- Зарегистрирован: 05 мар 2009, 11:27
Добрый день, пожалуйста, помогите с этим вопрсом. На самом деле, эта тема очень актуальна, и довольно необычное решение проблемы.
проблема в том, что я могу реализовать каждую идею по отдельности, но не хватает опыта и навыков, соединить 2 макроса в один, что бы получить желаемый результат.
написан макрос, который производит расчёт, с кнопки. Второй макрос, отслеживает изменения листа на пересчёт, и как только происходит пересчёт листа, макрос запускается, и производит собственные расчёты. НО ! первый макрос ломает второй, потому что когда , первый макрос начинает считать, на каждое изменение первым макросом, второй макрос запускается. Можно ли завязать работу второго макроса на checkbox ? что бы когда галка стояла, то макрос включался бы на обновление листа, если же галки нет, то код на изменение листа не запускался бы.
Очень нужно решение этой задачки.
проблема в том, что я могу реализовать каждую идею по отдельности, но не хватает опыта и навыков, соединить 2 макроса в один, что бы получить желаемый результат.
написан макрос, который производит расчёт, с кнопки. Второй макрос, отслеживает изменения листа на пересчёт, и как только происходит пересчёт листа, макрос запускается, и производит собственные расчёты. НО ! первый макрос ломает второй, потому что когда , первый макрос начинает считать, на каждое изменение первым макросом, второй макрос запускается. Можно ли завязать работу второго макроса на checkbox ? что бы когда галка стояла, то макрос включался бы на обновление листа, если же галки нет, то код на изменение листа не запускался бы.
Очень нужно решение этой задачки.
-
- Сообщения: 163
- Зарегистрирован: 05 мар 2009, 11:27
Up!
Не уэе ли никто н езнает способ реалзиации подобной задачи?
Не уэе ли никто н езнает способ реалзиации подобной задачи?
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Действительно странно что еще никто не ответил
1) если надо именно по чекбоксу, то в начале макроса (точнее обработчика события) пишем
if ЧекбоксТакойТо.value then
а потом в конце
end if
2) но есть более изящный способ
создаём глобальную переменную, скажем
dim Mutex as boolean
Точно также как в решении выше проблемный обработчик события заключаем в операторные скобки
if not Mutex then
.....
end if
Т.е. он будет запускать только если Mutex=false
Другой же обработчик события, работа которого приводит к нежелательному срабатыванию первого события должен в нужное время делать
Mutex=true (это вначале своей работы)
и
Mutex=false (когда нужно снять запрет на срабатывание события)
1) если надо именно по чекбоксу, то в начале макроса (точнее обработчика события) пишем
if ЧекбоксТакойТо.value then
а потом в конце
end if
2) но есть более изящный способ
создаём глобальную переменную, скажем
dim Mutex as boolean
Точно также как в решении выше проблемный обработчик события заключаем в операторные скобки
if not Mutex then
.....
end if
Т.е. он будет запускать только если Mutex=false
Другой же обработчик события, работа которого приводит к нежелательному срабатыванию первого события должен в нужное время делать
Mutex=true (это вначале своей работы)
и
Mutex=false (когда нужно снять запрет на срабатывание события)
-
- Сообщения: 163
- Зарегистрирован: 05 мар 2009, 11:27
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 (когда нужно снять запрет на срабатывание события)
Спасибо ! Вот только если честно не знаю ... а Можно в условие размещать всю процедуру?