从VBA中的HTML源获取数据(excel)

时间:2012-08-04 02:14:08

标签: html string excel vba excel-vba

我正在尝试从网站收集数据,一旦源是字符串形式,这应该是可管理的。环顾四周,我已经收集了一些可能的解决方案但是遇到了所有问题:

  1. 使用InternetExplorer.Application打开网址,然后访问内部HTML
  2. 的Inet
  3. 使用Shell命令运行wget
  4. 以下是我遇到的问题:

    1. 当我将innerHTML存储到字符串中时,它不是整个源,只是一小部分
    2. ActiveX不允许创建Inet对象(错误429)
    3. 我已将htm放入计算机上的文件夹中,如何将其插入VBA中的字符串?
    4. 代码1:

      Sub getData()     Dim url As String,即As Object,状态为Integer     Dim text As Variant,startS As Integer,endS As Integer

      Set ie = CreateObject("InternetExplorer.Application")
      ie.Visible = 0
      
      url = "http://www.eoddata.com/stockquote/NASDAQ/AAPL.htm"
      ie.Navigate url
      
      
      state = 0
      Do Until state = 4
          DoEvents
          state = ie.readyState
      Loop
      
      
      text = ie.Document.Body.innerHTML
      startS = InStr(ie.Document.Body.innerHTML, "7/26/2012")
      endS = InStr(ie.Document.Body.innerHTML, "7/25/2012")
      
      
      text = Mid(ie.Document.Body.innerHTML, startS, endS - startS)
      
      MsgBox text
      

1 个答案:

答案 0 :(得分:1)

如果我试图从该页面的08/10/12开始关闭开盘价,这与我假设您正在做的类似,我会做这样的事情:

    Set ie = New InternetExplorer
    With ie
        .navigate "http://eoddata.com/stockquote/NASDAQ/AAPL.htm"
        .Visible = False
        While .Busy Or .readyState <> READYSTATE_COMPLETE
           DoEvents
        Wend
        Set objHTML = .document
        DoEvents
    End With
    Set elementONE = objHTML.getElementsByTagName("TD")
    For i = 1 To elementONE.Length
        elementTWO = elementONE.Item(i).innerText           
        If elementTWO = "08/10/12" Then
            MsgBox (elementONE.Item(i + 1).innerText)
            Exit For
        End If
    Next i
    DoEvents
    ie.Quit
    DoEvents
    Set ie = Nothing

您可以修改此项以运行HTML并提取您想要的任何数据。迭代+2会返回高价等等。

由于该页面上有很多日期,您可能还需要检查它是否在最近结束日价格与公司资料之间。