Тема: VBA -> WSH: обмен объектами между скриптами - детали
Так сложилось, что есть востребованный код на VBA(надстройка), которым реально пользуются. Не совсем на VBA: VBA создает объект ScriptControl, подгружает в него код на JScript и управляет его выполнением через пользовательское меню Excel.
Код работает сутками (конечно, можно поставить на паузу или прервать, но лень же) и этим затрудняет пользование Экселем - оставлена такая возможность. Такое пользование Экселем в процессе выполнения скрипта быстро прерывает его выполнение. При этом процесс Экселя за сутки пухнет до неприличия (поиск в листах и запись в них).
Хотелось бы по-возможности сократить конфликты скрипта и Экселя, чтобы они могли работать не критично мешая друг другу.
В качестве такой меры предполагается как-то вынести исполнение кода в объекте ScriptControl за пределы процесса Экселя. Хотелось бы сделать это попроще - взять готовый объект и передать его в другой процесс.
На роль другого процесса знаю только одного кандидата: nssm-скрипт-сервис.
Предпочтительной выглядит такая схема: из Экселя запускается nssm-скрипт-сервис, который далее работает полностью автономно и пишет данные в файлы xls без участия Экселя. Эксель можно закрыть, запущенный сервис продолжит работать. После этого Эксель можно снова запустить и управлять сервисом через пользовательское меню Экселя.
Просьба поделиться опытом: что в этой затее рабочее и что нет.
Конкретные вопросы:
1) Почему c GetObject не получается получить объект ScriptControl, созданный в VBA? Приходится получать его через var ScriptControlObject = Excel.run('Get_ScriptControlObject ').
2) В какой момент ScriptControlObject перейдет из процесса Экселя в процесс nssm-скрипт-сервиса? После удаления ссылок на него в Экселе? А если после удаления ссылок на него в Экселе снова передать ссылки на него из сервиса в Эксель - он снова сменит процесс? Или: из какого процесса запускается исполнение кода в ScriptControlObject, тот процесс этот код и обслуживает?
Заренее благодарен за любые соображения и комментарии.