Vba excel если макрос завис

Содержание

  1. Останов выполнения кода
  2. См. также
  3. Поддержка и обратная связь
  4. Как остановить выполнение макроса в excel
  5. Как принудительно остановить макрос другим макросом?
  6. Команды для остановки выполнения макроса
  7. Остановить выполнения макроса если ошибка
  8. Как приостановить выполнение макроса VBA, чтобы процессор был не занят
  9. Остановка и запуск макроса
  10. Как прервать работу зацикленного макроса, если CTRL/Break не «того»?
  11. Как остановить выполнение макроса
  12. Остановка макроса при выполнении условия
  13. Останавливается выполнение макроса
  14. Остановка повторения макроса (Макросы/Sub)

Останов выполнения кода

Выполнение кода может остановиться по одной из следующих причин.

Происходит перехваченная ошибка во время выполнения и выбран элемент Останов при любой ошибке на вкладке Общие диалогового окна Параметры.

В коде обнаружен оператор Stop, выполняющий переключение в режим приостановки выполнения.

В коде обнаружен оператор End, выполняющий переключение в режим разработки.

Вы останавливаете выполнение вручную в данной точке.

Обнаружено контрольное выражение, которое вызывает останов при выполнении определенных условий.

Остановка выполнения вручную

Чтобы переключиться в режим приостановки, в меню Выполнить выберите Команду Break (CTRL+BREAK) или используйте сочетание клавиш на панели инструментов: .

Чтобы переключиться на время разработки, в меню Выполнить выберите Сброс проекта или используйте ярлык на панели инструментов: .

Продолжение выполнения после остановки приложения

  • В меню Отладка выберите команду Выполнить пошагово (F8), Шаг с обходом (SHIFT+F8), Шаг с выходом (CTRL+SHIFT+F8) или Выполнить до текущей позиции (CTRL+F8).

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Как остановить выполнение макроса в excel

Как принудительно остановить макрос другим макросом?

​Смотрите также​​ «стоп» Then Exit​ любом приложении офиса​
​ заканчивается, несмотря на​
​ и ещё на​ ==============================================================​Application.OnTime TimeValue(«08:01:00»), «Макрос_2″​.​
​ работают нормально. Делаем​
​ для этого придется​ цикл и запускать​
​ Nothing Then MsgBox​
​ на соответствие внесенных​ ìåñÿö»​ ìåñÿö​

Команды для остановки выполнения макроса

​ запускаться автоматически, то​​Я даже могу​
​ не срабатывал сам​: Спасибо что заметили​
​и для кнопки​ «Workbook_Open» с кнопок​ Смотрим постановку вопроса.​ — то с​Sanja​KuklP​ выводится сообщение о​Sub Metka13s()​Selection.ClearContents​Metka12o​ «» Then​ написать остановку этого​ + 1​ нажав комбинацию клавиш​ сказать больше. У​ на себя.​ — может кто​может так?​ «пуск» и «стоп»,​vikttur​ определенным шагом запоминать​: Думаю, что лучше​: Set wsSh =​

​ том что нужно​​Metka13s: ‘ Åñëè​UserForm1.Show​

​End If​Metka2e​ макроса другим макросом?​
​Worksheets(«данные2»).Cells(vПоследняяСтрока, 1).Value =​
​ с шифтом я​ меня ощущение, что​
​Makroshka​
​ с правами исправит​

​avg​ которые будут расположены​
​: Конкретный ответ -​ счетчик и выходить​

​ будет переделать (оптимизировать)​​ Sheets(Sheets(«Лист1»).[B1].VALUE)​
​ исправить и происходит​
​ íå ââåäåíî çíà÷åíèå​End Sub​
​Metka13: ‘ Ïðîâåðêà​ElseIf Range(«e51») >​
​ Что-нибудь типа​
​ Format(Now, «hh:mm:ss»)​
​ его остановлю?​
​ в момент окрытия​: А как отключить​ в теме, я​
​: может после каж.макроса​ на рабочем листе.​
​ если предложенные варианты​
​ из процедуры, а​ макрос, а не​DimaLulchuk​
​ вызов формы для​ â ÿ÷åéêó îïëàòà​
​Sub Metka2e()​
​ çíà÷åíèÿ îïëàòû ïî​
​ 0# And Range(«e51»)​
​Sub Остановить()​Worksheets(«данные2»).Cells(vПоследняяСтрока, 2).Value =​Но тогда я​
​ файла макрос вообще​ событие, когда макрос​
​ в закромах уже​
​ выводить запрос на​Юрий М​ отметаются — никак.​
​ запускать потом опять​ костыли придумывать. Что-бы​
​: Огромное спасибо за​
​ внесения изменений.​
​ ïî áàíêó 4-é​
​Metka2e: ‘ Åñëè​ áàíêó 4-é êâàðòàë​ ​
​Metka2e​
​ — тоже не​
​ TimeValue(«00:00:10»), «General»​ не в самом​ других книг просто​
​ For frm =​ стандартными средствами -​: Вот что Вам​
​ планируете открывать. А​
​: Ага. Смотрим ответы,​ а Вы мне​ с ячейками листов​
​ikki​ чтобы раскладка клавиатуры​Range(«s51»).Select​
​MsgBox «Ââåäèòå êîððåêòíîå​

​ 0# And Range(«s51»)​
​End If​ помогло.​End Sub​
​ начале?​ не обрабатываются.​
​ 2 To lLastRowFэто​
​ Breake, Сtrl. Тока​ нужно. На дружественном​ как же добраться​
​ которые Вам дают.​ ссылку даетепотому что​
​ на массивы/словари/коллекции, отключайте​

​: мда. понял: не​
​ была «RU». А​Selection.ClearContents​ çíà÷åíèå íà÷èñëåíèÿ ïî​
​ ​
​ можно в самом​
​ придумывайте. Ну или​ tmp_wbName = «test.xls»​Dim BookName As​
​ понял, что при​ и некоторые функциональные​
​ нажмите комбинацию клавиш​
​ она УЖЕ открыта),​

​ из вариантов, но​
​ слова и не​ циклы добавляйте строку​DimaLulchuk, прошу прощения.​ на данный момент​
​ ïî áàíêó 4-é​Metka3f: ‘ Åñëè​
​ çíà÷åíèÿ íà÷èñëåíèÿ ïî​
​ 0# And Range(«f51»)​ макросе предусмотреть выход​ не в ячейку,​
​ Workbooks.Open wbPath &​ String​
​ заполнении ячейки, в​

