Страницы: 1 2 След.
RSS
Как приостановить выполнение макроса VBA, чтобы процессор был не занят, VBA макрос как сделать паузу в приложении
 
Здравствуйте.
У меня такая проблема: я запуская в Excel макрос, он выполняется долго и мой кулер не справляется с охлаждением. В результате процессор перегревается и комп зависает. Мне нужно в коде вставить в цикле оператор (команду ?), которая приостановит работу макроса на 2 минуты и затем продолжит выполнение дальше. На компе работает только это приложение. Метод 'Application.Wait' не подходит - во время этой паузы процессор не охлаждается (проверено), а значит почему-то не разгружается во время паузы, вызванной 'Application.Wait'.
 
Приходится разбивать главный цикл и запускать вручную каждые минут 10, делая паузу (за это время проц охлаждается)
 
Думаю, что лучше будет переделать (оптимизировать) макрос, а не костыли придумывать. Что-бы макрос намертво вешал комп - это явно перебор.
Переходите вместо работы с ячейками листов на массивы/словари/коллекции, отключайте пересчет листов/обновление экрана и прочее, прочее, прочее...
Изменено: Sanja - 24.11.2016 19:26:38
Согласие есть продукт при полном непротивлении сторон
 
Если прям остановить надо - в циклы добавляйте строку DoEvents, тогда код можно будет прервать по Ctrl+Pause(Break). Но это тот еще метод - он в некоторых случаях может привести к ошибочному выполнению кода в дальнейшем.
Ну и оптимизация кода тоже никому не мешала - не помню я таких кодов, чтобы вешали ПК намертво(если это не 386, конечно) :)
Вот, здесь я выкладывал краткие рекомендации: Как ускорить и оптимизировать код VBA
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Думаю, надо не паузу ставить, а макрос переписывать
Показывайте код, — тогда будут более конкретные советы
 
Но переделка кода - не в этой теме.
 
По мне так надо продуть корпус от пыли. Может быть сменить термопасту, а может быть перейти на жидкостное охлаждение...
Если автоматизировать бардак, то получится автоматизированный бардак.
 
Дело не в макросе, все там нормально. Комп вешается и от других прог, которые грузят проц - например перекодировщик видео. Кулер не справляется. Да, нужно менять железо - но ведь вопрос не в этом. По существу кто-то может знает ? Нету такой возможности в программе сделать паузу ?
 
Цитата
wowick написал:
По мне так надо продуть корпус от пыли. Может быть сменить термопасту, а может быть перейти на жидкостное охлаждение...
Поменял кулер, купил новый, и термопаста естессно. Стал вешаться реже. Похоже проц надо менять и т.д.и т.п. Мой вопрос не в этом - то, что покупка нового компа решит мою проблему я как бы и сам догадываюсь
Изменено: Mirage74 - 24.11.2016 19:48:39
 
Цитата
Mirage74 написал: По существу кто-то может знает ?
т.е. читать все ответы Вы не стали?
Изменено: The_Prist - 24.11.2016 20:29:29
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Проц сильно грузится думаю из-за постоянного открытия-закрытия файлов. Но мой вопрос не в том, почему он грузится и нагревается.
 
Ну как знаете
Цитата
The_Prist написал: Если прям остановить надо - в циклы добавляйте строку DoEvents, тогда код можно будет прервать по Ctrl+Pause(Break).
Согласие есть продукт при полном непротивлении сторон
 
Смысл в том, чтобы я запустил макрос, и уехал по делам. А он сам себе паузы делает и дальше работает ))
 
Кнопка цитирования не для ответа [МОДЕРАТОР]

Цитата
The_Prist написал: Вот, здесь я выкладывал краткие рекомендации:  Как ускорить и оптимизировать код VBA
Вопрос был есть ли такая функция/метод а Вы мне ссылку даете на курс по оптимизации программирования ) Наверняка кстати полезная, как мне показалась на первый взгляд, обязательно изучу, спасибо
 
Вы в полуторку грузите 5 тонн и спрашиваете, почему она не едет...
 
Mirage74, я понимаю что Вас не переубедить, но все-же...
Цитата
Mirage74 написал: Проц сильно грузится думаю из-за постоянного открытия-закрытия файлов.
КАК ПОЛУЧИТЬ ДАННЫЕ ИЗ ЗАКРЫТОЙ КНИГИ?
Согласие есть продукт при полном непротивлении сторон
 
