【发布时间】:2014-05-05 15:41:42
【问题描述】:
以下宏可以正常工作。它打开一个 IE 实例并使用“getelementsbyclassname”方法返回“my_rate”的预期值。但是,当我运行使用“MSXML2”方法的第二个宏时,宏在所指出的行上失败,并出现“运行时错误 438:对象不支持此属性或方法”错误。为什么“Open IE”方法有效,但“MSXML2”方法因我的代码而失败?我正在使用 IE 11 运行。我还为第二个宏设置了对 Microsoft HTML 对象库的引用,但它似乎没有什么不同。提前感谢您向我解释这一点。
Sub BankRate_Rate_Retrieval()
my_url = "http://www.bankrate.com/funnel/mortgages/mortgage-results.aspx?market=321&loan=150000&perc=20&prods=2&points=0"
Set ie = CreateObject("InternetExplorer.Application")
With ie
.Visible = True
.Navigate my_url
.Top = 50
.Left = 530
.Height = 400
.Width = 400
End With
Do Until Not ie.Busy And ie.readyState = 4
DoEvents
Loop
my_rate = ie.Document.getelementsbyclassname("br-col-2 br-apr")(1).getElementsByTagName("div")(0).innertext
End Sub
Sub BankRate_Rate_Retrieval()
my_url = "http://www.bankrate.com/funnel/mortgages/mortgage-results.aspx?market=321&loan=150000&perc=20&prods=2&points=0"
Set html_doc = CreateObject("htmlfile")
Set xml_obj = CreateObject("MSXML2.XMLHTTP")
xml_obj.Open "GET", my_url, False
xml_obj.send
html_doc.body.innerhtml = xml_obj.responseText
Set xml_obj = Nothing
my_rate = html_doc.body.getelementsbyclassname("br-col-2 br-apr")(1).getElementsByTagName("div")(0).innertext
' 运行时错误 438:对象不支持此属性或方法出现在上面的行
结束子
编辑:D. Zemens 的库截图
【问题讨论】:
-
只要您有 IE9+,HTML 对象库就应该可以工作。例如
Dim doc As HTMLDocument,然后是代码Set doc = New HTMLDocument: doc.body.innerHTML = xml_obj.responseText。那么Set el = doc.getelementsbyclassname("br-col-2 br-apr")应该可以吗? -
宾果游戏,行得通!我做了一些进一步的搜索,发现这是 getElementsByClassName 和 MSXML2 的一个已知的早期与晚期绑定问题。我的宏涉及后期绑定,您的方法涉及早期绑定;只有伯爵装订作品
-
我将 IE 从 IE7 更新到 IE11。现在 getElementsByClassName 可以工作了。
标签: vba internet-explorer excel getelementsbyclassname