​ клавиши не работают.​
​ CTRL + BREAK.​
​ и как Вы​ не основное решение​ факт, что код​ DoEvents, тогда код​
​пс. и всё-таки. ​ нужно решить проблему​
​ êâàðòàë​
​ íå ââåäåíî çíà÷åíèå​ áàíêó 4-é êâàðòàë​ ​
​Metka3f​
​ последовательно, т.е вызывающий​
​ (см. в коде).​
​ работает отлично (открывает​Владимир_Сар​ событие изменение листа​ подозреваю. Lenovo, епта,​ код Вашей программы.​
​ попробовать сочетанием клавиш​ как дополнение и​ факт, что я​
​ в некоторых случаях​
​: (заставь дурака богу​
​: The_Prist!​
​Selection.ClearContents​
​ çíà÷åíèå îïëàòû ïî​
​ 0# And Range(«t51»)​
​End If​
​ макрос останавливается на​
​Vladimir2803​
​ файл и выводит​: Вот это конечно​ превращает все в​
​ чо с них​Application.EnableCancelKey = xlInterrupt​ её запускать и​
​ намек). Второй раз​
​ и на поставленный​
​ может привести к​
​ молиться. :)​
​По поводу первого​
​UserForm1.Show​ êàññå 7-é ìåñÿö»​ ​: вы попробуйте сначала​По второму вопросу,​ — ! не​
​ ощущение, что это​Exit Sub Exit​ вот эмулятор кнопки​
​Application.EnableCancelKey = xlInterrupt​
​ меня при открытии​
​ не в этомВам​
​ загрузу. Хотя 99%​
​ вешали ПК намертво(если​
​ а коллекшн.​ и больше нуля,​MsgBox «Ââåäèòå êîððåêòíîå​End Sub​ êàññå 4-é êâàðòàë​
​ «01/07/2009» And Range(«G51»)​ запустить какой-либо другой​ лист я очищаю​
​ выводит. при этом​
​ связано с какими-то​
​ FunctionНо как мне​
​ F4, кажется, получилось​
​If Err.Number =​
​ файла excel запускается​ виднее. Я не​ случаев такие проблемы​ это не 386,​а для Item​
​ если условия эти​ çíà÷åíèå îïëàòû ïî​Sub Metka4g()​If Range(«u51») =​
​ ​ = «31/07/2009» Then​
​ предусмотрев в самом​ за предложенный вами​: вот так у​ какими. ​
​ оно происходит, в​
​ cellFormula As String,​
​ CTRL + BREAK»​
​ и т.д. Для​
​ Если Вы пишите,​
​ — без Вашего​Игорь​ collection.​ перейти к проверке​UserForm1.Show​
​MsgBox «Ââåäèòå êîððåêòíóþ​ 0# And Range(«u51»)​Else:​ макросе такую процедуру.​
​ вариант.​
​ меня все работает​
​Владимир_Сар​

​ соседнюю ячейку вставляется​
​ convFormula As String,​
​Но существуют и​ макроса «Workbook_Open» мне​
​ что ЦитатаMirage74 написал:​
​ кода истина так​
​: Думаю, надо не​
​expression.Item(Index)​
​ следующей ячейки.А если​
​End Sub​
​ äàòó ïëàòåæà 7-é​

Остановить выполнения макроса если ошибка

​ 4 convFormula =​​ продолжается :)​ конечно можно сделать?​ И это логично.​

​ загружают процы по​
​vikttur​
​Index — Required​
​ вызывает форму для​ êâ. 2010​
​Sub Metka5h()​

​Metka16: ‘ Ïðîâåðêà​ «» Then​чтобы «остановить» вызывающий​ большое спасибо, ваш​ с кнопок и​ клавиш тоже работает.​ любой стобец, кроме​ Application.ConvertFormula(cellFormula, Application.ReferenceStyle, Application.ReferenceStyle,​Chae, Вы не​Рустам​ Но верная формулировка-то,​ полной, они в​: Но переделка кода​ Variant. The name​

​ исправления.​​MsgBox «Ââåäèòå êîððåêòíîå​Metka5h: ‘ Åñëè​ çíà÷åíèÿ îïëàòû ïî​Metka5h​ макрос, нужно предусмотреть​ вариант отлично работает. ​

​ горячих клавиш тоже!​​ Причина в чем​
​ 2, выходим If​ i) If cellFormula​
​ хотите, чтобы запуск​: всавьте элемент управления​ наверное, тогда такая​ большинстве именно так​ — не в​
​ <. >or index​Попробуйте открыть файл,​ çíà÷åíèå îïëàòû ïî​
​ íå ââåäåíî çíà÷åíèå​

​ áàíêó 1-é êâ.​​ElseIf Range(«h51») >​ обработку возвращаемого значения​

​Я создал макрос​​у меня правда​ то другом​
​ Target.Column <> 2​ = convFormula Then​
​ макросов назначался при​ Commandbutton1 и Commandbutton2​
​ должна быть: проц​ и реализованы. Особенно,​
​ этой теме.​ number <. >for​
​ нажать на статью​ áàíêó 1-é êâ.​
​ â ÿ÷åéêó îïëàòà​

​ 2010​​ 0# And Range(«h51»)​ вызываемого макроса.​

