Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Запуск макроса после Workbook_SheetCalculate 1 раз - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Запуск макроса после Workbook_SheetCalculate 1 раз (Макросы/Sub)
Запуск макроса после Workbook_SheetCalculate 1 раз
RAN Дата: Четверг, 02.11.2017, 10:21 | Сообщение № 1
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Мяв!
Как удалось отследить, событие Workbook_SheetCalculate наступает после полного пересчета книги, что, в принципе, и требуется.
Одна беда, оно наступает столько раз, сколько листов участвует в пересчете.
Каким образом можно понять, что это событие наступило последний раз в этом цикле?
Дабы запустить макрос по этому событию 1 раз, а не неопределенное количество раз, как это происходит сейчас.


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Четверг, 02.11.2017, 10:22
 
Ответить
СообщениеМяв!
Как удалось отследить, событие Workbook_SheetCalculate наступает после полного пересчета книги, что, в принципе, и требуется.
Одна беда, оно наступает столько раз, сколько листов участвует в пересчете.
Каким образом можно понять, что это событие наступило последний раз в этом цикле?
Дабы запустить макрос по этому событию 1 раз, а не неопределенное количество раз, как это происходит сейчас.

Автор - RAN
Дата добавления - 02.11.2017 в 10:21
Roman777 Дата: Четверг, 02.11.2017, 10:47 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
RAN,
Инкрементировать публичую переменную каждый раз при возникновении события на +1.
Количество таких событий должно быть равно общему числу листов в книге, или я не правильно понял?
(Ну и внутри же события выполнять что требуется после "+1" по проверки величины переменной(причём, если листов больше 1, достаточно будет сравнивать переменную с 1цей, а не с кол-вом листов даже...))


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Четверг, 02.11.2017, 10:52
 
Ответить
СообщениеRAN,
Инкрементировать публичую переменную каждый раз при возникновении события на +1.
Количество таких событий должно быть равно общему числу листов в книге, или я не правильно понял?
(Ну и внутри же события выполнять что требуется после "+1" по проверки величины переменной(причём, если листов больше 1, достаточно будет сравнивать переменную с 1цей, а не с кол-вом листов даже...))

Автор - Roman777
Дата добавления - 02.11.2017 в 10:47
RAN Дата: Четверг, 02.11.2017, 11:09 | Сообщение № 3
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
или я не правильно понял?

Не знаю :)
оно наступает столько раз, сколько листов участвует в пересчете.


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
или я не правильно понял?

Не знаю :)
оно наступает столько раз, сколько листов участвует в пересчете.

Автор - RAN
Дата добавления - 02.11.2017 в 11:09
InExSu Дата: Четверг, 02.11.2017, 23:13 | Сообщение № 4
Группа: Друзья
Ранг: Ветеран
Сообщений: 648
Репутация: 96 ±
Замечаний: 0% ±

Excel 2010, 365
не неопределенное количество

= определённое?
Может код покажете?


Разработчик Битрикс24 php, Google Apps Script, VBA Excel Windows/Mac
 
Ответить
Сообщение
не неопределенное количество

= определённое?
Может код покажете?

Автор - InExSu
Дата добавления - 02.11.2017 в 23:13
_Boroda_ Дата: Пятница, 03.11.2017, 09:45 | Сообщение № 5
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16666
Репутация: 6478 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
- Прочитайте Правила форума
- Исправьте название темы согласно п.2 Правил форума
- Приложите файл в формате Excel размером до 100кб согласно п.3 Правил форума

Хоть и :D :D :D , но и, тем не менее, deal deal deal


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение- Прочитайте Правила форума
- Исправьте название темы согласно п.2 Правил форума
- Приложите файл в формате Excel размером до 100кб согласно п.3 Правил форума

Хоть и :D :D :D , но и, тем не менее, deal deal deal

