使用Visual Basic,我试图从Yahoo!中提取“上次交易日期”数据通过在Excel中引用股票的股票代码来为CSV融资API。
Yahoo! Finance API 上次交易日期作为“& f = d1 ”附加到网址,代码被替换无论什么证券交易所代码在Excel(即GOOG,GE)内传递给StockQuote()。
在单元格中输入股票代码符号,然后使用StockQuote()引用该单元格时,我收到 #VALUE!错误。
我意识到使用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
答案 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