You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA使用MSXML2.XMLHTTP获取Google表格CSV时提示“访问被拒”的原因排查

问题解答

核心结论

这个“access is denied”错误不是代码尝试写入磁盘导致的——你的代码全程仅将响应内容存储在内存字符串sHTTPResponse中,完全没有涉及磁盘写入操作。

错误原因分析

Google Sheets的公开CSV导出链接有两个关键拦截逻辑:

  • 请求方式错误:你的代码用了POST请求,但Google Sheets的CSV导出接口只接受GET请求;
  • 请求标识被拦截:默认的MSXML2.XMLHTTP请求的User-Agent标识会被Google的反爬机制识别为非浏览器请求,从而拒绝访问。

修正后的代码

将请求方式改为GET,并添加模拟浏览器的User-Agent头:

Dim sHTTPResponse As String
Set objHTTP = CreateObject("MSXML2.XMLHTTP")
objHTTP.Open "GET", sURL, False
' 添加浏览器标识,避免被反爬拦截
objHTTP.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
objHTTP.Send
sHTTPResponse = objHTTP.responseText

额外注意事项

  1. 确保目标Google Sheet的共享设置为**“任何人可查看”**,否则即使请求正确也会被拒;
  2. 如果仍无法访问,可以尝试替换为MSXML2.ServerXMLHTTP对象,它的请求行为更接近服务器端请求,可能绕过部分限制:
Dim sHTTPResponse As String
Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP.6.0")
objHTTP.Open "GET", sURL, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
objHTTP.Send
sHTTPResponse = objHTTP.responseText

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 18:43:15