Автор - _Boroda_
Дата добавления - 03.11.2017 в 09:45
Gustav Дата: Пятница, 03.11.2017, 11:37 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2697
Репутация: 1123 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Всем привет! Я знаю ответ (или подход, возможно, один из подходов). Мне сюда написать или в личной переписке Андрею? ;)


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеВсем привет! Я знаю ответ (или подход, возможно, один из подходов). Мне сюда написать или в личной переписке Андрею? ;)

Автор - Gustav
Дата добавления - 03.11.2017 в 11:37
_Boroda_ Дата: Пятница, 03.11.2017, 11:49 | Сообщение № 7
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16666
Репутация: 6478 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Константин, привет, ну конечно сюда.
Тем более, что Андрей уже не сможет исправить название - сутки с момента создания темы прошли, модераторы, блин, спят в одном ботинке.
Поэтому остается только кому-то из нас (уточнение,добавленное позже - "нас" - это модераторов) проснуться, обуться и поправить название на то, которое предложит Андрей (который, надеюсь, не проигнорирует это сообщение).


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995


Сообщение отредактировал _Boroda_ - Пятница, 03.11.2017, 21:06
 
Ответить
СообщениеКонстантин, привет, ну конечно сюда.
Тем более, что Андрей уже не сможет исправить название - сутки с момента создания темы прошли, модераторы, блин, спят в одном ботинке.
Поэтому остается только кому-то из нас (уточнение,добавленное позже - "нас" - это модераторов) проснуться, обуться и поправить название на то, которое предложит Андрей (который, надеюсь, не проигнорирует это сообщение).

Автор - _Boroda_
Дата добавления - 03.11.2017 в 11:49
Gustav Дата: Пятница, 03.11.2017, 12:06 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2697
Репутация: 1123 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
ну конечно сюда.

Ок yes

Итак, мой неказистый подходец:
1. Добавляем служебный лист (при желании далее может быть скрыт).
2. Переименовываем его как-нибудь в "яяяяяя", чтобы был гарантированно последним по алфавиту среди других листов - вроде Workbook_SheetCalculate их перебирает именно в алфавитном порядке по названиям.
3. На этом листе в ячейку A1 вводим формулу:
Код
=СЛЧИС()
, которая будет пересчитываться при любом "чихе" на других листах
4. Лист скрываем (ну, или не скрываем, если нет в том необходимости)
5. В Workbook_SheetCalculate проверяем имя:
[vba]
Код
If Sh.Name = "яяяяяя" Then ЗапускНужногоМакроса
[/vba]


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
ну конечно сюда.

Ок yes

Итак, мой неказистый подходец:
1. Добавляем служебный лист (при желании далее может быть скрыт).
2. Переименовываем его как-нибудь в "яяяяяя", чтобы был гарантированно последним по алфавиту среди других листов - вроде Workbook_SheetCalculate их перебирает именно в алфавитном порядке по названиям.
3. На этом листе в ячейку A1 вводим формулу:
Код
=СЛЧИС()
, которая будет пересчитываться при любом "чихе" на других листах
4. Лист скрываем (ну, или не скрываем, если нет в том необходимости)
5. В Workbook_SheetCalculate проверяем имя:
[vba]
Код
If Sh.Name = "яяяяяя" Then ЗапускНужногоМакроса
[/vba]

Автор - Gustav
Дата добавления - 03.11.2017 в 12:06
RAN Дата: Пятница, 03.11.2017, 20:40 | Сообщение № 9
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
С утра инет помер, не мог реагировать.
Как обнаружил, при наличии летучих формул, пересчет книги происходит даже при внесении изменений в другую книгу.
В книге порядка 10 листов (в т.ч. и без формул), и что там за формулы, даже создатель не помнит. Но перекрестных ссылок ооочень много.
Смысл затеи - обновить форму (ShowModal=false), после окончания пересчета книги. Почему хочется 1 раз перезаполнить? И очень просто, нужно перерисовать ~ 100 Me.Controls.
проснуться, обуться и поправить название на то, которое предложит Андрей