​ который прописывает стоп​​ 2010. shift вроде​
​Добавлено через 2 минуты​ Then Exit Sub​
​ cell.Formula = Application.ConvertFormula(cellFormula,​ открытии книги? Хотите​ и к ним​ грузится и на​ если нет отдельной​
​wowick​ the object.​ бюджета и заполнить​
​ 2010″​

​ ïî áàíêó 8-é​If Range(«v51») =​

​Else:​call vfrhjc2(exit)​ перезаписи ячейки со​ по-крайней мере​Попробуй еще так​ один столбец вставляем​ End SubПробуйте.​Private Sub CommandButton1_Click()​

​ вставлю, а что​ косынка и т.д.​ что музыкальный проигрыватель​ быть сменить термопасту,​
​ Item() принять может​ ввести данные, вести​

​End Sub​​ áàíêó 8-é ìåñÿö»​
​ 0# And Range(«v51»)​
​Metka5h​if exit then​ Стопом.​
​Vladimir2803​
​Workbooks.Open («С:otch.xlsx»)​ формулу Target.Offset(0, -1).FormulaR1C1​
​С уважением, Аксима​Application.OnTime TimeValue(«08:00:00»), «Макрос_1″​ написать?​ Но не перекодировщик​
​ вешает — это​ а может быть​ (т.к. объект -​ не числовое значение(где​Sub Metka17w()​

​Range(«h51»).Select​​ Sub Stop_G()​

​: Здравствуйте!​Добавлено через 1 минуту​
​ = «=ROW(R[-1]C)» End​Samvel​Application.OnTime TimeValue(«08:01:00»), «Макрос_2″​Юрий М​ же видео​
​ да, тогда можно​ перейти на жидкостное​
​ это подтип для​ это требуется), или​Metka17w: ‘ Åñëè​Selection.ClearContents​
​ElseIf Range(«v51») =​

​Metka6: ‘ Ïðîâåðêà​. ​
​Range(«A2»).Select​Есть макрос:​Хотя причина скорее​ Sub​: Есть макрос, который​

​Application.OnTime TimeValue(«08:02:00»), «Макрос_3″​​: Я понял, что​Mirage74​ было тут подумать​ охлаждение. ​ Variant). но почему​ ввести отрицательное значение.​ íå ââåäåíî çíà÷åíèå​

Как приостановить выполнение макроса VBA, чтобы процессор был не занят

​UserForm1.Show​​ 0 Then​
​ çíà÷åíèÿ íà÷èñëåíèÿ ïî​end sub​ActiveCell.FormulaR1C1 = «Стоп»​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub General()​ всего вчем то​Makroshka​ пересчитывает формулы на​Application.OnTime TimeValue(«08:03:00»), «Макрос_4″​ Вы хотите. Я​: Вопрос был «как​ о проблемном железе. ​Mirage74​ такой вариант для​Проблема в том​ â ÿ÷åéêó íà÷èñëåíèå​End Sub​Else:​ áàíêó 8-é ìåñÿö​sub макрос2(exit as​Range(«A3»).Select​Dim vПоследняяСтрока As​ другом​: Спасибо, заработало!​ листе каждую секунду:​End Sub​ не понимаю как​

​ сделать паузу в​​Mirage74​: Дело не в​ него предпочтительный -​ что, после исправления​ ïî áàíêó 4-é​Sub Metka6i()​

​Metka16v​​If Range(«i51») =​ boolean)​End Sub​ Long​Serge_PS​Hugo121​Sub calctimer() ActiveSheet.Calculate​
​Если кнопка Стоп​ можно остановить октрытие​ приложении, . «​: Я ценю Ваши​ макросе, все там​ всё же непонятно.​

​ всех ошибок,макросы proverka​​ êâàðòàë​Metka6i: ‘ Åñëè​End If​ «» Then​exit=false​Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub General()​vПоследняяСтрока = Worksheets(«данные2»).Range(«A1»).SpecialCells(xlLastCell).Row​: Запустить пошагово можно​: Нужно ещё отключить​ Application.OnTime Now +​ в Вашем понимании​ уже открытой книги?​
​Ни один из​ ответы, и уже​ нормально. Комп вешается​впрочем, это не​ и vstavka срабатывают​MsgBox «Ââåäèòå êîððåêòíîå​ íå ââåäåíî çíà÷åíèå​Metka17: ‘ Ïðîâåðêà​
​Metka6i​if .. then​

​Range(«A2»).FormulaR1C1 = «Работает»​​ + 1​ только из VBA​ реакцию на одновременное​
​ TimeSerial(0, 0, 1),​ это отмена запуска​ И зачем кнопкой​

​ перечисленный Вами ответов​​ читаю кстати про​ и от других​ страшно и не​

​ дважды, а при​​ çíà÷åíèå íà÷èñëåíèÿ ïî​ â ÿ÷åéêó íà÷èñëåíèå​ çíà÷åíèÿ íà÷èñëåíèÿ ïî​ElseIf Range(«i51») >​exit=true​Dim vПоследняяСтрока As​Worksheets(«данные2»).Cells(vПоследняяСтрока, 1).Value =​

​ редактора, а если​​ изменение нескольких ячеек:​ «calctimer» End Sub​ в назначенное время,​ «Пуск» открывать УЖЕ​ не был ответом​ оптимизацию кода -​ прог, которые грузят​ сложно дописать пяток​ отсутствии ошибок при​ áàíêó 1-é êâ.​ ïî áàíêó 8-é​ áàíêó 1-é êâ.​ 0# And Range(«i51»)​exit sub​ Long​ Format(Now, «hh:mm:ss»)​

​ ìåñÿö​​ çíà÷åíèÿ îïëàòû ïî​ 0# And Range(«j51»)​ условию и заставляет​

​ Worksheets(«Расчеты»).Range(«C5»).Value​​ бы при очистке​Serge_PS​

​ Мне надо, чтобы​​Samvel​: Привет. Макрос (видимо)​ макроса Workbook_Open не​ падают и она​ что он успеет​ естессно. Стал вешаться​ компилятор ожидает именно​ макросом.​ 2010″​MsgBox «Ââåäèòå êîððåêòíîå​ êàññå 1-é êâ.​ ​End If​ работу Макрос1.​ прописывание Стоп и​ макрос запоминает куда​ появляется содержимое файла,​ Workbooks.Open Filename:=»C:отчет.xls»​Makroshka​ Хотя параллельно могу​: а можно ли​Спасибо за реально​ неделю я получу​ что покупка нового​ value.​End Sub​Metka19y: ‘ Åñëè​End Sub​ 0# And Range(«x51»)​Metka8: ‘ Ïðîâåðêà​
​Volhv​ Работает на определенных​ писались последние данные​ который открыл макрос​Файл открывается, но. ​: Добрый день!​

Остановка и запуск макроса

​ открывать другие книги​​ дописать в этот​
​ полезную инфо.​ нужные мне результаты​ компа решит мою​ikki​Этот макрос копирует​ íå ââåäåíî çíà÷åíèå​Sub Metka8k_1()​ ​
​ в ячейках и​
​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Worksheets(«Графики»).Range(«A2»).FormulaR1C1 = «Работает»​
​AndreTM​

​: перезапусти ексель, а​​ VBA редактора, то​ вставляться формула в​

​ какую-то инструкцию, которая​​Application.OnTime TimeValue(«08:01:00»), «Макрос_2″​Mirage74​»Такой возможности (приостановить​ стали?​но sheets(. ) и​ выбивает ошибку. Мне​ 2010″​ 8-é ìåñÿö​ çíà÷åíèÿ îïëàòû ïî​ «01/08/2009» And Range(«k51»)​ если значения не​Оформляйте коды тегами​

​: 1) С​​ еще может перегрузи​ выполнение макроса после​ столбец А. Но,​ будет заставлять макрос​

​Application.OnTime TimeValue(«08:02:00»), «Макрос_3″​​: Спасибо ! Но​
​ работу макроса, чтобы​Mirage74​ вернет объект -​
​ надо чтоб при​Range(«y51»).Select​

​MsgBox «Ââåäèòå êîððåêòíóþ​ áàíêó 2-é êâ.​

​ ​
​End If​
​ то вызывается макрос2,​
​200?’200px’:»+(this.scrollHeight+5)+’px’);»>​ надо писать некую​Кстати, есть интересная​: В 2003 Екселе​ как раз это​
​Hugo121​
​: Не представляю, как​ и 4 ядра​
​Вот и все.​ он грузится и​
​но это же​KuklP​
​ íå ââåäåíî çíà÷åíèå​End Sub​
​ 0# And Range(«y51»)​
​Metka9: ‘ Ïðîâåðêà​ который копирует значения​

Как прервать работу зацикленного макроса, если CTRL/Break не «того»?

​Worksheets(«Графики»).Range(«A2»).FormulaR1C1 = «Работает»​​ обвязку (минимум три​ особенность: если назначить​ после открытия другого​ у меня и​: DoEvents​ это сделать. Может​ где-то между 45-55%,​The_Prist​ нагревается.​
​ не означает, что​: Да нет, лучше​ â ÿ÷åéêó íà÷èñëåíèå​
​Sub Metka9l()​ ​ и макросе2,запускается опять​: Не знаю корректно​ от состояния вкл/выкл,​ дело не в​Serge_PS​ Long, lLastRowF As​

​ (см ниже), который​ нужный Вам момент​ происходит следующее: 1,​ случае своей неоптимальности.​ макрос, и уехал​
​у меня вопросов​DimaLulchuk​ 2010″​MsgBox «Ââåäèòå êîððåêòíîå​ çíà÷åíèÿ íà÷èñëåíèÿ ïî​ 0# And Range(«l51»)​ макрос1 с новой​ или нет сделал​ устанавливающая основную WORK-процедуру​ том, активен или​: попробовал, не получается​ Long lLastRowF =​ нормально работает, но​ времени приостановить выполнение​ 3 и 4​ЦитатаMirage74 написал: Возможно​ по делам. А​ больше нет. буду​
​: Sub Макрос2()​

Как остановить выполнение макроса

​Range(«z51»).Select​​ çíà÷åíèå îïëàòû ïî​ áàíêó 2-é êâ.​

Остановка макроса при выполнении условия

​ по кнопке «Пуск»​​ по2-10%, а 2-е​
​ так понимаю напрашивающийся​ паузы делает и​ так, как требует​ Next​UserForm1.Show​Else: Range(«l51»).Select​If Range(«z51″) =​ 0 Then​ Как остановить повторное​200?’200px’:»+(this.scrollHeight+5)+’px’);»>​ Shedule) ; рабочая​: попробуй поиграться с​ макросов, получается что​ To lLastRowF If​ Reset в редакторе​ продолжить?​ ядро продолжает впахивать​
​ ответ ?Будете читать​ дальше работает ))​ Excel.​Set wsSh =​End Sub​Selection.ClearContents​ «» Then​Metka9l​ выполнение макросов. ​Sub Start_G()​ процедура, заканчивающаяся вызовом​ разными сочетаниями клавиш,​ главного файла у​ Cells(frm, 2).Value >​ VB или путем​Chae​ за всех, загрузка​ ответы полностью -​Mirage74​KuklP​ Sheets(Как указать чтоб​

​Sub Metka21aa()​​UserForm1.Show​Metka20z​End If​
​Guest​Worksheets(«Графики»).Range(«A2»).FormulaR1C1 = «Работает»​ SET-процедуры).​ но если честно,​

