Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 通过shell命令运行.exe-程序会闪烁打开和关闭_Vba_Shell_Excel - Fatal编程技术网

Vba 通过shell命令运行.exe-程序会闪烁打开和关闭

Vba 通过shell命令运行.exe-程序会闪烁打开和关闭,vba,shell,excel,Vba,Shell,Excel,因此,我在尝试通过vba打开.exe文件时遇到问题。基本上,我想打开exe,给它一些按键以获得输出,然后使用该输出 但是,每当我使用SHELL函数打开exe时,它只会在屏幕上闪烁“打开”和“关闭”,或者给定一些焦点选项时,它只会给我您的程序崩溃通知 我使用的代码很简单 Sub Run_exe() Shell ThisWorkbook.Path & "\mlt932w.exe", vbMaximizedFocus End Sub 我知道这可能是程序的问题,与vba无关,我只是想知道是否有

因此,我在尝试通过vba打开.exe文件时遇到问题。基本上,我想打开exe,给它一些按键以获得输出,然后使用该输出

但是,每当我使用SHELL函数打开exe时,它只会在屏幕上闪烁“打开”和“关闭”,或者给定一些焦点选项时,它只会给我您的程序崩溃通知

我使用的代码很简单

Sub Run_exe()
Shell ThisWorkbook.Path & "\mlt932w.exe", vbMaximizedFocus
End Sub
我知道这可能是程序的问题,与vba无关,我只是想知道是否有人遇到过类似的问题并能够解决它


感谢您的帮助

因为您正在运行的应用程序可能正在退出控制终端(cmd),我认为您需要在一个包装bat文件中运行它,该文件将启动另一个
cmd
实例来执行程序

创建一个start_app.bat(在
thiswoolk.Path
中)文件,其中包含:

@echo off
cmd /c %0\..\mlt932w.exe
pause
然后尝试从VBA启动
.bat
文件:

Sub Run_exe()
Shell ThisWorkbook.Path & "\start_app.bat", vbMaximizedFocus
End Sub

我已经编写了下面的代码来打开一个.exe文件,但它不起作用

Sub testF2()

Dim Program As Integer
Program = Shell(ThisWorkbook.Path & "\Tool\missra\missra.bat", vbMaximizedFocus)
AppActivate (Program)

End Sub

如果.exe是脚本(即批处理脚本),请尝试向其添加某种暂停。错误可能来自.exe,通常是语法错误。添加pause会让你知道有什么不对谢谢你回复我@Alex-因此my.exe是一个我无法控制的第三方程序,我只是为它创建一个输入文件,希望运行它以获取输出文件(txt格式)并进行一些后期处理。我担心这可能只是该计划的一个问题。我知道它可以通过python打开,并且完成了类似的任务,但是它不想在vba中为我工作。谢谢你回复我。两者都运行程序,但问题相同,就像我用代码运行它一样。在短时间内出现和消失time@DarrenFillis我更新了答案,使用了wrapper.bat文件,我认为这会解决您的问题。@DarrenFillis基本上是,如果不使用wrapper文件,
exit
调用会向上传播
cmd/c..
调用。因此,当我尝试通过vba以这种方式运行它时,会发生一些奇怪的事情。注意,当我单击刚刚创建的.bat文件时,它运行良好。当我通过VBA运行它时,CMD窗口显示“'mlt932w.exe'未被识别为内部或外部命令、可操作程序或批处理文件。”@DarrenFillis我编辑了“start_app.bat”内容以使用mlt932w.exe文件的绝对路径。