<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBS/VBA: Обращение к переменным и функциям глобального объекта в IE]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=9514&amp;type=atom" />
	<updated>2014-04-20T22:53:06Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=9514</id>
		<entry>
			<title type="html"><![CDATA[VBS/VBA: Обращение к переменным и функциям глобального объекта в IE]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=82062#p82062" />
			<content type="html"><![CDATA[<p>Ниже приведены скрипт VBS и макрос VBA Excel. VBS обращается к IE без ошибок, а VBA не видит объявленных переменных и функций. В чем может быть причина? И как можно получить доступ из VBA к объявленным объектам в IE?</p><p><strong>Код VBS:</strong><br /></p><div class="codebox"><pre><code>Sub Test()
    
    Set objIE = CreateObject(&quot;InternetExplorer.Application&quot;)
    objIE.Visible = True
    objIE.Navigate &quot;about:blank&quot;
    Do While objIE.readyState &lt;&gt; 4
        WScript.Sleep 10
    Loop
    Set objDoc = objIE.document
    Set objWnd = objDoc.parentWindow
    
    objWnd.execScript &quot;function myfunc() {alert(&#039;test&#039;)};&quot;, &quot;javascript&quot;
    objWnd.myfunc &#039; --&gt; &quot;test&quot;
    
    Set objDict = CreateObject(&quot;Scripting.Dictionary&quot;)
    objWnd.execScript &quot;var mydict;&quot;, &quot;javascript&quot;
    Set objWnd.mydict = objDict
    objWnd.mydict.Add 0, &quot;first&quot;
    objWnd.execScript &quot;alert(mydict(0));&quot;, &quot;javascript&quot; &#039; --&gt; &quot;first&quot;
    objWnd.execScript &quot;mydict.add(1, 0xFF);&quot;, &quot;javascript&quot;
    MsgBox objDict(1) &#039; --&gt; 255
    
    objIE.Quit
    
End Sub</code></pre></div><p><strong>Код VBA:</strong><br /></p><div class="codebox"><pre><code>Sub Test()
    
    &#039; Tools - References - Add ref to:
    &#039; Microsoft Internet Controls
    &#039; Microsoft HTML Object Library
    &#039; Microsoft Scripting Runtime
    Dim objIE As InternetExplorer
    Dim objDoc As HTMLDocument
    Dim objWnd As HTMLWindow2
    Dim objDict As Scripting.Dictionary
    
    &#039;Set objIE = CreateObject(&quot;InternetExplorer.Application&quot;)
    Set objIE = New InternetExplorer
    objIE.Visible = True
    objIE.Navigate &quot;about:blank&quot;
    Do While objIE.readyState &lt;&gt; 4
        DoEvents
    Loop
    Set objDoc = objIE.document
    Set objWnd = objDoc.parentWindow
    
    objWnd.execScript &quot;function myfunc() {alert(&#039;test&#039;)};&quot;, &quot;javascript&quot;
    objWnd.myfunc &#039; --&gt; Object doesn&#039;t support this property or method
    
    &#039;Set objDict = CreateObject(&quot;Scripting.Dictionary&quot;)
    Set objDict = New Scripting.Dictionary
    objWnd.execScript &quot;var mydict;&quot;, &quot;javascript&quot;
    Set objWnd.mydict = objDict &#039; --&gt; Object doesn&#039;t support this property or method
    objWnd.mydict.Add 0, &quot;first&quot;
    objWnd.execScript &quot;alert(mydict(0));&quot;, &quot;javascript&quot;
    objWnd.execScript &quot;mydict.add(1, 0xFF);&quot;, &quot;javascript&quot;
    MsgBox objDict(1)
    
    objIE.Quit
    
End Sub</code></pre></div><p>Проверялось на IE версии 11.0.9600.17041, MS Office Excel 2003, Win 7 HB x64.<br />objIE.FullName как для VBA, так и для VBS соответстует &quot;C:\Program Files (x86)\Internet Explorer\IEXPLORE.EXE&quot;.</p><p>Для VBA безотказным я вижу обмен только строковыми значениями через document.title или аттрибут определенного узла DOM, навроде body.id.</p>]]></content>
			<author>
				<name><![CDATA[omegastripes]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=29228</uri>
			</author>
			<updated>2014-04-20T22:53:06Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=82062#p82062</id>
		</entry>
</feed>
