将变量声明为 Internet Explorer 会生成编译错误:未定义用户定义的类型



我需要一些帮助来调整我的代码。运行它时,我收到一个错误,说编译错误:用户定义的类型未在行Dim objIE As Internet Explorer上定义。

如果我删除上面的行,我会得到同样的错误Dim aEle as HTMLLinkElement.

代码如下:

Sub SearchBot()
Dim objIE As InternetExplorer
Dim aEle As HTMLLinkElement
Dim y As Integer
Dim result As String
Dim tbl As Object, obj_tbl As Object
Dim lastRow As Long
Dim start_time As Date
Dim end_time As Date
Dim cookie As String
Dim result_cookie As String
Set objIE = New InternetExplorer
objIE.Visible = True
objIE.navigate "https://website.com"
Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop
For i = 2 To 1829

objIE.document.getElementById("SearchTopBar").Value = _
Sheets("Sheet2").Range("A" & i).Value  '
Set oNode = objIE.document.getElementsByClassName("iPadHack tmbsearchright") 
(0)
oNode.Click
On Error GoTo ErrorHandler
Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop
Dim tblEle As Object
Set tblEle = objIE.document.getElementsByClassName("cTblListBody")(5)
Sheets("Sheet2").Range("B" & i).Value = tblEle.innerText
Debug.Print tblEle.innerText
Next
On Error GoTo ErrorHandler
Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop
Dim tblEle As Object
Set tblEle = objIE.document.getElementsByClassName("cTblListBody")(5)
Sheets("Sheet2").Range("B" & i).Value = tblEle.innerText
Debug.Print tblEle.innerText
NextItem:
Next
ErrorHandler
Resume NextItem
Resume Next
objIE.Quit
End Sub

Excel需要知道VBA代码中的对象是什么。如果遇到未知类型,则需要添加对该对象的代码 (DLL( 的引用。通过单击在 VBA 中添加引用Tools -> References.计算机上注册的所有 COM 库将自动显示在列表中。

若要使InternetExplorer对象正常工作,请添加对Microsoft Internet Controls的引用

若要使HTMLLinkElement对象正常工作,请添加对Microsoft HTML Object Library的引用

如前所述,如果要使用早期绑定代码,则需要添加适当的引用库,以便程序知道它正在处理的内容并可以访问适当的属性和方法。Microsoft Internet ControlsMicrosoft HTML Object Library都是"标准的",您可以将这些引用添加到要分发给其他用户的项目中,其他用户可能使用同一Microsoft应用程序的不同版本,而不必担心由于版本控制而丢失的引用错误。

Microsoft在反垄断和解中付出了很多钱,以便每个人都拥有MSHTML/IE。另见United States v. Microsoft Corp. 感谢用户ThunderFrame对我的教育。

解决此问题的典型方法,特别是对于其他依赖于版本的库,是为您的开发编写早期绑定代码,因为您可以访问 intellisense 和完整的库以加快开发速度(查看好处/差异的完整列表(。对于分发,将引用转换为后期绑定以避免版本控制问题。正如我所说,对于提到的"标准"两个库来说,这应该不是真正的问题,但值得了解区别,后期绑定版本是:

Dim IeApp As Object
Set IeApp As CreateObject("InternetExplorer.Application")
Dim hFile As Object
Set hFile = CreateObject("htmlFile")

请注意,声明的类型为object。在这种情况下,变量名称只是个人选择。

特别是,后期绑定 htmlFile 调用将公开一个更有限的接口,并且您将拥有较少的与早期绑定类关联的常用方法和属性。

Microsoft有关早期/晚期绑定的信息:

在自动化中使用早期绑定和晚期绑定

最新更新