<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=142090&amp;view=findpost&amp;p=1627721</guid>
        <pubDate>Sat, 07 Jul 2007 18:35:42 +0000</pubDate>
        <title>Динамическое создание макроса</title>
        <link>https://forum.sources.ru/index.php?showtopic=142090&amp;view=findpost&amp;p=1627721</link>
        <description><![CDATA[lamer19: <a class='tag-url' href='http://www.sinor.ru/~my1c/knowhow/macrowrd.html' target='_blank'>СИНОР</a><br>
<br>
Примерно то же самое на примере WINWORD, на синоре вобщем-то то же не мало FAQ<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Процедура Сформировать()</div><div class="code_line">&nbsp;&nbsp; &nbsp; Попытка &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;W=СоздатьОбъект(&quot;Word.Application&quot;); </div><div class="code_line">&nbsp;&nbsp; &nbsp; Исключение</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Возврат;</div><div class="code_line">&nbsp;&nbsp; &nbsp; КонецПопытки;</div><div class="code_line">&nbsp;&nbsp; &nbsp; W.Documents.Add();</div><div class="code_line">&nbsp;&nbsp; &nbsp; i = W.VBE.ActiveVBProject.VBComponents.Count();</div><div class="code_line">&nbsp;&nbsp; &nbsp; W.VBE.ActiveVBProject.VBComponents.Add (1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; W.VBE.ActiveVBProject.VBComponents.Item(i + 1).CodeModule.InsertLines (1, &quot;Sub Golif()&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; W.VBE.ActiveVBProject.VBComponents.Item(i + 1).CodeModule.InsertLines (2, &quot;MsgBox &quot; + &quot;&quot;&quot;&quot; + &quot;Работает&quot; + &quot;&quot;&quot;&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; W.VBE.ActiveVBProject.VBComponents.Item(i + 1).CodeModule.InsertLines (3, &quot;End Sub&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; W.Application.Run (&quot;Golif&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; W=&quot;&quot;;</div><div class="code_line">КонецПроцедуры</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>lamer19</author>
        <category>Заготовки для 1C:FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=142090&amp;view=findpost&amp;p=1100031</guid>
        <pubDate>Sun, 14 May 2006 09:48:16 +0000</pubDate>
        <title>Динамическое создание макроса</title>
        <link>https://forum.sources.ru/index.php?showtopic=142090&amp;view=findpost&amp;p=1100031</link>
        <description><![CDATA[Rust: Мысль создать подобный пример пришла в голову недавно. Сам мастерил один отчет, где в файле Excel пришлось использовать макрос. Примеров на 1С я не нашел. Нашел подобный пример на сайте Майкрософт на VB6 (<strong class='tag-b'>KB 219905</strong>). Ну, а так как язык 1С недалеко ушел от васика, то немного подрихтовал пример на VB и всё.<br>
Думаю, пример будет полезен для <strong class='tag-b'>ФАК</strong>а (звучит то как  :D)<br>
Собственно сам пример:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Процедура КнопкаВыполнитьНажатие(Кнопка)</div><div class="code_line">&nbsp;&nbsp; Попытка</div><div class="code_line">&nbsp;&nbsp; &nbsp;Excel=Новый ComОбъект(&quot;Excel.Application&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;Книга = Excel.Workbooks.Add();</div><div class="code_line">&nbsp;&nbsp; &nbsp;//Собственно сам текст модуля на VB</div><div class="code_line">&nbsp;&nbsp; &nbsp;ТекстПроцедуры = &quot;Sub Workbook_Open()&quot; + Символы.ПС + &nbsp;&quot; MsgBox(&quot;&quot;Привет&quot;&quot;)&quot; + Символы.ПС + &quot;End sub&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;//Добавляем в модуль книги код на VB из текстовой переменной</div><div class="code_line">&nbsp;&nbsp; &nbsp;Книга.VBProject.VBComponents.Item(&quot;ЭтаКнига&quot;).CodeModule.AddFromString (ТекстПроцедуры);</div><div class="code_line">&nbsp;&nbsp; &nbsp;//Добавляем то же самое в код листа</div><div class="code_line">&nbsp;&nbsp; &nbsp;Книга.VBProject.VBComponents.Item(&quot;Лист1&quot;).CodeModule.AddFromString (ТекстПроцедуры);</div><div class="code_line">&nbsp;&nbsp; &nbsp;//Текст модуля можно также вставлять из текстового файла,</div><div class="code_line">&nbsp;&nbsp; &nbsp;// предварительно сохраненного с расширением bas</div><div class="code_line">&nbsp;&nbsp; &nbsp;Книга.VBProject.VBComponents(&quot;ЭтаКнига&quot;).CodeModule.AddFromFile (&quot;D:\ModuleTest.bas&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;//Так вставляется из файла обычный модуль</div><div class="code_line">&nbsp;&nbsp; &nbsp;Книга.VBProject.VBComponents.Import (&quot;D:\ModuleTest.bas&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;//Сохраняем</div><div class="code_line">&nbsp;&nbsp; &nbsp;Книга.SaveAs(&quot;D:\СозданиеМакроса.xls&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;//Закрываем Excel</div><div class="code_line">&nbsp;&nbsp; &nbsp;Книга.Close();</div><div class="code_line">&nbsp;&nbsp; &nbsp;Предупреждение(&quot;Файл готов &quot;&quot;D:\СозданиеМакроса.xls&quot;&quot;&quot;);</div><div class="code_line">&nbsp;&nbsp; Исключение</div><div class="code_line">&nbsp;&nbsp; &nbsp;Предупреждение(&quot;Не удалось создать файл Excel: &nbsp; &quot; + ОписаниеОшибки());</div><div class="code_line">&nbsp;&nbsp; КонецПопытки;</div><div class="code_line">КонецПроцедуры</div></ol></div></div></div></div><br>
<br>
текст модуля ModuleTest.bas<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&#39;Attribute VB_Name = &quot;ModuleTest&quot;</div><div class="code_line">Public Sub Test()</div><div class="code_line">&nbsp;&nbsp;MsgBox(&quot;Этот модуль вставили из текстового файла&quot;) &nbsp;</div><div class="code_line">End Sub</div></ol></div></div></div></div><br>
обратите внимание на первую закомментированную строчку.<br>
Если её раскомментировать, то при добавлении текста из файла как обычный модуль, имя модуля будет <strong class='tag-b'>ModuleTest</strong>. <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2006-05-14T09:52:46+00:00">14.05.06, 09:52</time></span></span><br>
У меня офис русский, поэтому имена книг и листов на русском. К компонентам можно обращаться также и по индексу. Например такая строка<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Книга.VBProject.VBComponents.Item(1).CodeModule.AddFromString (ТекстПроцедуры);</div></ol></div></div></div></div><br>
будет аналогична строке<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Книга.VBProject.VBComponents.Item(&quot;ЭтаКнига&quot;).CodeModule.AddFromString (ТекстПроцедуры);</div></ol></div></div></div></div><br>
Чуть не забыл самое главное - чтобы при создании макроса не вылетала ошибка, нужно разрешить программный доступ к среде VB. Как это сделать? - В Экселе пункт меню Сервис -&gt; Макрос -&gt; Безопасность -&gt; Вкладка надежные издатели -&gt; поставить галку Доверять доступ к Visual Basic Project]]></description>
        <author>Rust</author>
        <category>Заготовки для 1C:FAQ</category>
      </item>
	
      </channel>
      </rss>
	