Страницы: 1 2 След.
RSS
Как остановить макрос,посмотреть результат и запустить его с того же места?
 
Здравствуйте. Есть макрос, он делает вычисления и записывает их на лист в таблицу, есть необходимость периодически останавливать макрос, смотреть результаты работы и снова запускать его с той же точки , где он остановился . Можно ли это сделать? Кнопка Esc останавливает макрос, но запустить снова макрос в работу можно только с самого начала , а не с той точки где он остановился.
 
1. Расставьте в нужных местах строчки с текстом "Stop"  
2. На нужных строках нажмите F9
 
Stop - без кавычек
 
Команда stop не подходит, так как просто останавливает макрос в отладчике до нажатия F5 или F8. А если в цикле десятки тысяч вычислений, а циклов не 2 а много больше, тогда нажимать каждый раз будет тяжело. Поэтому надо по нажатию кнопки (наверно существуют процедуры типа Application.EnableCancelKey = xlInterrupt) приостановить выполнение процесса, а другой кнопкой или такой же, продолжить. Нежелательно появление окошка с вопросами о продолжении и пр., так как надо смотреть на нескольких листах как идет процесс, в ту ли сторону, а это невозможно сделать пока окошки с вопросами не закрыты.  
Извиняюсь если что не так изложил. специалист я не большой.
 
Может какую паузу тогда задать - приостановить действие макроса? Но нужно знать тайм-аут.
 
Время тайм-аута нельзя установить. принятие решение о продолжении или прекращении процесса, не всегда можно формализовать, тем более в замкнутых временных рамках.  
Вот если бы можно было написать что цикл в паузе бесконечный, но при совершении какого-либо события (смена значения в какой-нибудь ячейке например) переводит цикл паузы в конечный и программа продолжается.
 
Может в сторону DoEvents глянуть?
 
{quote}{login=Vik63}{date=25.04.2011 12:43}{thema=Как остановить макрос,посмотреть результат и запустить его с того же места?}{post}Нежелательно появление окошка с вопросами о продолжении и пр., так как надо смотреть на нескольких листах как идет процесс, в ту ли сторону, а это невозможно сделать пока окошки с вопросами не закрыты.{/post}{/quote}  
В порядке бреда: а если это "окошко" будет Application.InputBox? Можно по любым листам посмотреть... Не элегантно, конечно, но на крайний случай.
 
{quote}{login=Vik63}{date=25.04.2011 12:43}{thema=Как остановить макрос,посмотреть результат и запустить его с того же места?}{post}Команда stop не подходит, так как просто останавливает макрос в отладчике до нажатия F5 или F8. А если в цикле десятки тысяч вычислений, а циклов не 2 а много больше, тогда нажимать каждый раз будет тяжело. Поэтому надо по нажатию кнопки (наверно существуют процедуры типа Application.EnableCancelKey = xlInterrupt) приостановить выполнение процесса, а другой кнопкой или такой же, продолжить. Нежелательно появление окошка с вопросами о продолжении и пр., так как надо смотреть на нескольких листах как идет процесс, в ту ли сторону, а это невозможно сделать пока окошки с вопросами не закрыты.  
{/post}{/quote}  
Совместно со Stop'ом можно использовать какой-нибудь счетчик. Пример:  
'  
Sub Test1()  
   Dim J As Long, N As Long  
   Dim Guard As Integer  
   '  
   N = 65000  
   Guard = 1  
   For J = 1 To N  
       ' Тело цикла '  
       If J >= N / 10 * Guard Then  
           Stop  
           Guard = Guard + 1  
       End If  
   Next  
End Sub  
'  
Guard 10 раз остановит длинный цикл. Продолжение - кнопкой 'Step Out' (Ctrl+Shift+F8).
 
В порядке недоумения: по F9 можно спокойно смотреть все листы и значения всех переменных (наводя на них указатель мыши). Кроме этого установив точку остановки на вымышленной переменной (например a100=100) внутрь структуры управления можно уверенно ожидать паузы при равенстве переменной интересующему нас значению:  
if i=98 then  
a100=100  
'или  
a101=Sheets("Лист3").cells(5,10)  
a102=Sheets("Лист15").cells(3,150)  
end if
 
У меня по Esc происходит останов, с возможностью продолжения.
Я сам - дурнее всякого примера! ...
 
F8
 
