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

如何用VBA的WScript.Shell带JSON参数运行EXE并等待完成

解决VBA中WScript.Shell.Run传递含JSON参数的EXE命令问题

问题核心

你当前的代码错误地将多个独立命令行参数合并为一个,且JSON参数的引号处理不符合Shell要求,导致命令无法正确执行。

修正后的代码

Sub test()
    Dim shell As Object
    Set shell = VBA.CreateObject("WScript.Shell")
    Dim waitTillComplete As Boolean: waitTillComplete = True
    Dim style As Integer: style = 1
    Dim errorcode As Integer
    
    Dim startDateInOut As String, endDate As String
    Dim clientPath As String, apiArg As String, jsonArg As String, fileNameArg As String
    Dim fullCommand As String
    
    ' 初始化变量
    startDateInOut = "2022-10-01"
    endDate = "2022-10-10"
    clientPath = "C:\Users\API\Client.exe"
    apiArg = "/api/v2/ro/my/deposits"
    ' 构造转义后的JSON字符串(VBA中用双引号转义双引号)
    jsonArg = "{""startDateInOut"":""" & startDateInOut & """,""enddate"":""" & endDate & """}"
    ' 可动态生成文件名:"deposit-" & startDateInOut & "_" & endDate & ".JSON"
    fileNameArg = "test.json"
    
    ' 拼接完整命令:每个独立参数按需用引号包裹
    fullCommand = _
        Chr(34) & clientPath & Chr(34) & " " & _
        apiArg & " " & _
        Chr(34) & jsonArg & Chr(34) & " " & _
        fileNameArg
    
    Debug.Print fullCommand
    errorcode = shell.Run(fullCommand, style, waitTillComplete)
    
    ' 可选:执行结果校验
    If errorcode <> 0 Then
        MsgBox "命令执行失败,错误码:" & errorcode, vbExclamation
    End If
End Sub

关键修正点

  • 拆分独立参数:原代码将/api路径、JSON、文件名合并为一个参数,实际这是三个独立参数,必须分开传递。
  • JSON参数的引号处理:JSON包含双引号、大括号等Shell特殊字符,必须用双引号包裹整个JSON字符串,同时VBA中需要用两个连续双引号转义JSON里的单个双引号,确保最终传递的JSON格式正确。
  • 按需包裹引号:EXE路径如果包含空格必须用引号包裹(本例中虽无空格,但保留包裹更通用);若文件名包含空格或特殊字符,也需用Chr(34)包裹fileNameArg。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:40:42