Excel VBA调用exe报错method run of object iwshshell3 failed如何解决
报错原因
- 路径拼接逻辑错误:代码中同时定义了
strProgramPath = "\upload.exe"和strProgramName = "upload.exe",二者拼接后得到的执行路径为\upload.exeupload.exe,属于完全不存在的非法路径,是触发报错的核心原因。 - 相对路径基准不确定:即使修正拼接错误,直接使用相对路径调用程序时,
WScript.Shell.Run的默认工作目录不一定是当前xlsm文件所在的文件夹,依然会有找不到程序的概率。
解决方案
直接使用以下修正后的VBA代码即可:
Sub upload() Application.Calculation = xlCalculationManual Dim wsh As Object Set wsh = VBA.CreateObject("WScript.Shell") Dim waitOnReturn As Boolean: waitOnReturn = True Dim windowStyle As Integer: windowStyle = 1 Dim strExePath As String Dim strArgument As String ' 获取当前xlsm文件所在目录,拼接exe绝对路径 strExePath = ThisWorkbook.Path & IIf(Right(ThisWorkbook.Path, 1) = "\", "", "\") & "upload.exe" ' 传入当前工作簿全路径作为参数 strArgument = Application.ActiveWorkbook.FullName ' 正确拼接带引号的执行命令 wsh.Run """" & strExePath & """ """ & strArgument & """", windowStyle, waitOnReturn Application.Calculation = xlCalculationAutomatic End Sub
额外注意事项
- 确保upload.exe和当前运行的xlsm文件存放在同一个文件夹内
- 如果upload.exe需要管理员权限运行,请先以管理员身份启动Excel后再执行按钮触发逻辑
- 若文件路径中包含空格,上述代码的引号包裹逻辑已经做了兼容,无需额外调整
内容的提问来源于stack exchange,提问作者Эмиль Хазиев
相关产品推荐
相关产品推荐

