如何用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
相关产品推荐
相关产品推荐