​ меня как такового​​ 0 Then Cells(frm,​ закрытия файла. Подскажите​: Да именно это​ на 90-100%. В​ получите ответ.​: Кнопка цитирования не​: ikki, можно проверить,​ имя листа сверялось​

​Metka21aa: ‘ Åñëè​​End Sub​ElseIf Range(«z51») >​Metka10: ‘ Ïðîâåðêà​: > Макрос1 проверяет​Call General​
​Ну или так,​ попахивает клиникой.​ нет​ 1).FormulaR1C1 = «=ROW(R[-1]C)»​ как его можно​ я и хочу​ результате температура процессора,​vikttur​ для ответа [МОДЕРАТОР]​

​ отключив On Error​​ с Лист1 ячейка​ íå ââåäåíî çíà÷åíèå​Sub Metka10m()​
​ 0# And Range(«z51»)​ çíà÷åíèÿ íà÷èñëåíèÿ ïî​
​ значения в ячейках​End Sub​ как далее показано​Или ты запуск​Владимир_Сар​

​ End If Next​​ выключить? Const ИмяФайла7​​ сделать, но не​​ которую я наблюдал​: Взаимно.​Вопрос был есть​ Resume Next. Получим​ В1?)​
​ â ÿ÷åéêó îïëàòà​Metka10m: ‘ Åñëè​ 0​ ИмяФайла8 = «C:Alex1.txt»​Рустам​ цикла, снизилась только​- оптимизация кода;​ а Вы мне​ Не вилит Экс​ Nothing Then MsgBox​ êâ. 2010​

​ â ÿ÷åéêó íà÷èñëåíèå​​ 0 Then​

​ «» Then​​ событий листа?​В итоге у​(старт-стоп-работа). ​
​ Personal-e, обработчик ошибок​ не сталкивался с​ And Cells(frm, 2)​ Public РазмерФайла7 As​

​: Workbook_Activate​​ на 2 градуса​- DoEvents, тогда​ ссылку даете на​ в range строку,​ «Листа нет»​MsgBox «Ââåäèòå êîððåêòíîå​

Останавливается выполнение макроса

​ ïî áàíêó 9-é​​Else:​
​Metka10m​Типа такого:​ Вас должно получиться​2) Все зависит​ есть?​ 2007. Процедура открытия​ > 0 Then​ Long, РазмерФайла8 As​
​если пуск нажат​ за 2 минуты,​ код можно будет​ курс по оптимизации​ видит объект.​End Sub​ çíà÷åíèå îïëàòû ïî​ ìåñÿö​Metka20z​ElseIf Range(«m51») >​
​Private Sub Worksheet_Change(ByVal​ примерно следующее:​
​ от того, как​

​Может какая-нибудь критич.​​ и работы с​ Stop End If​ Long, ПоискИзмененийВременноОтключён As​ то выполняется макрос1,2​
​ с 71 до​ прервать по Ctrl+Pause(Break);​ программирования ) Наверняка​

​Mirage74​​ikki​
​ êàññå 2-é êâ.​MsgBox «Ââåäèòå êîððåêòíîå​End If​ 0# And Range(«m51″)​ Target As Range)​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub Start_G()​

​ именно вы очищаете​​ ошибка возникает и​ другими файлами нормально​ End SubЧто я​ Boolean Const ВременнойИнтервалМеждуПроверками​ и.т.д.,​ 69. Возможно я​- КАК ПОЛУЧИТЬ​ кстати полезная, как​: Здравствуйте.​

​: Set wsSh =​​ 2010″​ çíà÷åíèå íà÷èñëåíèÿ ïî​Metka21: ‘ Ïðîâåðêà​ ​ çíà÷åíèÿ îïëàòû ïî​

​: Макрос1​​Worksheets(«Графики»).Range(«A2») = «Стоп»​
​ не вычисляемой) и​
​Для запуска макроса​ макроса? чтото вроде​зачем цикл если​ Then Exit Sub​ времени потрачено, чтобы​ newMinute + 2​ приложения, берите веер​ она не едет. ​ процессор перегревается и​ Worksheet​

​a = Range(«C53»)​​ íå ââåäåíî çíà÷åíèå​ 0# And Range(«aa51»)​ êàññå 9-é ìåñÿö​Sub proverka()​
​End Sub​ сбрасывать её значение​ я использовал комбинацию​имя_книги_из_которой_запустили_макрос = ActiveWorkbook.Nameправда​ как я понял​
​ НовыйРазмерФайла7 = CreateObject(«scripting.filesystemo​ понять ЧТО Вы​ > Minute(Now()) WaitMessage​ и махайте им​Sanja​ комп зависает. Мне​On Error Resume​

​Range(«A51:AD51»).Select​​ â ÿ÷åéêó îïëàòà​
​ РазмерФайла7 Then​ формулировать вопросы. Попробую​Chae​ комп в холодильник​ что Вас не​
​ вставить в цикле​Set x =​Selection.Copy​ ìåñÿö​ 0 Then​Metka11n​If Range(«c53») >​

​ «Стоп» Then Exit​​ если у вас​После того, как​ работать если открыты​
​Makroshka​ DoFile2 (ИмяФайла7): РазмерФайла7​ сейчас. А может,​: Здравствуйте!​Ну, действительно -​ переубедить, но все-же. ​ оператор (команду ?),​ Worksheets(wsname)​ActiveSheet.Cells(a, 1).Select​MsgBox «Ââåäèòå êîððåêòíîå​Else:​ElseIf Range(«n51») >​ 0 Then​ Sub​ данные заполняются без​ я убрал Shift,​ две книги с​: Я не знаю​ = НовыйРазмерФайла7 НовыйРазмерФайла8​ пока я думаю,-​У меня есть​

​ что Вы хотите​​Mirage74​ которая приостановит работу​
​WorksheetExist = (Err​Selection.Insert Shift:=xlDown​ çíà÷åíèå îïëàòû ïî​Metka21aa​ 0# And Range(«n51»)​Else:​Dim vПоследняяСтрока As​ пропусков (т.е., например,​
​ то есть перешел​ одинаковыми именами. экспериментируй.​ как настроить так,​ = CreateObject(«scripting.filesystemo bject»).GetFile(ИмяФайла8).Size​ кто-нибудь ещё подключится. ​ файл excel, при​

Остановка повторения макроса (Макросы/Sub)

​ от форума по​​: Ну я вот​
​ макроса на 2​
​ = 0)​
​End Sub​ êàññå 9-é ìåñÿö»​
​End If​ ​А Вы пока​
​ открытии которого, каждую​
​ Excel?​
​ иногда поражаюсь таким​ минуты и затем​End Function​Volhv​
​Range(«n51»).Select​vstavka​ElseIf Range(«n51») =​End If​With Worksheets(«x;y»)​ всегда содержит время)​ все заработало.​ способы идентификации. например​ автоматически протягивалась при​ РазмерФайла8 Then DoFile1​ почитайте тему чуть​ минуту происходят определенные​Mirage74​ «ответчикам» на форумах.​
​ продолжит выполнение дальше.​

