Страницы: 1
RSS
Постановка макроса в очередь срабатывания при параллельном запуске макросов в двух разных сессиях
 
Есть два файла эксель с разными макросами, допустим Книга А с макросом А, А1 и т.п. и Книга Б с макросом Б. Задача: сделать так, чтобы макросы книги А и макросы книги Б работали параллельно и не останавливали работу друг друга. Для этого мы открываем книгу Б с макросом Б во второй сессии экселя. Запускаем макросы книги Б с помощью макроса периодического запуска (например с периодом 3 секунд), на примере:
Dim TimeToRun   'глобальная переменная, где хранится следующее время запуска

'это главный макрос
Код
Sub MyMacro()
    Application.Calculate                               'пересчитываем книгу
    Range("A1").Interior.ColorIndex = Int(Rnd() * 56)   'заливаем ячейку А1 случайным цветом 
    Call NextRun                                        'запускаем макрос NextRun для назначения след.времени запуска
End Sub

'этот макрос назначает время следующего запуска главного макроса
Код
Sub NextRun()
    TimeToRun = Now + TimeValue("00:00:03")     'прибавляем к текущему времени 3 сек
    Application.OnTime TimeToRun, "MyMacro"     'назначаем следующий запуск
End Sub

'макрос для запуска последовательности повторений
Код
Sub Start()
    Call NextRun
End Sub

'макрос для остановки последовательности повторений
Код
Sub Finish()
    Application.OnTime TimeToRun, "MyMacro", , False
End Sub


Так вот нам нужно в эти конструкции встроить еще часть кода, которая Проверяла бы, работает ли в настоящий момент при этом другой макрос, если работает, то макрос книги Б срабатывал бы сразу по окончанию его работы, а не выдавал ошибку. Буду признателен за Ваши подсказки. Спасибо.
Изменено: Евгений И. - 17.01.2022 11:39:13
 
Евгений И., код оформляется кнопкой <…> на панели

Цитата
Евгений И.: Задача: сделать так, чтобы макросы книги А и макросы книги Б работали параллельно
плохая идея
Изменено: Jack Famous - 17.01.2022 11:38:45
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Код оформил, спасибо. Вне зависимости какая идея (плохая или хорошая), стоит задача параллельной работы макросов, так или иначе нам нужно ее решить...
 
Цитата
Евгений И.: нам нужно ее решить
тогда желаю вам всем удачи — она вам точно понадобится  ;)
Изменено: Jack Famous - 17.01.2022 12:05:25
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
написал:
часть кода, которая Проверяла бы, работает ли в настоящий момент при этом другой макрос
Как вариант, в другом макросе создавать текстовый файл, по которому первый макрос будет понимать, что макрос работает/завершил работу.
Изменено: МатросНаЗебре - 17.01.2022 12:21:03
Страницы: 1
Наверх