{quote}{login=k61}{date=25.04.2011 02:48}{thema=Re: Как остановить макрос,посмотреть результат и запустить его с того же места?}{post}В порядке недоумения: по F9 можно спокойно смотреть все листы и значения всех переменных (наводя на них указатель мыши). Кроме этого установив точку остановки на вымышленной переменной (например a100=100) внутрь структуры управления можно уверенно ожидать паузы при равенстве переменной интересующему нас значению:  
if i=98 then  
a100=100  
'или  
a101=Sheets("Лист3").cells(5,10)  
a102=Sheets("Лист15").cells(3,150)  
end if{/post}{/quote}  
К сожалению , пользователь не является специалистом в плане vba, рядовой пользователь EXCEL может посмотреть листы, написать простейшую формулу, но лазить по тексту модуля - он не сможет.
 
А зачем рядовому пользователю EXCEL лазить по тексту модуля? Нужны шаловливые ручки? Мало проблем?
Я сам - дурнее всякого примера! ...
 
{quote}{login=KukLP}{date=25.04.2011 06:45}{thema=}{post}У меня по Esc происходит останов, с возможностью продолжения.{/post}{/quote}А в таком случае какая кнопка продолжает вычисления ? И с того ли же места?
 
{quote}{login=NullUzer}{date=25.04.2011 09:08}{thema=Re: Как остановить макрос,посмотреть результат и запустить его с того же места?}{post}F8{/post}{/quote}У меня на F8 не реагирует.Эксель 2007 года.
 
пошагово F8  
без остановки, до End Sub (или до следующей отмеченной точки остановки) F5
 
Vik63, а моя идея с Application.InputBox не подходит? Можно посмотреть листы, а потом нажать кнопочку. Расставили по нужным местам вызов - вот Вам и остановы.
 
{quote}{login=Vik63}{date=25.04.2011 10:57}{thema=Re: }{post}{quote}{login=KukLP}{date=25.04.2011 06:45}{thema=}{post}У меня по Esc происходит останов, с возможностью продолжения.{/post}{/quote}А в таком случае какая кнопка продолжает вычисления ? И с того ли же места?{/post}{/quote}См. картинку. С того же.
Я сам - дурнее всякого примера! ...
 
Не, Серж, автор не хочет пускать пользователя в редактор - всё только на листе. Если я правильно понимаю :-)
 
Юр, я по этому поводу писал от 25.04.2011, 09:24. И до сих пор не пойму, зачем это надо. Отработал макрос - смотри результат. Мож, на самом деле, ему подбор параметра нужен, а не эта галиматья с остановами?
Я сам - дурнее всякого примера! ...
 
значит вывешивать немодальную форму..  
 
и цикл с doevents
Живи и дай жить..
 
doevents предлагалось - не глянулось что-то :-)
 
мне вот тоже не глянулось :) (не заметил)  
 
 
реклама должна быть БОЛЬШОЙ, глаза мозолить  :)
Живи и дай жить..
 
doevents и проверять переключатель/чекбокс на листе?
 
Задай внутри цикла функцию отслеживания нажатий на клавишу. (В справочниках по VBA есть описание)  
создай условие сравнения по трем кнопкам Запуск измерений (Y) остановка (S) перезапуск (P)  
в цикл введи строку заносящую текущий номер строки в таблице измерений в переменную счетчик строк.    
При нажатии клавиши перезапуск  в качестве точки отсчета введи переменную счетчик строки.  
 
ps: не совсем понятно когда ты останавливаешь макрос у тебя вычисления останавливаются или останавливается запись этих вычислений в таблицу.
 
форму в виде одной большой клавиши... с надписью "ПРОДОЛЖИТЬ"  
 
по нажатию меняется глобальная переменная - выход из цикла
Живи и дай жить..
 
{quote}{login=Юрий М}{date=25.04.2011 11:16}{thema=}{post}Не, Серж, автор не хочет пускать пользователя в редактор - всё только на листе. Если я правильно понимаю :-){/post}{/quote}  
Во первых абсолютно правильно, во вторых ему и самому это не очень надо, одно неосторожное движение и ты ...  
Задача предоставить пользователю полный доступ к промежуточным результатам вычислений только на листах, чтобы принять решение о дальнейших действиях - либо прерывать и менять начальные условия, либо все ок и надо продолжить.
 
{quote}{login=k61}{date=25.04.2011 11:00}{thema=продолжает вычисления :}{post}пошагово F8  
без остановки, до End Sub (или до следующей отмеченной точки остановки) F5{/post}{/quote}  
это все в отладчике, а пользователь может неосторожно испортить текст, и все.  
Поэтому лучше бы ему туда не лазить.
 
{quote}{login=Юрий М}{date=25.04.2011 11:32}{thema=}{post}doevents предлагалось - не глянулось что-то :-){/post}{/quote}  
Вечером проверю обязательно, не успеваю днем.
Страницы: 1 2 След.
Читают тему
Наверх