Страницы: 1
RSS
Пауза макроса для выполнения другого, Как приостановить макрос
 
Доброго времени, вопрос простой, но я не сталкивался ранее с ним. При выполнении макроса запускается второй макрос через команду run,вопрос: как приостановить первый макрос до завершения работы второго с последующим продолжением выполнения первого макроса? Заранее спасибо, буду благодарен любому примеру выполнения данной задачи или ссылки на нее.
Инженер не тот, кто все знает, а тот кто знает где найти ответ.
 
Код
Sub макрос1 ()
    ...... ' действия макроса1
    Call макрос2
    ...... ' действия макроса1
End Sub

Sub макрос2 ()
    ...... ' действия макроса2
End Sub
 
Спс, попробую.
Инженер не тот, кто все знает, а тот кто знает где найти ответ.
 
не нужно ничего приостанавливать.
в том месте, где Вы собирались "приостановить" первый макрос, добавьте в код строку и напишите в ней имя второго макроса
Изменено: Ігор Гончаренко - 19.07.2019 15:54:52
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Off
У меня вот инверсный вопрос,  как запустить второй макрос чтоб первый не остановился и оба работали параллельно? :-)
По вопросам из тем форума, личку не читаю.
 
У меня через run работают оба и даже третий запускается
Инженер не тот, кто все знает, а тот кто знает где найти ответ.
 
Цитата
БМВ написал:
чтоб первый не остановился и оба работали параллельно
запустите 2 экземпляра Excel
запустите оба макроса с помощью OnTime в одно время, можно научить макросы играть в пинг-понг и наблюдать за происходящим)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Игорь, заманчивый вариант, а пример есть готовый? ради интереса
Инженер не тот, кто все знает, а тот кто знает где найти ответ.
 
Irbis_evs, ну наверно у меня все версии Excel отсталые и пока работает один макрос, второй простаивает.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
оба работали параллельно
Здравствуйте, Михаил! Только с помощью запуска асихроннных методов объектов (параллельность в смысле Лобачевского :) ). Игорь приводил замечательный пример здесь.
Владимир
 
попробовал, в результате моего винегрета запускается все. мне надо чтобы при выполнении макроса "rasp" ( в конце запускается второй макрос) появлялась сначала одна форма (второй макрос) а потом после ее закрытия выполнялся третий макрос (вторая форма) .
Инженер не тот, кто все знает, а тот кто знает где найти ответ.
 
sokol92, Владимир, ну значит ТС не дойдя до метода Сall смог написать параллельную реальность, не знав что так нельзя.   :D  Все ж по ссылке немного по другому все работает .
По вопросам из тем форума, личку не читаю.
 
Просто у нас с автором темы отличается понимание последовательного и параллельного выполнения.
Владимир
 
Возможно, потому и задал вопрос "Как приостановить работу" макроса. могу малость переформулировать вопрос: как при выполнении макроса передать фокус в другой макрос, и приостановить работу до получения фокуса обратно?

есть другая идея, может кто подскажет реализацию - определение наличия активной формы, при ее наличии повторное определение, при отсутствии работа дале
Инженер не тот, кто все знает, а тот кто знает где найти ответ.
 
Irbis_evs, так и происходит, обычный родительский процесс останавливается до завершения дочернего. если вы про
ChekAndMyFormShow и пока форма не закрыта то календарь (Form_SelectDate.Show) появится. то так не делается. Продолжение действий уже по кнопке формы надо делать или форму модальную вызывать с параметром 1 а не 0 (MainForm.Show 1)
Изменено: БМВ - 19.07.2019 17:06:23
По вопросам из тем форума, личку не читаю.
 
охотно верю, но видимо я нарушаю законы вселенной, в приложенном файле у меня выполняется все сразу (( (офис 2019 крякнутый) и в принципи степень подтормаживания макроса мне не актуальна

для тех кому интересно, нашел решение проблемы, которое меня устроило.
Код
    ' Create a variable to hold number of Visual Basic forms loaded
    ' and visible.
openF:
    Dim I, OpenForms
    For I = 1 To 150000    ' Start loop.
        If I Mod 1000 = 0 Then     ' If loop has repeated 1000 times.
            OpenForms = DoEvents    ' Yield to operating system.
        End If
    Next I    ' Increment loop counter.
    If OpenForms <> 0 Then GoTo openF
взял пример от сюда -   https://docs.microsoft.com/ru-ru/office/vba/language/reference/user-interface-help/doevents-function...
и пример работы того что у меня получилось
Инженер не тот, кто все знает, а тот кто знает где найти ответ.
Страницы: 1
Наверх