Excel VBA调用Robin Hood API解析股票报价遇编译错误求助
解决Robin Hood API VBA解析的编译错误问题
核心错误原因
你碰到的Compiler Error: Object Required问题,本质是变量类型不匹配:
- 你将
results声明为String(值类型),但Robin Hood API返回的results是一个JSON数组,经过VBA-JSON解析后会变成Collection对象。对象类型的变量必须用Set赋值,且变量类型要和返回的对象类型一致,String根本无法接收对象,自然会报错。
而你尝试改成Object后出现的运行时错误,是因为Object类型无法直接被MsgBox输出(MsgBox只能处理字符串/数值等简单类型),需要先提取对象中的具体数据。
修正后的完整代码
下面是修复后的可运行代码,我还添加了请求状态检查、字段提取的逻辑,方便你直接获取亚马逊的报价数据:
Public Sub STOCKQUOTE() Dim http As Object Set http = CreateObject("MSXML2.XMLHTTP") Const sURL As String = "https://api.robinhood.com/quotes/?symbols=AMZN" http.Open "GET", sURL, False http.send ' 先检查API请求是否成功 If http.Status <> 200 Then MsgBox "API请求失败,状态码:" & http.Status Exit Sub End If Dim jsonResponse As Dictionary Set jsonResponse = JsonConverter.ParseJson(http.responseText) ' 正确声明results为Collection类型(对应JSON数组) Dim results As Collection Set results = jsonResponse("results") ' 遍历results集合(即使只查一只股票,也是集合里的第一个元素) Dim stockData As Dictionary For Each stockData In results ' 提取你需要的报价字段(字段名对应API返回的JSON结构) Dim stockSymbol As String Dim lastTradePrice As Double Dim askPrice As Double stockSymbol = stockData("symbol") lastTradePrice = stockData("last_trade_price") askPrice = stockData("ask_price") ' 友好显示结果 MsgBox "股票信息:" & vbCrLf & _ "代码:" & stockSymbol & vbCrLf & _ "最新成交价:$" & Format(lastTradePrice, "0.00") & vbCrLf & _ "卖一价:$" & Format(askPrice, "0.00") Next stockData End Sub
关键细节说明
变量类型匹配:
API返回的{"results": [ {...} ]}是JSON数组,VBA-JSON会把它解析为Collection对象,所以必须用Collection类型的变量接收,再用Set赋值。遍历集合提取数据:
即使你只查询一只股票,results依然是一个包含单个元素的集合,用For Each遍历可以兼容多股票查询的场景(比如把URL改成symbols=AMZN,AAPL)。字段对应关系:
你可以通过Debug.Print http.responseText打印完整的JSON响应,查看所有可用字段,比如bid_price(买一价)、volume(成交量)等,按需提取即可。请求状态检查:
添加http.Status <> 200的判断,可以避免API返回错误(比如网络问题、符号错误)时继续解析无效的JSON,让代码更健壮。
内容的提问来源于stack exchange,提问作者OrdinaryHuman




