VBA单元格引用Web查询

时间:2013-04-23 12:26:28

标签: vba web excel-web-query

我有这个代码,它应该引用公司名称的“D”列,并在yahoo finance上为股票代码执行查询。它在某些时候效果很好,其他人而不是股票符号我得到“adchoices”。我不确定我做错了什么,任何帮助都不仅仅是值得赞赏的。这是代码:

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 个答案:

答案 0 :(得分: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条件,直到您可以过滤任何与广告相关的结果。

希望它有所帮助。