如何将浏览器嵌入Excel VBA表单中?

时间:2018-07-24 14:30:07

标签: excel vba webbrowser-control

过去,我在许多VB6和Excel VBA表单中都使用了Microsoft WebBrowser控件。我需要再做一次,但是我不知道该怎么做。

我尝试打开一个旧的VB6项目,但收到此错误消息:

Line 17: Class SHDocVwCtl.WebBrowser of control WebBrowser was not a loaded control class.

我尝试将对Microsoft Web Browser的引用添加到一个新的VBA项目中,但是它不存在。

我尝试按照建议的here添加对msi.dll的引用,但没有帮助。

我从开发人员功能区尝试-插入-更多控件-Microsoft Web浏览器,它确实存在,但是显示Cannot insert object

我尝试按照here的描述使用Shell.Explorer.2对象,但出现错误:

Sheet1.OLEObjects.Add ClassType:="Shell.Explorer.2", Left:=147, Top:=60.75, Width:=400, Height:=400

Run-time error '1004': 
Cannot insert object.

唯一可行的方法是打开IE窗口,但是我需要将浏览器嵌入表单中,因为我需要添加一些自定义按钮:

Set IE = CreateObject("InternetExplorer.Application") 
IE.Visible = True

1 个答案:

答案 0 :(得分:2)

我无法像以前那样使旧的Web浏览器控件出现在VBA控件工具箱中,但是我能够从代码中将其动态插入到表单中。因此,我无法将小地球仪拖动到表单中,但这不是问题。

一些评论提到更改注册表中的值。这是将嵌入式浏览器插入工作表中所必需的,但是对表单没有影响。

添加对Microsoft Internet控件(ieframe.dll)的引用,然后以一种形式使用以下代码就足够了:

Option Explicit

Private WithEvents WB As WebBrowser

Private Sub UserForm_Activate()
  Set WB = Me.Controls.Add("Shell.Explorer.2")
  WB.Navigate "http://google.com"
End Sub

Private Sub WB_NavigateComplete2(ByVal pDisp As Object, URL As Variant)
  Debug.Print "WB_NavigateComplete2"
End Sub

编辑

@VictorK在评论中提醒我,我需要右键单击工具箱以添加控件。我确实记得添加引用后在其中添加了控件,但是我不记得(也不认为)右键单击并添加控件。

所以...我要做的就是添加对ieframe.dll的引用而不是Microsoft Web Browser,只是因为Microsoft Web Browser不在列表中。其他一切似乎都正常。

我仍然不知道为什么旧的VB6应用程序无法加载,但是现在我真的不在乎。