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

VBA中通过Shell.Run执行Curl PATCH请求报错问题排查

VBA调用curl发送PATCH请求触发JSON解码错误的原因及解决方法

错误原因

JSON语法明确要求属性名必须用双引号包裹,但VBA对字符串的双引号处理规则和Python不同:

  • VBA中字符串以双引号为边界,内部的双引号需要用""转义才能被正确识别。如果你的VBA代码里直接写未转义的双引号构造JSON,最终发送的请求体要么丢失引号,要么被命令行解析截断,导致json-server收到的JSON格式不符合规范,触发JSONDecodeError。
  • Python中可以用单引号包裹字符串、或者通过json.dumps()自动处理JSON格式,天然避免了这个转义问题,所以相同逻辑能正常运行。

解决方法

1. 正确转义JSON字符串中的双引号

构造请求体时,把JSON里的每个双引号替换成两个双引号:

Dim jsonBody As String
' 转义后的JSON,属性名和结构符合规范
jsonBody = "{""isXlOpen"": {""st"": false}}"

2. 正确拼接curl命令参数

调用Shell.Run时,要确保curl的参数被命令行正确解析,特别是-H(请求头)和-d(请求体)部分的引号:

Dim curlCmd As String
' 拼接完整curl命令,注意每个双引号都要转义
curlCmd = "curl -X PATCH http://localhost:3000/general -H ""Content-Type: application/json"" -d """ & jsonBody & """"
' 执行命令,vbHide表示隐藏命令行窗口
Shell.Run curlCmd, vbHide

3. 调试验证

先把构造好的curlCmd通过MsgBox curlCmd打印出来,复制到系统命令行直接执行:

  • 如果命令行执行也报错,说明JSON格式仍有问题,继续调整转义逻辑;
  • 如果命令行执行正常,说明VBA的Shell命令拼接存在其他解析问题,可尝试用ShellExecute替代Shell.Run(需要引用Shell32),或者把命令写入批处理文件再调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 07:19:50