Цитата
vikttur написал:
Вы в полуторку грузите 5 тонн и спрашиваете, почему она не едет...
Ну я вот иногда поражаюсь таким "ответчикам" на форумах. Был задан конкретный вопрос: Существует ли такой-то метод. Подразумеваются варианты ответов: 1) да, такой-то. 2) не существует. А получаешь ответ в стиле: 'ты все неправильно делаешь и делай по-другому'
 
Цитата
Mirage74 написал:
А он сам себе паузы делает
изучайте OnTime. Но для этого придется разбивать одну процедуру на несколько. Или, если в цикле нельзя прерывать счетчик - то с определенным шагом запоминать счетчик и выходить из процедуры, а запускать потом опять же по OnTime.
Цитата
Mirage74 написал:
Вопрос был есть ли такая функция/метод а Вы мне ссылку даете
потому что код Ваш мы не видим и что там у Вас - не знаем. А Ваши слова это лишь слова и не факт, что код не имеет отношения к загрузу проца. Ну и может стоит учесть тот факт, что я и на поставленный изначально вопрос ответил и Ваших последующих пока не видел. А именно в них Вы написали, что код якобы не причастен к загрузу. Хотя 99% случаев такие проблемы вызваны как раз неоптимальным кодом. Можете и дальше спорить - без Вашего кода истина так и останется неизвестной :)

P.S. Сравнивать макрос и перекодировщик видео - вообще маразм. Перекодировщики как раз загружают процы по полной, они в большинстве именно так и реализованы. Особенно, если нет отдельной видеокарты. Так что пример очень неудачный. Если бы написали, что музыкальный проигрыватель вешает - это да, тогда можно было тут подумать о проблемном железе...
Изменено: The_Prist - 24.11.2016 20:50:50
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Sanja написал:
Mirage74 , я понимаю что Вас не переубедить, но все-же...
Цитата Mirage74  написал: Проц сильно грузится думаю из-за постоянного открытия-закрытия файлов. КАК ПОЛУЧИТЬ ДАННЫЕ ИЗ ЗАКРЫТОЙ КНИГИ?
Я ценю Ваши ответы, и уже читаю кстати про оптимизацию кода - очень полезная и доступная инфа. Но обращаю внимание: Комп подвисает от перегрева проца не из-за тормознутого макроса, а из-за аппаратного обеспечения. Это происходит и в другими прогами, грузящими сильно проц. Несомненно, я смогу оптимизировать свой код. Это займет время, и не факт, что он успеет выполниться до перегрева проца. Меня устраивает протестированный и работающий сейчас код, пусть и медленный, т.к.за неделю я получу нужные мне результаты его работы, а на оптимизацию затрачу, возможно, больше. Возможно кто-то напишет я так понимаю напрашивающийся ответ ?
"Такой возможности (приостановить работу макроса, чтобы проц не был загружен, на некоторое время) не существует, либо мне об этом неизвестно. "
Вот и все.
 
Цитата
Mirage74 написал: другими прогами, грузящими сильно проц
Еще раз: не путайте проги, намеренно вешающие проц и макросы, которые это делают только в случае своей неоптимальности.
Цитата
Mirage74 написал: Возможно кто-то напишет я так понимаю напрашивающийся ответ ?
Будете читать ответы полностью - получите ответ.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Mirage74 написал: Ну я вот иногда поражаюсь таким "ответчикам" на форумах
Взаимно.
Предложили:
- оптимизация кода;
- DoEvents, тогда код можно будет прервать по Ctrl+Pause(Break);
- КАК ПОЛУЧИТЬ ДАННЫЕ ИЗ ЗАКРЫТОЙ КНИГИ?
Ничего не подходит. Ответ:
Цитата
...не из-за тормознутого макроса, а из-за аппаратного обеспечения
Закрывайте другие приложения, берите веер и махайте им над процессором, суньте комп в холодильник :)
Ну, действительно - что Вы хотите от форума по Excel?
 
Цитата
The_Prist написал:
Еще раз: не путайте проги, намеренно вешающие проц и макросы, которые это делают только в случае своей неоптимальности.
Еще раз: если бы комп вешался из-за неоптимального макроса, то он не вешался бы из-за других программ, сильно грузящих проц (перекодировка видео, некоторые флэш-игры). А он вешается. И эти проги не вешают НАМЕРЕННО комп. На других работают нормально.  Делаем вывод: 1) хоть макрос и далеко не оптимален, проблема не в этом. Смотрим постановку вопроса.
Изменено: Mirage74 - 24.11.2016 21:08:57
 
Цитата
Смотрим постановку вопроса...
Подразумеваются варианты ответов: 1) да, такой-то. 2) не существует.
Конкретный ответ - если предложенные варианты отметаются - никак.
 
