1 (изменено: omegastripes, 2014-04-21 11:20:53)

Тема: 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