直接运行.exe和通过Shell VBA返回不同的结果

时间:2017-12-18 20:18:47

标签: vba excel-vba ex excel

当我直接在.exe文件“PrintUsers.exe”中单击时,输出是正确的。 但是当我使用Shell通过VBA执行此操作时,结果会有所不同。它试图在另一个目录中找到该文本文件。为什么?见图:

figure

解决方案:我现在使用:GetModuleFileName(NULL,szEXEPath,2048)而不是GetCurrentDir(buff,FILENAME_MAX);

2 个答案:

答案 0 :(得分:1)

PrintUsers.exe似乎希望在当前目录中找到文件doNotEdit.txt

最好的解决方案是更改该程序以在程序本身所在的同一目录中查找该文件,但如果不可能,请在运行程序之前让Excel更改当前目录,即插入

ChDir ActiveWorkbook.Path

在调用Shell之前。

此外,正如Yahya Hussein在评论中提到的,路径内的空间可能会导致问题。在您的具体情况中没有,但为了确保您将来没有问题,请考虑使用类似

的内容
myFile = """" & ActiveWorkbook.Path & "\PrintUsers.exe"""
ChDir ActiveWorkbook.Path
Shell myFile, vbNormalFocus

答案 1 :(得分:0)

解决方案:我现在使用:GetModuleFileName(NULL,szEXEPath,2048)而不是GetCurrentDir(buff,FILENAME_MAX);