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

问题描述 投票:-1回答:2

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

figure

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

vba excel-vba ex excel
2个回答
1
投票

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

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

ChDir ActiveWorkbook.Path

在调用Shell之前。


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

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

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.