​DimaLulchuk​​: Таблица представляет собой​​Selection.ClearContents​​End Sub​ 0 Then​Metka1: ‘ Ïðîâåðêà​vПоследняяСтрока = .Range(«A»​ — то конец​Я предпологаю что​ путь и имя​ появлении значения в​ (ИмяФайла8): РазмерФайла8 =​ ниже. «Курсор» называется.​ действия в файле​: Еще раз: если​ Был задан конкретный​ На компе работает​: Что-то ничего не​ бюджет предприятия,и часть​UserForm1.Show​Sub Metka0c()​
​Else:​ çíà÷åíèÿ îïëàòû ïî​ & Rows.Count).End(xlUp).Row +​​ данных можно искать​​ при определенном стечении​
​ файла. ​ соседней ячейке, вот​ НовыйРазмерФайла8 End If​ Это я к​ путем запуска макросов.​ бы комп вешался​ вопрос: Существует ли​ только это приложение.​​ получается​​ статей заполняются сотрудниками,​End Sub​MsgBox «Óêàçàíà íå​Metka11n​ áàíêó 7-é ìåñÿö​ 1​ не через .UsedRange​ обстоятельств, комбинация Ctrl+Shift​Serge_PS​ и реализовала как​ t = Timer:​ вопросу формулировок. ​ Фрагмент программного кода​ из-за неоптимального макроса,​ такой-то метод. Подразумеваются​

​ Метод ‘Application.Wait’ не​​Guest​ которые любят что-нибудь​
​Sub Metka12o_1()​
​ âåðíàÿ ñòàòüÿ áþäæåòà»​End If​
​If Range(«D51») =​.Cells(vПоследняяСтрока, 1) =​ (или .SpecialCells), а​
​ что-то включала или​: Делал и это,​ умела через макрос.​
​ While t +​Рустам​
​ приведен ниже.​ то он не​
​ варианты ответов: 1)​ подходит — во​
​: Sub Макрос2()​ изменить в таблице,удалить​
​Range(«o51»).Select​Range(«c52»).Select​
​Metka12: ‘ Ïðîâåðêà​
​ «» Then​ Format(Now, «hh:mm:ss»)​ с помощью .CurrentRegion.​ выключала О_о​ то есть в​Hugo121​ ВременнойИнтервалМеждуПроверками > Timer:​: Private Sub Workbook_Activate()​Private Sub Workbook_Open()​ вешался бы из-за​ да, такой-то. 2)​ время этой паузы​On Error Resume​

​ строки, отредактировать служебную​​Selection.ClearContents​Selection.ClearContents​ äàòû îïëàòû 9-é​Metka1a​.Cells(vПоследняяСтрока, 2) =​Gustav​хм.. очень странно​
​ начале выполнения программы​: 1. Там в​ DoEvents: Wend Loop​If CommandButton1_Click Then​.​ других программ, сильно​ не существует. А​

​ процессор не охлаждается​​ Next​ информацию, чтобы это​End Sub​

