【问题标题】:How to pull "Last Trade Date" data from Yahoo! Finance API within Excel?如何从 Yahoo! 中提取“最后交易日期”数据Excel中的财务API?
【发布时间】:2015-11-08 23:42:37
【问题描述】:

使用 Visual Basic,我试图从 Yahoo! 中提取“最后交易日期”数据。通过在 Excel 中引用股票代码的 CSV 财务 API。

Yahoo! Finance API 最后交易日期作为“&f=d1”附加到 URL 中,其中 ticker 被替换为任何证券交易所在 Excel(即 GOOG、GE)中将符号传递给 StockQuote()。

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

#VALUE! Excel 中的错误截图

我意识到对 StockQuote() 函数使用 As Double 数据类型可能不适合检索日期数据。在我当前的代码块中将 Double 替换为 IntegerLongDate 数据类型会产生 #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

【问题讨论】:

    标签: vba excel yahoo-finance


    【解决方案1】:

    从 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-10
      • 2017-11-22
      • 1970-01-01
      • 2019-03-22
      • 2017-04-24
      • 2017-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多