在VBA中,選擇工具>參考並選擇以下引用:
- Microsoft腳本控制1.0
- Microsoft腳本運行時
以下函數將檢索最近的數據(ope N,高,低,關閉,和體積)爲特定符號:
Public Function GetLastCloseData(symbol As String) As Dictionary
Dim scriptControl As Object
Dim json As Object
Dim time_series As Object
Dim date_data As Object
Dim date_label As String
Dim date_offset As Integer
Set scriptControl = CreateObject("MSScriptControl.ScriptControl")
scriptControl.Language = "JScript"
'Retrieve historical price data in JSON format
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", "https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=" & symbol & "&apikey=" & API_KEY, False
.send
Set json = scriptControl.Eval("(" + .responseText + ")")
.abort
End With
'CallByName returns an error if it cannot find the requested selection.
'The code is written to skip over those errors.
On Error Resume Next
Set time_series = CallByName(json, "Time Series (Daily)", VbGet)
'If time series property was found...
If Not time_series Is Nothing Then
date_offset = 0
'Retrieve the most recent closing price by looking for todays date. If it's not found,
'iterate through the last week of dates, stopping whenever the most recent is found.
While date_data Is Nothing And date_offset < 8
date_label = Format(DateAdd("d", -date_offset, Date), "yyyy-mm-dd")
Set date_data = CallByName(time_series, date_label, VbGet)
date_offset = date_offset + 1
Wend
End If
If Not date_data Is Nothing Then
Set GetLastCloseData = New Dictionary
With GetLastCloseData
.Add "Open", CDbl(CallByName(date_data, "1. open", VbGet))
.Add "High", CDbl(CallByName(date_data, "2. high", VbGet))
.Add "Low", CDbl(CallByName(date_data, "3. low", VbGet))
.Add "Close", CDbl(CallByName(date_data, "4. close", VbGet))
.Add "Volume", CLng(CallByName(date_data, "5. volume", VbGet))
End With
End If
'set error handling back to normal
On Error GoTo 0
End Function
下面的Sub演示瞭如何使用結果:
Public Sub GetStockData()
Dim daily_data As Dictionary
Set daily_data = GetLastCloseData("SPY")
Debug.Print daily_data("Open")
Debug.Print daily_data("High")
Debug.Print daily_data("Low")
Debug.Print daily_data("Close")
Debug.Print daily_data("Volume")
End Sub
輸出:
260
260.15
259.57
259.76
45033392
即鏈路爲我工作。 – jamheadart
「到達Excel」是什麼意思?他們似乎承諾可以在Excel中打開的CSV文件。所以,應該到達的是csv文件。 – Variatus
我使用以下代碼來下載: –