Excel VBA 创建嵌入式 WebBrowser 并使用它

Posted

技术标签:

【中文标题】Excel VBA 创建嵌入式 WebBrowser 并使用它【英文标题】:Excel VBA create an embedded WebBrowser and use it 【发布时间】:2013-11-05 04:56:36 【问题描述】:

您好,我正在尝试在电子表格中动态创建 Web 浏览器,然后使用它,但 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")

关于我应该怎么做的任何想法谢谢你

更新:

这也不起作用并给出错误:

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

【问题讨论】:

错误是什么?在您在控件中加载一些内容之前,没有“body”元素,因此您无法设置滚动属性... 运行时错误“91”:对象变量或未设置块变量 好的,我最后移动了它,但现在它挂在循环中:-( 【参考方案1】:

您需要在 WebBrowser.ReadyState &lt;&gt; READYSTATE_COMPLETE 循环中注入 Windows 消息才能使其正常工作。在循环内调用 DoEvents/Sleep 可以做到这一点,但有其自身的含义。查看这些答案以获取更多详细信息和示例代码:

https://***.com/a/19019200/1768303

https://***.com/a/19308865/1768303

【讨论】:

您好,谢谢您的回答,但我不认为这是问题所在。我发现,由于某种原因,当创建 Web 浏览器时,它会停留在某种设计模式中。如果我把这个 Sheet2.Activate Sheet1.Activate 放在代码之前,它将起作用。所以知道我正在尝试找到一种方法来退出设计模式,而无需两张纸并在它们之间进行更改。有没有人有线索>就像我在软糖里,我不能喝水:-P @oMG,尝试Workbook.ToggleFormsDesign 方法禁用设计模式。不管怎样,你仍然需要一个消息循环让WebBrowser 加载内容。 再次感谢您,但这没有用。我不想进入设计模式,而是从该模式中获取该对象。【参考方案2】:
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

【讨论】:

感谢您的回复,但这不起作用我在尝试上述代码时也遇到错误myWebBrowser.Object.Document.body.Scroll = "no" myWebBrowser.Object.Silent = True myWebBrowser.Object.Navigate ("about:blank") While myWebBrowser.Object.ReadyState &lt;&gt; READYSTATE_COMPLETE Application.Wait (Now + TimeValue("0:00:01")) Wend myWebBrowser.Object.Refresh @oMG - 请不要在 cmets 中添加代码:您可以使用新代码更新您的问题。 感谢您的帮助,但我对上面的代码有很多问题。首先,您至少需要两张工作表并在它们之间进行更改以刷新网络浏览器,即使这可以通过 hack 实现(创建激活的工作表,转到激活网络浏览器的工作表,删除工作表 - 不漂亮:-P)如果里面的html需要下载javascripts之类的代码是不行的,所以需要刷新。

以上是关于Excel VBA 创建嵌入式 WebBrowser 并使用它的主要内容,如果未能解决你的问题,请参考以下文章

将图像嵌入到 Excel 电子表格 - VBA

使用 VBA 将 Excel 中的图表嵌入到 Powerpoint 中的指定占位符中

怎样将EXCEL嵌入ASP.net网页中,象ASP下的VBA一样的效果,并将数据库的数据读取到EXCEL中?

Excel VBA 宏后期绑定

VBA MS Word表创建

Excel EXCEL中怎样用VBA来写图表