以下宏工作正常。它打開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有效。 –