我有一个小的Excel VBA宏,用于检索给定公司在给定日期的股票价值。通过传递他们的股票代码来指定公司(" AZO"用于AutoZone," WMT"用于沃尔玛等),日期是从中检索的实际日期值。相邻细胞。
它已经工作了2.5年,但本周它刚刚停止工作,即使我没有改变任何东西。宏应该返回一个值,现在它只返回#VALUE!。当我单步执行代码时,一切正常,直到我到达.Send(),它刚停止(没有错误消息或提示错误;它只是完全停止,就像执行完成一样)。我尝试添加On Error子句但它没有被击中。注意:我认为它没有什么区别,但最初我没有括号的http.Send,但我看到很多例子("")所以我添加了但它似乎没有效果。
我的VBA体验非常有限,所以我希望有人能指出我正确的方向。
CODE:
Function StockQuote(strTicker As String, Optional dtDate As Variant)
' Date is optional - if omitted, use today. If value is not a date, throw error.
If IsMissing(dtDate) Then
dtDate = Date
Else
If Not (IsDate(dtDate)) Then
StockQuote = CVErr(xlErrNum)
End If
End If
Dim dtPrevDate As Date
Dim strURL As String, strCSV As String, strRows() As String, strColumns() As String
Dim dbClose As Double
dtPrevDate = dtDate - 7
' Compile the request URL with start date and end date
strURL = "http://ichart.finance.yahoo.com/table.csv?s=" & strTicker & _
"&a=" & Month(dtPrevDate) - 1 & _
"&b=" & Day(dtPrevDate) & _
"&c=" & Year(dtPrevDate) & _
"&d=" & Month(dtDate) - 1 & _
"&e=" & Day(dtDate) & _
"&f=" & Year(dtDate) & _
"&g=d&ignore=.csv"
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "GET", strURL, False
http.Send ("")
strCSV = http.responseText
' The most recent information is in row 2, just below the table headings.
' The price close is the 5th entry
strRows() = Split(strCSV, Chr(10)) ' split the CSV into rows
strColumns = Split(strRows(1), ",") ' split the relevant row into columns. 1 means 2nd row, starting at index 0
dbClose = strColumns(4) ' 4 means: 5th position, starting at index 0
StockQuote = dbClose
Set http = Nothing
End Function
答案 0 :(得分:0)
今天使用多年来一直运行良好的VBA代码进入同样的问题。感谢这篇文章,我不仅可以使用https让它再次运行。但我也可能知道根本原因。
相信潜在的原因可能是finance.yahoo.com启用了HSTS。这意味着一旦使用https访问该站点。将对所有未来的请求强制使用https。
HTTP严格传输安全性 https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security