спасибо за конкретный ответ
 
Цитата
Mirage74 написал:  Смотрим постановку вопроса.
Ага. Смотрим ответы, которые Вам дают. Один раз ответил - проигнорировали прямой ответ и зацепились за оптимизацию(про которую я, кстати, лишь намекнул как один из вариантов, но не основное решение - "Ну и оптимизация кода тоже никому не мешала". Т.е. это вроде как дополнение и намек). Второй раз ответил - Вы опять игнорируете и продолжаете какие-то решения выпрашивать, не указав чем предложенное в сообщении #18 не устроило...

Цитата
Mirage74 написал: проблема не в этом
Вам виднее. Я не спорю. Я отвечаю ровно на то, что Вы пишите. Если Вы пишите, что
Цитата
Mirage74 написал: прогами, грузящими сильно проц
т.е. это читается как: он нагревается во всех программах, которые грузят проц. И это логично. Но верная формулировка-то, наверное, тогда такая должна быть: проц грузится и на других простых программах - просмотр флэш(в чем, кстати), пасьянс косынка и т.д. Но не перекодировщик же видео :)
Изменено: The_Prist - 24.11.2016 21:19:03
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
vikttur написал:
- оптимизация кода;
- DoEvents, тогда код можно будет прервать по Ctrl+Pause(Break);
- КАК ПОЛУЧИТЬ ДАННЫЕ ИЗ ЗАКРЫТОЙ КНИГИ?
Вопрос был "как сделать паузу в приложении, ....."
Ни один из перечисленный Вами ответов не был ответом на мой вопрос. Хотя несомненно содержал полезную информацию.
 
Цитата
The_Prist написал:
Mirage74  написал:
Смотрим постановку вопроса.Ага. Смотрим ответы, которые Вам дают. Один раз ответил - проигнорировали прямой ответ и зацепились за оптимизацию(про которую я, кстати, лишь намекнул как один из вариантов, но не основное решение - "Ну и оптимизация кода тоже никому не мешала". Т.е. это вроде как дополнение и намек). Второй раз ответил - Вы опять игнорируете и продолжаете какие-то решения выпрашивать, не указав чем предложенное в сообщении  #18  не устроило...

Цитата Mirage74  написал:
проблема не в этомВам виднее. Я не спорю. Я отвечаю ровно на то, что Вы пишите. Если Вы пишите, что Цитата Mirage74  написал:
прогами, грузящими сильно процт.е. это читается как: он нагревается во всех программах, которые грузят проц. И это логично. Но верная формулировка-то, наверное, тогда такая должна быть: проц грузится и на других простых программах - просмотр флэш(в чем, кстати), пасьянс косынка и т.д. Но не перекодировщик же видео

Изменено: The_Prist  - 24 Ноя 2016 21:15:02
Прошу прощения, этот пост я действительно почему-то пропустил. Ontime вполне может помочь решить мою проблему. А комп вешает, например, когда жена играет в одноклассниках в какую-то игру, где разные фигурки падают и она их как-то стыкует. А от перекодировщика видео раньше комп не падал, когда был моложе )
Спасибо за реально полезную инфо.
 
Правила, пункт об излишнем цитировании.
 
Mirage74, WaitMessage:
http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=8&TID=44143&TITLE_SEO=44143&MID=369574#message369574
http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=47245&TITLE_SEO=47245-otobrazhenie-vydelennoy-yacheyki-v-drugoy-yacheyke&MID=392732#message392732
Изменено: Казанский - 24.11.2016 23:16:54
 
Цитата
Казанский написал: WaitMessage:
Спасибо ! Но помогает, к сожалению, незначительно. При работе моего макроса 4-ядерный процессор загружен таким образом: 1, 3 и 4 ядра где-то между 45-55%, а 2-е ядро на 80-90%. Когда дело доходит до цикла для паузы с использованием WaitMessage, происходит следующее: 1, 3 и 4 ядра отдыхают, загрузка по2-10%, а 2-е ядро продолжает впахивать за всех, загрузка на 90-100%. В результате температура процессора, которую я наблюдал во время работы цикла, снизилась только на 2 градуса за 2 минуты, с 71 до 69. Возможно я неправильно использую эту функцию ? У меня самый простой цикл:
Код
newMinute = Minute(Now())
If newMinute < 58 Then
  While newMinute + 2 > Minute(Now())
      WaitMessage
  Wend
End If
Изменено: Mirage74 - 25.11.2016 11:13:47
Страницы: 1 2 След.
Читают тему
Наверх