Асинхронный запуск скрипта VBA

Программирование на Visual Basic for Applications
ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Асинхронный запуск скрипта VBA

Сообщение ger_kar » 28.08.2012 (Вт) 12:30

Во всех приложениях пакета Office есть возможность используя метод Run объекта Application запустить нужный макрос указав его наименование первым параметром. Этой возможностью можно воспользоваться и из стороннего приложения например на VB. Но указанный метод является синхронным. Т.е. если запускать его из стороннего приложения, то оно будет ждать, пока метод не вернет управление вызвавшему коду. А существует ли возможность запуска макроса асинхронно? Стандартных методов я для этого не нашел, но может хотя бы ка-то по извращенски и то было-бы хорошо :).
Бороться и искать, найти и перепрятать

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Асинхронный запуск скрипта VBA

Сообщение FireFenix » 29.08.2012 (Ср) 10:59

Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Sam777e
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 157
Зарегистрирован: 16.09.2010 (Чт) 4:33

Re: Асинхронный запуск скрипта VBA

Сообщение Sam777e » 29.08.2012 (Ср) 13:59

VB под рукой нет, а в VBA по некоторым причинам пробовать не хочу.

Однако, смутно помнится, что сталкивался с такой ситуацией [ в VB6 ]. Есть Форма-2 и у нее в Load долго работающий код. Если выполнять следующие строки

Код: Выделить всё
Form2.Show
MsgBox "Any text"

то 2-ая строка выполняется сразу.

А вот если так
Код: Выделить всё
Form2.Show vbModal
MsgBox "Any text"

то, конечно, Any text придется ждать долго [ а может, и до каких-то наших действий с Form2 - например, закроем ].

Так что, пробовать можно [ не vbModal ], как-то так, чтобы у Формы-2 в Load был вызов нужного макроса.

Еще раз: у меня нет возможности все это пробовать и помню смутно . . . не ругайте, пожалуйста.
Здоровья и удачи

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 29.08.2012 (Ср) 14:10

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

Sam777e
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 157
Зарегистрирован: 16.09.2010 (Чт) 4:33

Re: Асинхронный запуск скрипта VBA

Сообщение Sam777e » 29.08.2012 (Ср) 16:05

to Qwertiy

А я что писал ?! Все, что Вы написали, у меня идет 2-ым, неважным, планом, так, для полноты картины. А ударение [ видимо - плохо донес . . . ] стоит как раз на варианте без vbModal и мне думается, что его стоит проверить. Стяг в руки и работать, а писать простые истины я и сам умею.

С уважением.
Последний раз редактировалось Sam777e 29.08.2012 (Ср) 21:00, всего редактировалось 1 раз.
Здоровья и удачи

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 29.08.2012 (Ср) 16:42

Ты предлагаешь сделать отдельную форму и запускать макрос из неё?

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: Асинхронный запуск скрипта VBA

Сообщение ark » 21.09.2012 (Пт) 5:16

Sam777e писал(а):А ударение [ видимо - плохо донес . . . ] стоит как раз на варианте без vbModal и мне думается, что его стоит проверить.
Нонсенс. VB однотредный по факту. Modal и НЕ Modal отличаются лишь наличием фокуса, но в обоих случаях обе формы крутятся в одном потоке. И в первом случае MsgBox появится только ПОСЛЕ загрузки Form2 (если в Form2_Load макрос - ПОСЛЕ его отработки)
ИМХО в данном конкретном случае следует использовать ActiveX exe

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Асинхронный запуск скрипта VBA

Сообщение ger_kar » 21.09.2012 (Пт) 6:23

Как оказалось Windows начиная с 2000 и далее поддерживает версию COM с асинхронными вызовами. Вот статья на эту тему. Я прочитал ее, но честно сказать с первого раза не вьехал :) Сейчас эта проблема (с асинхронным запуском скрипта VBA) для меня не самая актуальная, но в дальнейшем я попытаюсь её разрешить.
Бороться и искать, найти и перепрятать


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 63

    TopList