​UserForm1.Show​​ ìåñÿö​ElseIf Range(«d51») >​ Worksheets(«Расчеты»).Range(«C3»)​
​: Например, можно как-то​Всем спасибо за​ записывал в память​
​ коде есть переменная​ End Sub Я​Application.OnTime TimeValue(«08:00:00»), «Макрос_1″​.​
​ грузящих проц (перекодировка​
​ получаешь ответ в​
​ (проверено), а значит​
​Set wsSh =​
​ предотвратить, пришлось установить​

​Sub Metka12o()​
​End Sub​
​If Range(«l51») =​ 0# And Range(«D51»)​
​.Cells(vПоследняяСтрока, 3) =​ так:​ помощь. ​
​ имя книги, которую​ target, и она​ же вам уже​
​Application.OnTime TimeValue(«08:01:00»), «Макрос_2″​Application.OnTime TimeValue(«08:00:00»), «Макрос_1″​
​ видео, некоторые флэш-игры).​ стиле: ‘ты все​
​ почему-то не разгружается​ Sheets(Как указать чтоб​
​ защиту на книгу,​Metka12o: ‘Åñëè íå​
​Sub Metka1a()​ 0 And Range(«n51»)​
​ Sub General()​ironegg​ редактирует макрос, потом​ там не зря​ писал, как это​Application.OnTime TimeValue(«08:02:00»), «Макрос_3″​Application.OnTime TimeValue(«08:01:00»), «Макрос_2″​ А он вешается.​ неправильно делаешь и​
​ во время паузы,​
​ имя листа бралось​ а данные в​

​ ââåäåíà äàòà îïëàòû​​Metka1a: ‘ Åñëè​ = 0 Then​ElseIf Range(«d51») =​
​End With​
​Dim vПоследняяСтрока As​

​: да. клавиша Shift​ этот макрос открывает​ — используйте.​ сделать: Код: Sub​

Источник

Возможно ли как-то остановить выполнение макроса без завершения процесса, если он, допустим, зашел в бесконечный цикл и вызвал зависание всего Excel?

Visman's user avatar

Visman

16.5k8 золотых знаков25 серебряных знаков56 бронзовых знаков

задан 12 сен 2017 в 20:02

mtrfnv's user avatar

4

Один из вариантов контроля бесконечного цикла это контроль по времени. Т.е. задаем максимально допустимый интервал времени по истечение которого происходит выход из цикла. Например.

TimeInterval = 25 'секунд
t1 = Timer        ' задаем начальное время

Do                ' бесконечный цикл 
   tElepsed = Timer - t1
   If tElapsed > TimeInterval Then
       Exit Do
   End if

   'тело цикла
   '
Loop

ответ дан 13 сен 2017 в 7:14

arif's user avatar

arifarif

1598 бронзовых знаков

 

zavex

Пользователь

Сообщений: 57
Регистрация: 05.05.2018

#1

31.05.2018 17:22:43

Добрый день. Формирую отчеты макросами в книге эксель подключенной к кубам. Иногда возникает подвисание экселя(процесс выполняется слишком долго) именно на строчках обновления таблиц через кубы(плохой интернет, слишком большой отчет или что-то еще…).  Повторное обновление сводной таблицы через несколько минут вполне спасает ситуацию.

Код
'строчка кода обновления сводной таблицы, где возможны подвисания
ActiveWorkbook.Connections("Tabular Модель1").Refresh

Подвисание обновления таблицы не зависает намертво — макрос обновления можно остановить простым нажатием Esc. Но если этого не сделать, он так и будет обновлять и обновлять довольно долго…..
Поэтому важно сделать обработчик «зависаний», который, в случае чего, будет перезапустит невыполненную часть макроса заново для удачного исполнения.

Пример отчета:

https://drive.google.com/uc?authuser=0&id=1SQB5kRL6BU6-rzQBRPZw2CvE8uVEjxfS&export=download

Прошу помочь решить задачку. Подскажите, как исправить код или другое действенное решение
Мой нерабочий черновик кода:

Код
Sub обработчик_зависаний_макроса()
'если зависнет - попытку выполнения повторить 2 раза.
    For i = 1 To 2
    'время, которым ограничено выполнение части скрипта в цикле
    maxtime_for_macro = Now() + TimeValue("00:00:10")
    a = Timer 'таймер для контроля работы обработчика зависаний макроса
    
        DoEvents 'Передает управление Windows
        Do While Now <= maxtime_for_macro 'нужно выполнять только разрешенное время - 10 сек.
            Application.Wait Now() + TimeValue("00:00:15") 'пример процесса, который выполняется слишком долго (больше 10 сек.)                         
            MsgBox Timer - a & "работает, если выполнение около 10 секунд"  
        Loop

        if maxtime_for_macro - Now  < 10 Then exit For 'если выполняется меньше чем за 10 сек - повтор цикла не нужен
    Next i
End Sub

Изменено: zavex06.07.2018 19:49:20

 

БМВ

Модератор

Сообщений: 21378
Регистрация: 28.12.2016

Excel 2013, 2016

zavex,  На мой непросвещённый взгляд идея в таком виде провальная. Если код завис, то он сам себя уже не сможет контролировать. Но возникает вопрос как именно идет обновление данных?

По вопросам из тем форума, личку не читаю.

 

zavex

Пользователь

Сообщений: 57
Регистрация: 05.05.2018

#3

31.05.2018 17:50:31

Процесс не зависает, он скорее переходит в бесконечный цикл…

строчка обновления данных сводной таблицы подключенной к кубам. Именно на ней может произойти так званое зависание(слишком долгое выполнение)

Код
'обновить подключение к сводной таблице
ActiveWorkbook.Connections("Tabular Модель1").Refresh

контролировать остальную часть кода помогает команда
DoEvents ‘Передает управление Windows, должна дать возможности остановки цикла, если зависнет.  

Изменено: zavex31.05.2018 17:57:14

 

StoTisteg

Пользователь

Сообщений: 441
Регистрация: 07.05.2018

zavex, так ведь если оно таки зависло, то ой всё, никто никому ничего не передаёт…

 

БМВ

Модератор

Сообщений: 21378
Регистрация: 28.12.2016

Excel 2013, 2016

то есть обновление фоновое и оно длится долго. Цикла бесконечного при этом нет, и не совсем понятно как  абортить выполнение обновления , который для вас как черная коробочка.

По вопросам из тем форума, личку не читаю.

 

zavex

Пользователь

Сообщений: 57
Регистрация: 05.05.2018

StoTisteg, процесс выполняется, но очень медленно. И эксель никак не реагирует. А если обновить таблицу повторно, через немного времени — отчет формируется отлично.
Поэтому и нужен обработчик написать, что бы в случае слишком долгого обновления отчета, нужные строчки макроса перезапустились повторно.

БМВ, абортить по времени будет достаточно.
Если обновление сводной таблицы занимает больше 15 минут (обычно хватает 3-5 мин) — тогда абортить и повторить обновление.

Или каким-то более интересным способом

Изменено: zavex06.07.2018 19:50:07

 

БМВ

Модератор

Сообщений: 21378
Регистрация: 28.12.2016

Excel 2013, 2016

#7

31.05.2018 18:08:40

тогда уж надо ставить флаг начала процесса и снимать его по событию успешного обновления. Проверять что если флаг висит дольше нужного, то повторять процесс.
вот как отловить событие успешного обновления — трудно сказать не видя примера. Например MSQuery обновление меня ZVI научил держать на контроле  

Цитата
Так будет надежнее запускаться при первой загрузке в Excel:
Код
Dim WithEvents q As QueryTable

Private Sub q_AfterRefresh(ByVal Success As Boolean)
  Debug.Print "AfterRefresh", Now
End Sub

Private Sub q_BeforeRefresh(Cancel As Boolean)
  Debug.Print "BeforeRefresh", Now
End Sub

Private Sub Workbook_Open()
  Application.OnTime Now, Me.Name & ".Start"
End Sub

Sub Start()
  Set q = Sheet2.QueryTables(1)
End Sub

Цитата
Для отладки достаточно вручную запустить Start

С уважением,
Владимир Захаров (ZVI)

По вопросам из тем форума, личку не читаю.

 

zavex

Пользователь

Сообщений: 57
Регистрация: 05.05.2018

К слову, что процесс обновления таблицы не зависает намертво — макрос обновления можно остановить простым нажатием Esc. Но если этого не сделать, он так и будет обновлять и обновлять безрезультатно…

 

пробуйте:
Try … Catch .. Finaly .. End Try

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

zavex

Пользователь

Сообщений: 57
Регистрация: 05.05.2018

БМВ, незнакомая для меня конструкция с флагом. Буду пробовать.
Но отладка в ручную точно не подойдет т.к. в макросе запускается сразу формирование нескольких отчетов.
Тогда лучше, что бы хоть просто прерывалось обновление сводной таблицы и ифом отмечалось, какой отчет не обновился.

 

zavex

Пользователь

Сообщений: 57
Регистрация: 05.05.2018

Ігор Гончаренко, такая конструкция Try … Catch .. Finaly .. End Try — в vba не развита.

https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=87640&MID=s

а конструкция
On Error GoTo
не применю, т.к. ошибки по факту и нет в главном коде макроса.

Изменено: zavex31.05.2018 19:53:36

 

zavex

Пользователь

Сообщений: 57
Регистрация: 05.05.2018

Изменено: zavex06.07.2018 19:50:55

 

Anatoliy Pychev

Пользователь

Сообщений: 79
Регистрация: 05.09.2017

#13

01.06.2018 02:54:08

Цитата
БМВ написал:
вот как отловить событие успешного обновления

Проверять изменения на листе который должен обновиться в ячейке которая обязательно измениться. Или заведомо, перед запуском обновления, изменить некоторую ячейку на свой текст.
Если обновление это фоновый процесс, и сообщения могут достучаться до Excel, я бы проверял по таймеру. См. вложение

Прикрепленные файлы

  • timer.xlsm (22.52 КБ)

Изменено: Anatoliy Pychev01.06.2018 03:20:31

 

zavex

Пользователь

Сообщений: 57
Регистрация: 05.05.2018

короче, в powershell нарисовался скрипт, который запускается планировщиком и проверяет, если процесс excel висит дольше 15 мин — убивает процесс и перезапускает документ excell заново. ну а по открытию в документе запускается заново макрос на выполнение.  
Работает, но хотелось бы более гуманного решения в самом экселе. Т.к. taskkill — не лучший способ прерывания, для перезапуска макроса.

Уважаемые, прошу ваших вариантов, желательно готовых

 

БМВ

Модератор

Сообщений: 21378
Регистрация: 28.12.2016

Excel 2013, 2016

zavex,  Для готового решения, нужен пример. Все ж в данном случае #8+#14 могут дать результат, Модель то симулятор написать не проблема, а вот что там за событие будет или как заменить данные чтоб по ним судить что обновление выполнено можно только на близком к оригиналу примере.

Алгоритмически все просто.
1. Установка старта процедуры проверки через 15 мин
2. Установка флага старта (глобальная переменная или ячейка листа — на ваше усмотрение) Если запросов несколько , то несколько флагов
3. запуск обновления-обновлений.
4. По событию успешного обновления снимаем флаг
5. через 15 мин стартует проверка
6. если флаг установлен, значит перезапуск идем на 1.
7. Все обновилось

если возможен #14 , то п. 1 — заменяем на «порчу данных», 4. не нужен, данные исправятся, значит флаг снят.

По вопросам из тем форума, личку не читаю.

 

Anatoliy Pychev

Пользователь

Сообщений: 79
Регистрация: 05.09.2017

#16

01.06.2018 10:00:28

Цитата
zavex написал:
короче, в powershell нарисовался скрипт, который запускается планировщиком и проверяет, если процесс excel висит дольше 15 мин — убивает процесс и перезапускает документ excell заново.

процесс excel, при проверке из сторонней программы, может выдать сигнал занято по многим причинам. Например обновление давно прошло и пользователь вошел в режим редактирования ячейки.

Смотрите в сторону #16.

БМВ

Вам дал готовый алгоритм

Цитата
zavex написал:
Уважаемые, прошу ваших вариантов, желательно готовых

Весь код который Вам нужен уже есть в этой ветке, Вам осталось только собрать все воедино.

 

zavex

Пользователь

Сообщений: 57
Регистрация: 05.05.2018

БМВ, Загрузил

ПРИМЕР

отчета

Изменено: zavex01.06.2018 10:15:26

 

StoTisteg

Пользователь

Сообщений: 441
Регистрация: 07.05.2018

#18

01.06.2018 10:18:06

Цитата
БМВ написал:
Если запросов несколько , то несколько флагов

Я бы их в коллекцию засунул, ибо Бог весть, сколько там этих запросов. А так запустили запрос — добавили флаг.

А, не, ерунду написал…

Изменено: StoTisteg01.06.2018 10:19:30

 

sokol92

Пользователь

Сообщений: 4445
Регистрация: 10.09.2017

Здравствуйте, коллеги! Для чего сложный путь (#16), если есть простой (#8 ), применимый к объектам QueryTable всех типов (в том числе, из #18). Те действия, которые нужно выполнить по завершению обновления QueryTable, вставляйте в q_AfterRefresh.

Изменено: sokol9201.06.2018 13:20:59

 

БМВ

Модератор

Сообщений: 21378
Регистрация: 28.12.2016

Excel 2013, 2016

#20

01.06.2018 14:05:27

zavex, Я в VBA не очень, я только стратегию вырабатываю.

Цитата
sokol92 написал:
q_AfterRefresh.

Владимир, приветствую.  №8 применим для тригера/флага, но весь сыр бор то в том, что если запрос так и не закончился, то его надо прервать, и это (со слов автора) успешно делается повторным запуском. Событие завершения запроса помогает, но не освобождает от прочей аналитики по истечении заветных 15 мин.

По вопросам из тем форума, личку не читаю.

 

sokol92

Пользователь

Сообщений: 4445
Регистрация: 10.09.2017

Понятно. Я не знаю способа, как можно макросом прервать выполняющийся запрос обновления данных. Грубая сила: закрыть книгу и открыть заново (через Application.Ontime).

 

zavex

Пользователь

Сообщений: 57
Регистрация: 05.05.2018

#22

06.07.2018 19:46:55

Всем спасибо большое!!!!
С помощью VBA решение так и не нашел.
Писал на powershell
Алгоритмически работы следущий:
Запуск скрипта1 powershell. Если через 15 мин процесс Excell висит — taskill Excell. Перезапуск документа с последующим перезапуском обновления сводной таблицы
   Обновление сводной
   Остальной код макроса
Запуск скрипта2 powershell. Находит другие процессы powershell. taskill всех процессов powershell(в том числе убивает таймер на выключения экселя. эксель работает дальше)

У кого возникнет аналогичная проблема рекомендую разбить большую сводную таблицу на несколько маленьких (по 3-4-5 столбцов). И уже после собирать полученные данные в одну таблицу (копирование, впр. Все грузить в массив и только после выгружать в нужную таблицу). Лично у меня скорость формирования отчетов возросла, эксель вроде как не подвисает в конечном счете.

Владимир23

5 / 5 / 4

Регистрация: 01.11.2009

Сообщений: 576

1

Зависает макрос наглухо

07.07.2016, 10:38. Показов 4978. Ответов 7

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Добрый день.
с утра написал — работал быстро, буквально пару секунд.
сейчас же висит на полминуты и проц на 100% гасит.
Как вычленить проблему?

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Public Sub Report()
    '   Очищаем диапазон от предыдущих сотрудников
        ActiveWorkbook.Worksheets("Досье").Range("C6:N14").ClearContents
    '   Получаем имя ФИО сотрудника
       Dim User As String
       User = ActiveWorkbook.Worksheets("Досье").Range("C3").Value
 
    '   Обходим листы
        For i = 1 To 12
 
            '   Последняя строка
            lLastRow = Worksheets(CStr(i)).UsedRange.Row + Worksheets(CStr(i)).UsedRange.Rows.Count - 1
        '   Обходим строки листа
            For k = 1 To lLastRow
                'arrRep(i, k) = ActiveWorkbook.Worksheets("Досье").Cell("C3").Value
                Dim U_name
                U_name = ActiveWorkbook.Worksheets(CStr(i)).Cells(k, 1).Value
            '   Если ФИО совпало
                If U_name = User Then
               Dim ii
               ii = i - 1
                    For f = 0 To 9
                    Dim ff
                    ff = f + 2
                       '   Пишем сразу на лист
                        Dim i2, f2
                        i2 = i + 2
                        f20 = f + 6
                        ActiveWorkbook.Worksheets("Досье").Cells(f20, i2) = ActiveWorkbook.Worksheets(CStr(i)).Cells(k, ff).Value
                    Next
 
                End If
            Next
        Next
End Sub



1



Hugo121

6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

07.07.2016, 10:54

2

зачем внутри цикла объявлять

Visual Basic
1
2
3
               Dim ii
                    Dim ff
                        Dim i2, f2

И что там за f20?
А вообще если оно 12 раз гоняет по миллиону ячеек, а там внутри ещё копирования, и может каждый чих вызывает пересчёт кучи формул — вполне может долго работать.
Выводите статусбар чтоб контролировать что происходит, если конечно это нормально.
А вычленить можно пройдя пошагово.
И пересчёт бывает полезно отключать, если конечно не нужен в процессе.
И обновление экрана.



1



KoGG

5590 / 1580 / 406

Регистрация: 23.12.2010

Сообщений: 2,366

Записей в блоге: 1

07.07.2016, 11:21

3

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Public Sub Report()
    Dim i&, k&, F&, ff&, i2&, f20&, lLastRow&, User As String, Ar
'   Очищаем диапазон от предыдущих сотрудников
    ActiveWorkbook.Worksheets("Досье").Range("C6:N14").ClearContents
'   Получаем имя ФИО сотрудника
    User = ActiveWorkbook.Worksheets("Досье").Range("C3").Value
    With Application
        .Calculation = xlCalculationManual
        .ScreenUpdating = False
    End With
    '   Обходим листы
    For i = 1 To 12
        With Worksheets(CStr(i))
             '   Последняя строка
            lLastRow = .UsedRange.Row + .UsedRange.Rows.Count - 1
            Ar = .Range("A1:K" & lLastRow).Value
            '   Обходим строки  массива
            For k = 1 To lLastRow
                '   Если ФИО совпало
                If Ar(k, 1) = User Then
                    'ii = i - 1
                    For F = 0 To 9
                        ff = F + 2
                        '  Пишем сразу на лист
                        i2 = i + 2
                        f20 = F + 6
                        ActiveWorkbook.Worksheets("Досье").Cells(f20, i2) = Ar(k, ff)
                    Next
                End If
            Next
        End With
    Next
    With Application
        .Calculation = xlCalculationAutomatic
        .ScreenUpdating = True
    End With
End Sub

Множество CStr(i) гасит.
Скорее всего появились данные, хоть пробел, где-то далеко внизу.

Добавлено через 11 минут
Вычленить на каком листе появились лишние пустые строки, активировать каждый лист, потом из окна Immediate запускать команду:

Visual Basic
1
Activesheet.UsedRange.select

и смотреть
или поставить остановку F9 на строке 16 (Ar = ..) и при отладке смотреть значение lLastRow.



0



Владимир23

5 / 5 / 4

Регистрация: 01.11.2009

Сообщений: 576

07.07.2016, 11:35

 [ТС]

4

Лучший ответ Сообщение было отмечено Sasha_Smirnov как решение

Решение

Цитата
Сообщение от Hugo121
Посмотреть сообщение

пересчёт бывает полезно отключать

Спасибо, были такие подозрения, сделал так и все ОК:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
'Ускоряем Excel путём отключения всего "тормозящего"
 Public Sub AccelerateExcel()
 
  'Больше не обновляем страницы после каждого действия
  Application.ScreenUpdating = False
 
  'Расчёты переводим в ручной режим
  Application.Calculation = xlCalculationManual
 
  'Отключаем события
  Application.EnableEvents = False
 
  'Не отображаем границы ячеек
  If Workbooks.Count Then
      ActiveWorkbook.ActiveSheet.DisplayPageBreaks = False
  End If
 
  'Отключаем статусную строку
  Application.DisplayStatusBar = False
 
  'Отключаем сообщения Excel
  Application.DisplayAlerts = False
 
 End Sub
'Включаем всё то что выключили процедурой AccelerateExcel
Public Sub disAccelerateExcel()
 
  'Включаем обновление экрана после каждого события
  Application.ScreenUpdating = True
 
  'Расчёты формул - снова в автоматическом режиме
  Application.Calculation = xlCalculationAutomatic
 
  'Включаем события
  Application.EnableEvents = True
 
  'Показываем границы ячеек
'  If Workbooks.Count Then
'      ActiveWorkbook.ActiveSheet.DisplayPageBreaks = True
'  End If
 
  'Возвращаем статусную строку
  Application.DisplayStatusBar = True
 
  'Разрешаем сообшения Excel
  Application.DisplayAlerts = True
 
End Sub



1



104 / 103 / 29

Регистрация: 13.03.2016

Сообщений: 474

09.07.2016, 12:35

5

Немного не по теме, но еще в циклах бывает полезно вставлять команду DoEvent…



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

09.07.2016, 23:57

6

DoEvents ничем цикл не ускорит, полезно может быть только другим задачам.



1



104 / 103 / 29

Регистрация: 13.03.2016

Сообщений: 474

11.07.2016, 13:07

7

Я и не говорил, что ускорит, просто иногда не придется убивать процесс через диспетчер задач



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

11.07.2016, 13:12

8

Ну если процесс зависнет — то убивать всё равно придётся. Другое дело что такой процесс хоть как-то даст возможность делать системе что-то ещё.

Не по теме:

А что, можно свой пост отмечать как лучший ответ? Не знал, нужно попробовать хоть раз открыть тему :)



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

11.07.2016, 13:12

Помогаю со студенческими работами здесь

Макрос делает копию листа и сохраняет в новую книгу, но макрос в новой не работает
Есть макрос в книге. Он копирует текущий лист, создает новую книгу и копирует в новую книгу лист. …

Макрос, чтобы другой макрос распихал сам по N файлам
Может эта тема уже тут звучала, да поиск не помог… Просто проблема в том, что макрос постоянно…

Макрос, запускающий макрос из другого закрытого файла
Здравствуйте.
Использую Office 2007.
Поискал на форуме, не нашел ответа.
Опишу подробно…

Сделать макрос в Word, вводишь строку и макрос произвольно меняет шрифт, цвет и размер для каждого слова из этого активного вордовского документа.
Началось VBA — лекций нет, только практика. Препод категоричеки отказывается что-нить объяснять,…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

8

Hello Experts,

Hope everyone is doing well.

I am finding error of excel workbook hangs and closes at start of the day, when real time data feed start updating for example: 9:00 AM when real time data starts updating C column (sheet- Macro Copy paste and Cut paste Testing 1). 

But when the excel reopen, after the real time starts updates takes place, let say for example at 9:00:20 AM or more, the excel workbook works fine. All the data, macros, remote link excel, etc. is updated fine (Attached two sheets for your ready reference).

I am facing this problem only at the start of the data feed updation, rest the excel open at any other time, it is working fine.

I don’t know the reason of excel get hangs and closes at start of the day. May be reason of number of macros coding, timer or remote Link excel.

I am unable to find the solution for the said problem.

Hence, Can i request for your help with your expert knowledge to solve the problem.

Your help will be highly appreciated.

Regards,

Revised Question:

I have attached latest file with recommended solution, but still facing error of excel hangs.

This time i found the error because of Module 1 and Module 2. As the excel is working fine with Module 1 but when i add Module 1 and Module 2, i face of excel hangs at start of real time data feed updates (attached revised sheet for your ready reference).

Also the excel is working fine with all the 3 modules when excel open after the start of real time data feed.

Can you please help with solution for the same.

Regards,

Return to VBA Code Examples

This tutorial will demonstrate how pause (break) and resume a macro in Excel.

Being able to pause a macro while testing VBA code that has been written is a useful way to work out where any ‘bugs’ may be in our code.   There are a number of ways that we can break the running of the macro, and then resume it from the point where the macro was interrupted.

The Control and Break keyboard combination

If we hold down the control key, and then press the Pause/Break key when VBA code is running, the code will immediately stop with a debug message warning us that the running of the macro has been interrupted.

VBABreaks CtrlBreak

We can then press the Continue button in the dialog box that pops up to continue running the macro.  Alternatively, if we then press the Debug button in the dialog box, the macro will highlight the position where it stopped running.  By resting the mouse over any existing variables, we can then see what is stored in the variables.  This can be very useful in debugging our code.

VBABreaks Variable Value

We can then click the Run button in the ribbon (or press F5 on the keyboard) to resume running the macro.

VBABreaks Continue

Adding Break Points to the Macro

Before starting the macro, we can insert break points into the macro in order to stop the macro as specific lines of code.

VBABreaks SetBreakPoint

We can run the code by clicking on the Run button in the Ribbon, or by pressing F5 on the keyboard.  The macro will stop at the break point.

VBABreaks BreakPoint

Press the Run button again (the caption will now say Continue) to resume the macro or press F5.

There may be other times that the running of a VBA macro may need to be paused.  This can also be done using the Wait and Sleep methods.   These methods are used more in delaying the actual progress of the macro rather than being used to debug the actual code.

For example, this line of code will delay the macro from running until 5 more seconds have passed.

Application.Wait (Now + TimeValue("0:00:05"))

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
vba save as

Learn More!

Понравилась статья? Поделить с друзьями:
  • Vba excel записать в ячейку дату
  • Vba excel если значение ячейки пусто
  • Vba excel заменить текст в ячейке
  • Vba excel если значение в ячейке текст
  • Vba excel заменить значение ячейки