2013-04-23 77 views
1

我有這樣的代碼應該引用公司名稱列「D」,並在雅虎財務爲股票代碼執行查詢。它在某些時候效果很好,其他的則不是股票代碼,而是我獲得「adchoices」。我不知道我在做什麼錯誤,任何幫助都將不勝感激。以下是代碼:VBA單元格引用Web查詢

Sub Company2Ticker() 

'Reference Microsoft internet internet controls and microsoft html library 

For i = 2 To 3000 
On Error Resume Next 
If Len(Cells(i, 1).Value) = 0 Then Exit For 

Dim IE As Object 
Set IE = CreateObject("InternetExplorer.Application") 
IE.Visible = False 

IE.navigate "http://finance.yahoo.com/lookup?s=" & Cells(i, 4).Value 

Do 
DoEvents 
Loop Until IE.readystate = readystate_complete 
Dim Doc As HTMLDocument 
Set Doc = IE.document 
Dim sDD As String 
sDD = Trim(Doc.getElementsbyTagName("td")(2).innertext) 
Cells(i, 6) = sDD 
Next i 
End Sub 

回答

1

您正在查詢的網頁顯示廣告。我的猜測是,這些廣告中的一部分(或任何其他隨機出現的<table>)在您尋找的那些廣告之前使用了<td>元素。 getElementsbyTagName()方法返回它找到的第一個結果,所以在這種情況下你不會得到你所期望的結果。

我建議通過一些替代sDD = Trim(Doc.getElementsbyTagName("td")(2).innertext)這樣的:

Dim j As Integer 
j = 2 
Do 
    sDD = Trim(Doc.getElementsbyTagName("td")(j).innertext) 
    j = j + 1 
Loop While sDD = "adchoices" 

編輯Loop While狀態,直到你可以過濾任何與廣告相關的結果。

希望它有幫助。

+0

謝謝。我會稍後再試,並告訴你它是否有效。我在編碼方面很新穎,我只是將來自各種源代碼的代碼拼湊在一起,所以我認爲從開始就效率低下。 – 2013-04-23 14:35:43