Тема: VBS/VBA: Обращение к переменным и функциям глобального объекта в IE
Ниже приведены скрипт VBS и макрос VBA Excel. VBS обращается к IE без ошибок, а VBA не видит объявленных переменных и функций. В чем может быть причина? И как можно получить доступ из VBA к объявленным объектам в IE?
Код VBS:
Sub Test()
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
objIE.Navigate "about:blank"
Do While objIE.readyState <> 4
WScript.Sleep 10
Loop
Set objDoc = objIE.document
Set objWnd = objDoc.parentWindow
objWnd.execScript "function myfunc() {alert('test')};", "javascript"
objWnd.myfunc ' --> "test"
Set objDict = CreateObject("Scripting.Dictionary")
objWnd.execScript "var mydict;", "javascript"
Set objWnd.mydict = objDict
objWnd.mydict.Add 0, "first"
objWnd.execScript "alert(mydict(0));", "javascript" ' --> "first"
objWnd.execScript "mydict.add(1, 0xFF);", "javascript"
MsgBox objDict(1) ' --> 255
objIE.Quit
End Sub
Код VBA:
Sub Test()
' Tools - References - Add ref to:
' Microsoft Internet Controls
' Microsoft HTML Object Library
' Microsoft Scripting Runtime
Dim objIE As InternetExplorer
Dim objDoc As HTMLDocument
Dim objWnd As HTMLWindow2
Dim objDict As Scripting.Dictionary
'Set objIE = CreateObject("InternetExplorer.Application")
Set objIE = New InternetExplorer
objIE.Visible = True
objIE.Navigate "about:blank"
Do While objIE.readyState <> 4
DoEvents
Loop
Set objDoc = objIE.document
Set objWnd = objDoc.parentWindow
objWnd.execScript "function myfunc() {alert('test')};", "javascript"
objWnd.myfunc ' --> Object doesn't support this property or method
'Set objDict = CreateObject("Scripting.Dictionary")
Set objDict = New Scripting.Dictionary
objWnd.execScript "var mydict;", "javascript"
Set objWnd.mydict = objDict ' --> Object doesn't support this property or method
objWnd.mydict.Add 0, "first"
objWnd.execScript "alert(mydict(0));", "javascript"
objWnd.execScript "mydict.add(1, 0xFF);", "javascript"
MsgBox objDict(1)
objIE.Quit
End Sub
Проверялось на IE версии 11.0.9600.17041, MS Office Excel 2003, Win 7 HB x64.
objIE.FullName как для VBA, так и для VBS соответстует "C:\Program Files (x86)\Internet Explorer\IEXPLORE.EXE".
Для VBA безотказным я вижу обмен только строковыми значениями через document.title или аттрибут определенного узла DOM, навроде body.id.
’ҐЄгй п Є®¤®ў п бва Ёж : 1251