如何从Yahoo!中提取“上次交易日期”数据Excel中的财务API?

时间:2015-11-08 23:42:38

标签: excel vba excel-vba yahoo-finance

使用Visual Basic,我试图从Yahoo!中提取“上次交易日期”数据通过在Excel中引用股票的股票代码来为CSV融资API。

Yahoo! Finance API 上次交易日期作为“& f = d1 ”附加到网址,代码被替换无论什么证券交易所代码在Excel(即GOOG,GE)内传递给StockQuote()。

在单元格中输入股票代码符号,然后使用StockQuote()引用该单元格时,我收到 #VALUE!错误。

VALUE! Excel中的错误截图

#VALUE! error screenshot from Excel

我意识到使用StockQuote()函数的 As Double 数据类型可能不适合检索日期数据。用我当前的代码块中的整数日期数据类型替换Double已经显示了#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

1 个答案:

答案 0 :(得分:0)

从Sub而不是从工作表调用您的函数可以让您更好地了解出错的地方。

在这种情况下,错误是"类型不匹配"在线:

StockQuote = http.responseText

这是因为(您怀疑)您已将该功能的返回类型标记为Double,而http.responseText的类型为String。 请注意,返回值实际上包含引号,因此您可能希望删除它们。

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