如何从雅虎拉“最后交易date”数据 Excel中的财务API?

使用Visual Basic,我试图从雅虎拉“最后交易date”数据。 通过在Excel中引用股票的股票代码来为CSV提供财务API。

雅虎 金融API的 最后交易date作为“&f = d1 ”附加到URL上, 股票交易代码被replace为Excel中的StockQuote()(例如GOOG,GE)。

在股票代码中input股票代码并反过来用StockQuote()引用该股票时,我收到#VALUE! 错误。

点击查看#VALUE! 来自Excel的错误截图

我意识到使用StockQuote()函数的As Double数据types可能不适合检索date数据。 用当前代码块中的IntegerLongDate数据typesreplaceDouble已经呈现了#VALUE! 错误也是如此。

我正在一个启用macros的工作表中,并将Visual Basic代码放在一个模块中。

有人会解释#VALUE的来源! 错误和我可能会修改下面的代码来检索给定的股票代码的最后交易date,当利用雅虎! 财务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 

从Sub而不是从工作表中调用你的函数会给你一个更好的想法。

在这种情况下,错误是“types不匹配”就行了:

 StockQuote = http.responseText 

这是因为(如你所怀疑的)你已经把函数的返回types标记为Double ,而http.responseTextStringtypes的。 请注意, 返回值实际上包含引号,因此您可能需要删除这些引号

 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