2015-11-08 54 views
1

使用Visual Basic,我試圖從Yahoo!上拉「Last Trade Date」數據。通過在Excel中引用股票的股票代碼來爲CSV提供財務API。如何從Yahoo!上拉取「Last Trade Date」數據Excel中的財務API?

Yahoo! Finance API最後交易日期被附加在URL爲「& F = D1」與股票被取代的任何股票交換符號被傳遞到Excel內的StockQuote()進行(即歌,GE) 。

將股票代碼輸入到單元格中,並依次使用StockQuote()引用該單元格時,我正在收到#VALUE!錯誤。

Click to view #VALUE! error screenshot from Excel

我知道使用作爲雙人數據類型爲股票報價()函數可能不適合用於檢索日期數據。用整數代替雙數,日期我當前代碼塊中的數據類型已經呈現了#VALUE!錯誤也是如此。

我在啓用宏的工作表中工作並將Visual Basic代碼放入模塊中。

有人會解釋#VALUE的來源!錯誤和我如何修改下面的代碼來檢索給定股票代碼的最後交易日期,當使用Yahoo!財務API?

Option Explicit 

Function StockQuote(ByVal ticker As String) As Double 
Dim url As String 
Dim lastDate As Double 
Dim http As Object 

url = "http://download.finance.yahoo.com/d/quotes.csv?s=" & ticker & "&f=d1" 

Set http = CreateObject("MSXML2.XMLHTTP") 
http.Open "GET", url, False 
http.Send 

StockQuote = http.responseText 
Set http = Nothing 
End Function 

回答

0

調用從子,而不是從工作表的功能會給你什麼錯一個更好的想法。

在這種情況下,錯誤是「類型不匹配」就行了:

StockQuote = http.responseText 

這是因爲(你懷疑)您舉報的函數的返回類型爲Double,而http.responseTextString型。 請注意,返回值實際上包含引號,因此您可能需要刪除這些值。

Function StockQuote(ByVal ticker As String) As Double 
    Dim url As String 
    Dim lastDate As Double 
    Dim http As Object, rv 

    url = "http://download.finance.yahoo.com/d/quotes.csv?s=" & ticker & "&f=d1" 

    Set http = CreateObject("MSXML2.XMLHTTP") 
    http.Open "GET", url, False 
    http.Send 

    rv = http.responseText 
    StockQuote = CDate(Trim(Replace(rv, """", ""))) 

    Set http = Nothing 
End Function 
+0

謝謝Tim。這解決了我的問題。 – yomhunh