Excel VBA создает встроенный WebBrowser и использует его

4 oMG [2013-10-26 01:49:00]

Привет. Я пытаюсь динамически создавать веб-браузер внутри электронной таблицы, а затем использовать его, но функции WebBrowser не работают

Вот как я создаю WebBrowser

Set myWebBrowser = Sheets("test").OLEObjects.Add(ClassType:="Shell.Explorer.2", Link:=False, DisplayAsIcon:=False, left:=147, top:=60.75, width:=141, height:=96)

Это будет работать

myWebBrowser.top = 10

Но это даст мне ошибку

myWebBrowser.Navigate ("about:blank")

Любые идеи о том, что я должен сделать, спасибо

UPDATE:

Это также не сработает и даст ошибку:

myWebBrowser.Object.Document.body.Scroll = "no"
myWebBrowser.Object.Silent = True
myWebBrowser.Object.Navigate ("about:blank")
While myWebBrowser.Object.ReadyState <> READYSTATE_COMPLETE
    Application.Wait (Now + TimeValue("0:00:01"))
Wend
myWebBrowser.Object.Refresh

ОБНОВЛЕНИЕ 2 (почти там):

Теперь мне нужен способ удалить Sheet2.Activate Sheet1.Activate

Sheet2.Activate
Sheet1.Activate

Set wb = myWebBrowser.Object

With wb
    .Silent = True
    .Navigate "about:blank"
    Do While .ReadyState <> READYSTATE_COMPLETE
        Application.Wait (Now + TimeValue("0:00:01"))
    Loop
    .Document.Open "text/html"
    Do While .ReadyState <> READYSTATE_COMPLETE
        Application.Wait (Now + TimeValue("0:00:01"))
    Loop
    .Document.write html
    .Document.Close
    .Document.body.Scroll = "no"
    .Refresh
    Debug.Print .Document.body.innerHTML
End With

browser vba excel ole webbrowser-control


2 ответа


6 Решение Tim Williams [2013-10-26 01:58:00]

myWebBrowser.Object.Navigate "http://www.google.com"

более полный пример:

Sub AddWebBroswerToWorksheet()

    Dim myWebBrowser
    Dim wb, doc, x As Long

    Sheet2.Activate
    Sheet1.OLEObjects(1).Delete

    Set myWebBrowser = Sheet1.OLEObjects.Add(ClassType:="Shell.Explorer.2", _
                       Left:=147, Top:=60.75, Width:=400, Height:=400)

    Set wb = myWebBrowser.Object
    With wb
        .Navigate "about:blank"
        .Document.Open "text/html"
        For x = 1 To 100
        .Document.write "hello world<br>"
        Next x
        .Document.Close
        .Document.body.Scroll = "no"
        Debug.Print .Document.body.innerHTML
    End With
    Sheet1.Activate 'switching back to the sheet seems to 
    '               '   trigger the display of the object

End Sub

0 Noseratio [2013-10-26 04:16:00]

Вам нужно перекачать сообщения Windows внутри цикла WebBrowser.ReadyState <> READYSTATE_COMPLETE, чтобы это работало. Вызов DoEvents/Sleep внутри петель делает это, но имеет свои собственные последствия. Проверьте эти ответы для получения более подробной информации и примера кода:

qaru.site/questions/1172904/...

qaru.site/questions/1509055/...