У меня с фантазией плохо.
Могу предложить NewName
"Однократное выполнение макроса после окончания пересчета книги с не определенным количеством листов, и не известными формулами".
Файлик для поиграться
К сообщению приложен файл: 11.xlsm (20.5 Kb)


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Пятница, 03.11.2017, 20:48
 
Ответить
СообщениеС утра инет помер, не мог реагировать.
Как обнаружил, при наличии летучих формул, пересчет книги происходит даже при внесении изменений в другую книгу.
В книге порядка 10 листов (в т.ч. и без формул), и что там за формулы, даже создатель не помнит. Но перекрестных ссылок ооочень много.
Смысл затеи - обновить форму (ShowModal=false), после окончания пересчета книги. Почему хочется 1 раз перезаполнить? И очень просто, нужно перерисовать ~ 100 Me.Controls.
проснуться, обуться и поправить название на то, которое предложит Андрей

У меня с фантазией плохо.
Могу предложить NewName
"Однократное выполнение макроса после окончания пересчета книги с не определенным количеством листов, и не известными формулами".
Файлик для поиграться

Автор - RAN
Дата добавления - 03.11.2017 в 20:40
InExSu Дата: Пятница, 03.11.2017, 21:07 | Сообщение № 10
Группа: Друзья
Ранг: Ветеран
Сообщений: 648
Репутация: 96 ±
Замечаний: 0% ±

Excel 2010, 365
Файл ниачём.
Пробовали
[vba]
Код
Application.CalculationState
[/vba]
?


Разработчик Битрикс24 php, Google Apps Script, VBA Excel Windows/Mac
 
Ответить
СообщениеФайл ниачём.
Пробовали
[vba]
Код
Application.CalculationState
[/vba]
?

Автор - InExSu
Дата добавления - 03.11.2017 в 21:07
RAN Дата: Пятница, 03.11.2017, 21:13 | Сообщение № 11
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
И к нему таймер цеплять? Или как?
Файл ниачём.

Как так? Вопрос - как в файлике при изменении любой цветной ячейки получить только 1 Msgbox.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеИ к нему таймер цеплять? Или как?
Файл ниачём.

Как так? Вопрос - как в файлике при изменении любой цветной ячейки получить только 1 Msgbox.

Автор - RAN
Дата добавления - 03.11.2017 в 21:13
InExSu Дата: Пятница, 03.11.2017, 21:20 | Сообщение № 12
Группа: Друзья
Ранг: Ветеран
Сообщений: 648
Репутация: 96 ±
Замечаний: 0% ±

Excel 2010, 365
при изменении любой цветной ячейки получить только 1 Msgbox

Слегка понятнее.
[vba]
Код
If Application.CalculationState <> xlDone Then MsgBox Sh.Name
[/vba]
0 msgbox при
[vba]
Код
Application.Calculation = xlAutomatic
[/vba]


Разработчик Битрикс24 php, Google Apps Script, VBA Excel Windows/Mac
 
Ответить
Сообщение
при изменении любой цветной ячейки получить только 1 Msgbox

Слегка понятнее.
[vba]
Код
If Application.CalculationState <> xlDone Then MsgBox Sh.Name
[/vba]
0 msgbox при
[vba]
Код
Application.Calculation = xlAutomatic
[/vba]

Автор - InExSu
Дата добавления - 03.11.2017 в 21:20
RAN Дата: Пятница, 03.11.2017, 21:23 | Сообщение № 13
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
0 msgbox

0 не надо. Нужен 1


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
0 msgbox

0 не надо. Нужен 1

Автор - RAN
Дата добавления - 03.11.2017 в 21:23
RAN Дата: Пятница, 03.11.2017, 21:26 | Сообщение № 14
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Цитата
Выполнение макроса после Workbook_SheetCalculate

На мой взгляд, сие название полностью искажает суть вопроса. Ибо после каждого Workbook_SheetCalculate макрос отлично выполняеися.


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Цитата
Выполнение макроса после Workbook_SheetCalculate

