<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBA -> WSH: обмен объектами между скриптами - детали]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=15686</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=15686&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBA -> WSH: обмен объектами между скриптами - детали».]]></description>
		<lastBuildDate>Wed, 21 Oct 2020 12:34:30 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBA -> WSH: обмен объектами между скриптами - детали]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=142701#p142701</link>
			<description><![CDATA[<div class="quotebox"><cite>expertykt пишет:</cite><blockquote><p>На роль другого процесса знаю только одного кандидата: nssm-скрипт-сервис.</p></blockquote></div><p>А чем не устраивает wscript.exe? Может и ScriptControl будет не нужен.</p>]]></description>
			<author><![CDATA[null@example.com (omegastripes)]]></author>
			<pubDate>Wed, 21 Oct 2020 12:34:30 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=142701#p142701</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBA -> WSH: обмен объектами между скриптами - детали]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=142282#p142282</link>
			<description><![CDATA[<p><strong>expertykt</strong>,<br />1) Сервер автоматизации это как раз в явном виде <strong>Word.Application / Excel.Application / InternetExplorer.Application</strong> и подобные им. При создании таких объектов через CreateObject(&quot;...&quot;) создаётся отдельный процесс, который и олицетворяет &quot;сервер автоматизации&quot;. И как раз через GetObject(&quot;...&quot;) возвращается ссылка на созданный объект. ScriptControl таковым не является. Но в случае необходимости можно и ScriptControl передать через подобный механизм.</p><p>2) </p><div class="quotebox"><blockquote><p>И после закрытия Экселя объект будет удерживать его процесс от удаления?</p></blockquote></div><p>Ни в коем случае. Закрытие процесса естественно приводит к уничтожению всех объектов внутри процесса.</p>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Wed, 23 Sep 2020 18:37:47 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=142282#p142282</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBA -> WSH: обмен объектами между скриптами - детали]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=142267#p142267</link>
			<description><![CDATA[<div class="quotebox"><cite>Xameleon пишет:</cite><blockquote><p> GetObject может получать только объекты глобально зарегистрированные</p></blockquote></div><p>В справке говорится о &quot;серверах автоматизации&quot;. т.е. ScriptControl не <a href="https://docs.microsoft.com/ru-ru/cpp/mfc/automation-servers?view=vs-2019">OLE</a>.</p><div class="quotebox"><cite>Xameleon пишет:</cite><blockquote><p>Опять же, насколько мне известно, объекты не переходят от процесса к процессу. Они создаются в пределах исходного процесса и с ним живут до удаления <span class="bbu">всех ссылок</span>. Поэтому если вы создали объект в пределах экселя и отдали ссылку на него в другой процесс, то не смотря на последующее удаление всех ссылок в экселе, объект продолжит своё существование в том же экселе. И только когда удалится ссылка в стороннем процессе, удалится и объект в экселе.</p></blockquote></div><p>И после закрытия Экселя объект будет удерживать его процесс от удаления?</p>]]></description>
			<author><![CDATA[null@example.com (expertykt)]]></author>
			<pubDate>Wed, 23 Sep 2020 05:24:43 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=142267#p142267</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBA -> WSH: обмен объектами между скриптами - детали]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=142247#p142247</link>
			<description><![CDATA[<div class="quotebox"><cite>expertykt пишет:</cite><blockquote><p>1) Почему c GetObject не получается получить объект ScriptControl, созданный в VBA? Приходится получать его через var ScriptControlObject = Excel.run(&#039;Get_ScriptControlObject &#039;).</p></blockquote></div><p>Насколько мне известно, потому что GetObject может получать только объекты глобально зарегистрированные либо создавать их через моникеры. </p><div class="quotebox"><cite>expertykt пишет:</cite><blockquote><p>2) В какой момент ScriptControlObject перейдет из процесса Экселя в процесс nssm-скрипт-сервиса? После удаления ссылок на него в Экселе? А если после удаления ссылок на него в Экселе снова передать ссылки на него из сервиса в Эксель - он снова сменит процесс? Или: из какого процесса запускается исполнение кода в ScriptControlObject, тот процесс этот код и обслуживает?</p></blockquote></div><p>Опять же, насколько мне известно, объекты не переходят от процесса к процессу. Они создаются в пределах исходного процесса и с ним живут до удаления <span class="bbu">всех ссылок</span>. Поэтому если вы создали объект в пределах экселя и отдали ссылку на него в другой процесс, то не смотря на последующее удаление всех ссылок в экселе, объект продолжит своё существование в том же экселе. И только когда удалится ссылка в стороннем процессе, удалится и объект в экселе.</p><p>Если есть желание вытащить выполнение кода за пределы экселя, то тогда, как мне видится, Вам стоит создать JS / WSF скрипт, который будет создавать Excel.Application и из него же управлять внутренним функционалом экселя, а все вычисления выполнять внутри себя (скрипта). Но тут опять же нужны подробности задачи для принятия правильного решения. Возможно вообще можно обойтись без громоздкого и неповоротливого Excel-я.</p>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Tue, 22 Sep 2020 09:07:07 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=142247#p142247</guid>
		</item>
		<item>
			<title><![CDATA[VBA -> WSH: обмен объектами между скриптами - детали]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=142245#p142245</link>
			<description><![CDATA[<p>Так сложилось, что есть востребованный код на VBA(надстройка), которым реально пользуются. Не совсем на VBA: VBA создает объект ScriptControl, подгружает в него код на JScript и управляет его выполнением через пользовательское меню Excel.<br />Код работает сутками (конечно, можно поставить на паузу или прервать, но лень же) и этим затрудняет пользование Экселем - оставлена такая возможность. Такое пользование Экселем в процессе выполнения скрипта быстро прерывает его выполнение. При этом процесс Экселя за сутки пухнет до неприличия (поиск в листах и запись в них). <br />Хотелось бы по-возможности сократить конфликты скрипта и Экселя, чтобы они могли работать не критично мешая друг другу.<br />В качестве такой меры предполагается как-то вынести исполнение кода в объекте ScriptControl за пределы процесса Экселя. Хотелось бы сделать это попроще - взять готовый объект и передать его в другой процесс.<br />На роль другого процесса знаю только одного кандидата: nssm-скрипт-сервис.<br />Предпочтительной выглядит такая схема: из Экселя запускается nssm-скрипт-сервис, который далее работает полностью автономно и пишет данные в файлы xls без участия Экселя. Эксель можно закрыть, запущенный сервис продолжит работать. После этого Эксель можно снова запустить и управлять сервисом через пользовательское меню Экселя. </p><p>Просьба поделиться опытом: что в этой затее рабочее и что нет. <br />Конкретные вопросы:<br />1) Почему c GetObject не получается получить объект ScriptControl, созданный в VBA? Приходится получать его через var ScriptControlObject = Excel.run(&#039;Get_ScriptControlObject &#039;).<br />2) В какой момент ScriptControlObject перейдет из процесса Экселя в процесс nssm-скрипт-сервиса? После удаления ссылок на него в Экселе? А если после удаления ссылок на него в Экселе снова передать ссылки на него из сервиса в Эксель - он снова сменит процесс? Или: из какого процесса запускается исполнение кода в ScriptControlObject, тот процесс этот код и обслуживает?</p><p>Заренее благодарен за любые соображения и комментарии.</p>]]></description>
			<author><![CDATA[null@example.com (expertykt)]]></author>
			<pubDate>Tue, 22 Sep 2020 05:55:40 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=142245#p142245</guid>
		</item>
	</channel>
</rss>
