以下宏工作正常。它打开IE的实例并使用“getelementsbyclassname”方法返回“my_rate”的期望值。但是,当我运行使用“MSXML2”方法的第二个宏时,宏在指定的行上失败,并且发生“运行时错误438:对象不支持此属性或方法”错误。为什么“Open IE”方法能够正常工作,但是“MSXML2”方法会因为我的代码而失败?我使用IE 11运行。我还为第二个宏设置了Microsoft HTML对象库的引用,但似乎没有什么区别。预先感谢您向我解释这一点。GetElementsbyClassname:打开IE与MSXML2方法
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”)'应该可以工作吗? – osknows
宾果,这工作!我做了一些进一步的搜索,发现它是getElementsByClassName和MSXML2的已知早期与后期绑定问题。我的宏涉及迟绑定,你的方法涉及早绑定;只有伯爵结合的作品 – ron
我将我的IE从IE7升级到了IE11。现在getElementsByClassName有效。 –