【问题标题】:Excel 2010 VBA - Pull Table from websiteExcel 2010 VBA - 从网站拉表
【发布时间】:2014-02-08 10:01:05
【问题描述】:

我是 Excel VBA 的新手,我得到了一些代码来玩。我成功修改过一次,但后来我再次尝试修改它,它不会提取正确的信息。可能是因为我不确定表 id?我不理解此示例中的所有代码……这可能是另一个问题。无论如何,我正试图从this page 中提取历史价格表。它提取了一些数据,但不是正确的数据。任何帮助,将不胜感激。谢谢!

这是我当前的代码:

Sub GrabHistData()

    Dim Ptrtbl As Long, r As Long, c As Long
    Dim htm As Object
    Dim elemCollection As Object

    Set htm = CreateObject("htmlFile")

    With CreateObject("msxml2.xmlhttp")
        .Open "GET", "http://finance.yahoo.com/q/hp?s=TWTR&a=04&b=30&c=2012&d=01&e=7&f=2014&g=d", False
        .send
        htm.body.innerhtml = .responsetext
    End With

    Set elemCollection = htm.getElementsByTagName("TABLE")

    Ptrtbl = 1
    For Each elem In elemCollection
        Ptrtbl = Ptrtbl + 1
        If elem.ID <> "yfncsumtab" Then GoTo Nxtelem
        With elemCollection(Ptrtbl)

                For c = 0 To (.Rows(r).Cells.Length - 1)
                    Cells(r + 1, c + 1) = .Rows(r).Cells(c).innertext
                Next c

        End With
        Exit For
Nxtelem:
    Next elem

End Sub

【问题讨论】:

  • THIS 帮忙吗?
  • 该页面上有一个“下载到 CSV”链接,您可以直接在 excel 中使用 http://ichart.finance.yahoo.com/table.csv?s=TWTR&amp;a=04&amp;b=30&amp;c=2012&amp;d=01&amp;e=7&amp;f=2014&amp;g=d&amp;ignore=.csv 作为路径打开文件(这与 URL 的模式或多或少相同)你试图从...刮)
  • 啊,好主意。我真的很喜欢 firefox 元素搜索选项。我现在也看到 csv 文件方法可能更容易。谢谢!

标签: vba excel


【解决方案1】:

如果您想坚持当前的方法,这对我有用...

Sub GrabHistData()
    Dim Ptrtbl As Long, r As Long, c As Long
    Dim htm As Object
    Dim elemCollection As Object

    Set htm = CreateObject("htmlFile")

    With CreateObject("msxml2.xmlhttp")
        .Open "GET", "http://finance.yahoo.com/q/hp?s=TWTR&a=04&b=30&c=2012&d=01&e=7&f=2014&g=d", False
        .send
        htm.body.innerhtml = .responseText
    End With

    Set elemCollection = htm.getElementsByTagName("td")
    For Each itm In elemCollection
        If itm.classname = "yfnc_tabledata1" Then
            ActiveCell = itm.innertext

            If ActiveCell.Column = 7 Then
                ActiveCell.Offset(1, -6).Select
            Else
                ActiveCell.Offset(0, 1).Select
            End If
        End If
    Next
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-06
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多