На мой взгляд, сие название полностью искажает суть вопроса. Ибо после каждого Workbook_SheetCalculate макрос отлично выполняеися.

Автор - RAN
Дата добавления - 03.11.2017 в 21:26
InExSu Дата: Пятница, 03.11.2017, 21:30 | Сообщение № 15
Группа: Друзья
Ранг: Ветеран
Сообщений: 648
Репутация: 96 ±
Замечаний: 0% ±

Excel 2010, 365
Нужен 1

[vba]
Код
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
    If Sh.Name = ActiveSheet.Name Then MsgBox Sh.Name
End Sub
[/vba]


Разработчик Битрикс24 php, Google Apps Script, VBA Excel Windows/Mac
 
Ответить
Сообщение
Нужен 1

[vba]
Код
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
    If Sh.Name = ActiveSheet.Name Then MsgBox Sh.Name
End Sub
[/vba]

Автор - InExSu
Дата добавления - 03.11.2017 в 21:30
nilem Дата: Пятница, 03.11.2017, 21:42 | Сообщение № 16
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
принудительно выполнять пересчет (Application.Calculate) и затем обновлять форму - тоже не?


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениепринудительно выполнять пересчет (Application.Calculate) и затем обновлять форму - тоже не?

Автор - nilem
Дата добавления - 03.11.2017 в 21:42
RAN Дата: Пятница, 03.11.2017, 21:44 | Сообщение № 17
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
При чем тут ActiveSheet? На каком/каких листах будет пересчет, не известно.
Если бы все было так просто, я бы этого вопроса не задавал.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеПри чем тут ActiveSheet? На каком/каких листах будет пересчет, не известно.
Если бы все было так просто, я бы этого вопроса не задавал.

Автор - RAN
Дата добавления - 03.11.2017 в 21:44
RAN Дата: Пятница, 03.11.2017, 21:45 | Сообщение № 18
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
тоже не?

А как понять, что пересчет закончился?
И чем будет отличаться принудительный пересчет от пересчета по Worksheet_Change, возникщего после передачи данных на лист?
Или, даже не после Worksheet_Change, а просто после изменения исходных данных в формуле.


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Пятница, 03.11.2017, 21:50
 
Ответить
Сообщение
тоже не?

А как понять, что пересчет закончился?
И чем будет отличаться принудительный пересчет от пересчета по Worksheet_Change, возникщего после передачи данных на лист?
Или, даже не после Worksheet_Change, а просто после изменения исходных данных в формуле.

Автор - RAN
Дата добавления - 03.11.2017 в 21:45
nilem Дата: Пятница, 03.11.2017, 22:04 | Сообщение № 19
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Собственно, Worksheet_Change -> автоматически происходит пересчет (неважно, сколько листов при этом задействованы) -> все, обновляем форму.
Если формул очень-очень много, можно поставить задержку после передачи данных на лист.


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеСобственно, Worksheet_Change -> автоматически происходит пересчет (неважно, сколько листов при этом задействованы) -> все, обновляем форму.
Если формул очень-очень много, можно поставить задержку после передачи данных на лист.

Автор - nilem
Дата добавления - 03.11.2017 в 22:04
InExSu Дата: Пятница, 03.11.2017, 22:15 | Сообщение № 20
Группа: Друзья
Ранг: Ветеран
Сообщений: 648
Репутация: 96 ±
Замечаний: 0% ±

Excel 2010, 365
Если бы все было так просто

На приложенном Вами файле мой код работает по Вашему ТЗ?


Разработчик Битрикс24 php, Google Apps Script, VBA Excel Windows/Mac
 
Ответить
Сообщение
Если бы все было так просто

На приложенном Вами файле мой код работает по Вашему ТЗ?

Автор - InExSu
Дата добавления - 03.11.2017 в 22:15
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Запуск макроса после Workbook_SheetCalculate 1 раз (Макросы/Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!