<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBA: Обход ограничений на запуск макросов]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=5580&amp;type=atom" />
	<updated>2011-08-14T17:58:51Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=5580</id>
		<entry>
			<title type="html"><![CDATA[Re: VBA: Обход ограничений на запуск макросов]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=50638#p50638" />
			<content type="html"><![CDATA[<p>Нашел <a href="http://xlecom.com/?q=node/16">статейку о разрешении выполнении макросов Excel</a>.</p><p>Вот одно из решений проблемы:<br /></p><div class="codebox"><pre><code>REGEDIT4

[HKEY_LOCAL_MACHINE\Software\Microsoft\Office\9.0\Excel\Security]
&quot;XLM&quot;=dword:00000001
[HKEY_LOCAL_MACHINE\Software\Microsoft\Office\10.0\Excel\Security]
&quot;XLM&quot;=dword:00000001
[HKEY_LOCAL_MACHINE\Software\Microsoft\Office\11.0\Excel\Security]
&quot;XLM&quot;=dword:00000001</code></pre></div>]]></content>
			<author>
				<name><![CDATA[JSmаn]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24434</uri>
			</author>
			<updated>2011-08-14T17:58:51Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=50638#p50638</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBA: Обход ограничений на запуск макросов]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=46051#p46051" />
			<content type="html"><![CDATA[<p>Ясно. Благодарю. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p><p>--</p><p>Значит наверное всё таки решу вопрос, добавлением и удалением ключиков в реестре.</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2011-03-11T09:18:06Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=46051#p46051</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBA: Обход ограничений на запуск макросов]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=46050#p46050" />
			<content type="html"><![CDATA[<p>Проверил в Office 2003. Работает в том случае, если разрешён доступ к VB Project. Если убрать разрешение - не работает.</p>]]></content>
			<author>
				<name><![CDATA[VSVLAD]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24998</uri>
			</author>
			<updated>2011-03-11T09:16:46Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=46050#p46050</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[VBA: Обход ограничений на запуск макросов]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=46047#p46047" />
			<content type="html"><![CDATA[<p>И снова здраствуйте. ) Сегодня ковырялся с VBA кодом. На сайте фоурма в разделе управления офисом нашёл код вызова <strong>API</strong> функции <strong>Beep</strong><br /><a href="http://script-coding.com/MSOffice.html">Windows Scripting: MS Office</a></p><div class="codebox"><pre><code>&#039;Создание объекта Word:
&#039;Set objOffice = CreateObject(&quot;Word.Application&quot;)
&#039;objOffice.Documents.Add
&#039;Примечание: если в момент запуска этого скрипта Word уже запущен, в момент удаления временного
&#039;модуля VBA произойдёт конфликт доступа к Normal.dot.

&#039;Создание объекта Excel:
Set objOffice = CreateObject(&quot;Excel.Application&quot;)
objOffice.DisplayAlerts = False
Set objWorkBook = objOffice.WorkBooks.Add
objWorkBook.Worksheets.Add

i = objOffice.VBE.ActiveVBProject.VBComponents.Count
objOffice.VBE.ActiveVBProject.VBComponents.Add 1
Set objModule = objOffice.VBE.ActiveVBProject.VBComponents.Item(i + 1)
With objModule.CodeModule
    .InsertLines 1,  &quot;Public Declare Function Beep Lib &quot;&quot;kernel32&quot;&quot; _&quot;
    .InsertLines 2,  &quot;(ByVal dwFreq As Long, ByVal dwDuration As Long) As Long&quot;
    .InsertLines 3,  &quot;Sub TestSub(Caption as String, Text as String)&quot;
    .InsertLines 4,  &quot;    MsgBox Text, vbOkOnly + vbInformation, Caption&quot;
    .InsertLines 5,  &quot;End Sub&quot;
    .InsertLines 6,  &quot;Sub TestBeep()&quot;
    .InsertLines 7,  &quot;    res = Beep(500, 100)&quot;
    .InsertLines 8,  &quot;    res = Beep(550, 100)&quot;
    .InsertLines 9,  &quot;    res = Beep(600, 100)&quot;
    .InsertLines 10, &quot;    res = Beep(650, 100)&quot;
    .InsertLines 11, &quot;    res = Beep(700, 100)&quot;
    .InsertLines 12, &quot;    res = Beep(650, 100)&quot;
    .InsertLines 13, &quot;    res = Beep(600, 100)&quot;
    .InsertLines 14, &quot;    res = Beep(550, 100)&quot;
    .InsertLines 15, &quot;    res = Beep(500, 700)&quot;
    .InsertLines 16, &quot;End Sub&quot;
End With
objOffice.Application.Run &quot;TestSub&quot;, &quot;Test VBA&quot;, &quot;Сейчаc будет произведён вызов Win32 API функции Beep()...&quot;
objOffice.Application.Run &quot;TestBeep&quot;
&#039;Следующая строка нужна, если используется Word:
&#039;objOffice.VBE.ActiveVBProject.VBComponents.Remove objModule
objOffice.Quit</code></pre></div><p>Запустив у себя, получил сообщение о том что &quot;Программный доступ к проекту Visual Basic не является доверенным.&quot;<br />Эта несправедливость меня несколько огорчила. Порыв в инете, наткнулся на то, что эта проблема решается ручным переключением безопасности в настройках офиса либо добавлением данных в реестр. Ну совсем расстроило. Решил обойти эту проблему.</p><div class="codebox"><pre><code>Set Document = CreateObject(&quot;Word.Document&quot;)
Set VBComponent = Document.VBProject.VBComponents.Add(1)
With VBComponent.CodeModule
    .InsertLines 1,  &quot;Public Declare Function Beep Lib &quot;&quot;kernel32&quot;&quot; _&quot;
    .InsertLines 2,  &quot;(ByVal dwFreq As Long, ByVal dwDuration As Long) As Long&quot;
    .InsertLines 3,  &quot;Sub TestSub(Caption as String, Text as String)&quot;
    .InsertLines 4,  &quot;    MsgBox Text, vbOkOnly + vbInformation, Caption&quot;
    .InsertLines 5,  &quot;End Sub&quot;
    .InsertLines 6,  &quot;Sub TestBeep()&quot;
    .InsertLines 7,  &quot;    res = Beep(400, 400)&quot;
    .InsertLines 16, &quot;End Sub&quot;
End With
Document.Application.Run &quot;TestBeep&quot;</code></pre></div><p>Вот что получилось. Хотелось узнать - действительно это работает или я свой комп уже так замучал, что он на всё согласен ?</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2011-03-11T09:07:08Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=46047#p46047</id>
		</entry>
</feed>
