【问题标题】:VBA Cell Referenced Web QueryVBA 单元格引用的 Web 查询
【发布时间】:2013-04-23 12:26:27
【问题描述】:

我有这段代码,它应该引用列“D”作为公司名称,并在 yahoo Finance 上查询股票代码。它在某些时候效果很好,其他时候我得到“选择”而不是股票代码。我不确定我做错了什么,任何帮助都将不胜感激。代码如下:

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

【问题讨论】:

    标签: vba web excel-web-query


    【解决方案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 条件,直到您可以过滤任何与广告相关的结果。

    希望对你有帮助。

    【讨论】:

    • 谢谢。我稍后会尝试这个,让你知道它是否有效。我是编码新手,我只是从各种来源拼凑我的代码,所以我认为它从一开始就效率低下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 2019-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多