excel vba http请求从雅虎财务下载数据

我正在制作一个使用excel vba编写程序的过程。

该程序从asx下载股市数据。

我想从2个url获取数据:

我的代码

url2 = "http://ichart.finance.yahoo.com/table.txt?s=bhp.ax" Set XMLHTTP = CreateObject("WinHttp.WinHttpRequest.5.1") XMLHTTP.Open "GET", url2, False XMLHTTP.send result = XMLHTTP.responseText ActiveCell.Value = result Set XMLHTTP = Nothing URL 1. http://ichart.finance.yahoo.com/table.txt?s=bhp.ax 

我的问题。

这个文件非常大。 我以为我可以简单地存储这些HTTP请求的结果,并打印到debugging窗口或直接到一个单元格。 然而,这些方法似乎切断了部分数据?

如果我从记事本+ +的url2下载txt文件它有近200 000个字符,但它擅长它有3-5 000.处理这些请求,以便所有的数据被捕获,我可以parsing所有这些最好的方法是什么后来?

来自第一个URL的URL 2.我只想要从YQL查询得到的JSON数据。

我的问题

我不知道如何获取JSON数据,当你按照下面的链接,或如何存储它,使URL 1(缺less数据)遇到的问题不会发生。

http://developer.yahoo.com/yql/console/?q=select%20symbol%2C%20ChangeRealtime%20from%20yahoo.finance.quotes%20where%20symbol%20in%20%28%22YHOO%22%2C%22AAPL %22%2C%22GOOG%22%2C%22MSFT%22%29%20 |%20sort%28field%3D%22ChangeRealtime%22%2C%20descending%3D%22true%22%29%0A%09%09&ENV = HTTP% 3A%2F%2Fdatatables.org%2Falltables.env#h = select%20 *%20from%20yahoo.finance.quotes%20where%20symbol%20in%20%28%22bhp.ax%22%29

非常感谢,乔希。

试试这个修订的代码

 Sub GetYahooFinanceTable() Dim sURL As String, sResult As String Dim oResult As Variant, oData As Variant, R As Long, C As Long sURL = "http://ichart.finance.yahoo.com/table.txt?s=bhp.ax" Debug.Print "URL: " & sURL sResult = GetHTTPResult(sURL) oResult = Split(sResult, vbLf) Debug.Print "Lines of result: " & UBound(oResult) For R = 0 To UBound(oResult) oData = Split(oResult(R), ",") For C = 0 To UBound(oData) ActiveSheet.Cells(R + 1, C + 1) = oData(C) Next Next Set oResult = Nothing End Sub Function GetHTTPResult(sURL As String) As String Dim XMLHTTP As Variant, sResult As String Set XMLHTTP = CreateObject("WinHttp.WinHttpRequest.5.1") XMLHTTP.Open "GET", sURL, False XMLHTTP.Send Debug.Print "Status: " & XMLHTTP.Status & " - " & XMLHTTP.StatusText sResult = XMLHTTP.ResponseText Debug.Print "Length of response: " & Len(sResult) Set XMLHTTP = Nothing GetHTTPResult = sResult End Function 

这将把数据拆分成行,所以单元格中的最大文本长度不会达到。 这也进一步用逗号分隔数据到相应的列。

在这里输入图像说明

您可能想尝试以下代码: http://investexcel.net/importing-historical-stock-prices-from-yahoo-into-excel/

我只是修改qurlvariables到您的url,它的工作,它倒4087行数据到我的Excel表格,很好地格式化没有任何问题。 只需将您的sheet1命名为Data。

  Sub GetData() Dim DataSheet As Worksheet Dim EndDate As Date Dim StartDate As Date Dim Symbol As String Dim qurl As String Dim nQuery As Name Dim LastRow As Integer Application.ScreenUpdating = False Application.DisplayAlerts = False Application.Calculation = xlCalculationManual Sheets("Data").Cells.Clear Set DataSheet = ActiveSheet ' StartDate = DataSheet.Range("startDate").Value ' EndDate = DataSheet.Range("endDate").Value ' Symbol = DataSheet.Range("ticker").Value ' Sheets("Data").Range("a1").CurrentRegion.ClearContents ' qurl = "http://ichart.finance.yahoo.com/table.csv?s=" & Symbol ' qurl = qurl & "&a=" & Month(StartDate) - 1 & "&b=" & Day(StartDate) & _ ' "&c=" & Year(StartDate) & "&d=" & Month(EndDate) - 1 & "&e=" & _ ' Day(EndDate) & "&f=" & Year(EndDate) & "&g=" & Sheets("Data").Range("a1") & "&q=q&y=0&z=" & _ ' Symbol & "&x=.csv" qurl = "http://ichart.finance.yahoo.com/table.txt?s=bhp.ax" Debug.Print qurl QueryQuote: With Sheets("Data").QueryTables.Add(Connection:="URL;" & qurl, Destination:=Sheets("Data").Range("a1")) .BackgroundQuery = True .TablesOnlyFromHTML = False .Refresh BackgroundQuery:=False .SaveData = True End With Sheets("Data").Range("a1").CurrentRegion.TextToColumns Destination:=Sheets("Data").Range("a1"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _ Semicolon:=False, Comma:=True, Space:=False, other:=False Sheets("Data").Columns("A:G").ColumnWidth = 12 LastRow = Sheets("Data").UsedRange.Row - 2 + Sheets("Data").UsedRange.Rows.Count Sheets("Data").Sort.SortFields.Add Key:=Range("A2"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With Sheets("Data").Sort .SetRange Range("A1:G" & LastRow) .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply .SortFields.Clear End With End Sub 

(以上不是我的代码,它是从上面发布在investexcel.net链接上的excel文件中获取的)