You need to enable JavaScript to run this app. Mac端Excel VBA获取Yahoo Finance数据WebQuery报错及406问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

Mac端Excel VBA获取Yahoo Finance数据WebQuery报错及406问题咨询

问题解答

问题1:Mac端Excel WebQuery方案不稳定报1004错误

  • 首先确认:Mac版Excel的原生WebQuery功能不支持自定义请求头、Cookie参数,你的猜测是正确的,报错的核心原因就是请求未携带雅虎接口要求的有效cookie和crumb参数。
  • 时好时坏的原因是:如果你的本地浏览器近期访问过雅虎财经,系统临时缓存的Cookie可能会被WebQuery复用,此时请求可正常通过,缓存过期后就会触发1004错误。
  • 结论:WebQuery没有添加自定义Cookie的官方支持,无法通过该方案彻底规避报错,建议直接使用VBA-Web工具实现请求。

问题2:VBA-Web请求返回406错误

  • 406错误的本质是服务端无法匹配请求头中Accept字段指定的返回格式,你的代码有三处错误触发了该问题:
    1. 你设置了request.Format = PlainText,VBA-Web会自动给请求添加Accept: text/plain的头,但雅虎财经下载接口返回的是CSV格式,不接受text/plain的格式要求。
    2. Cookie设置方法错误:VBA-Web的AddCookie方法第一个参数是单条Cookie的键名,你直接传入"Cookie"作为键名相当于添加了一个名为Cookie的无效Cookie,没有正确把完整Cookie字符串放到请求头中。
    3. 用法错误:你把完整带参数的请求URL赋值给了client.BaseUrl,不符合VBA-Web的使用规范,可能导致URL解析异常。

修复后的Mac端代码片段

#If Mac Then
    Dim client As New WebClient
    Dim response As WebResponse
    Dim request As New WebRequest
    
    ' 完整请求URL直接赋值给Resource,不要放BaseUrl
    request.Resource = tickerURL
    request.Method = HttpGet
    ' 手动指定Accept头,兼容CSV返回格式
    request.AddHeader "Accept", "text/csv, */*;q=0.9"
    ' 用AddHeader方法添加完整Cookie字符串,不要用AddCookie
    request.AddHeader "Cookie", cookie
    ' 替换为Mac平台的UA,降低被拦截概率
    request.AddHeader "User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"

    Set response = client.Execute(request)
    DoEvents
    If response.StatusCode = Ok Then
        resultFromYahoo = response.Content
    Else
        MsgBox "获取" & stockTicker & "数据时出错,错误码:" & response.StatusCode, vbInformation
        Exit Sub
    End If
#End If

额外注意事项

  • 每次批量拉取数据前,先重新获取最新的Cookie和Crumb,避免参数过期导致请求失败
  • 不要高频发送请求,雅虎接口有频率限制,连续请求过多会触发临时封禁。

内容的提问来源于stack exchange,提问作者Andrey Ampilogov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 09:15:02