当我直接单击.exe文件“PrintUsers.exe”时,输出是正确的。但是当我使用Shell通过VBA执行此操作时,结果会有所不同。它试图在另一个目录中找到该文本文件。为什么?见图:
解决方案:我现在使用:GetModuleFileName(NULL,szEXEPath,2048)而不是GetCurrentDir(buff,FILENAME_MAX);
似乎PrintUsers.exe
希望在当前目录中找到文件doNotEdit.txt
。
最好的解决方案是更改该程序以在程序本身所在的同一目录中查找该文件,但是,如果不可能,请在运行程序之前让Excel更改当前目录,即插入
ChDir ActiveWorkbook.Path
在调用Shell
之前。
此外,正如Yahya Hussein在评论中提到的,路径内的空间可能会导致问题。在您的具体情况中没有任何东西,但为了确保您将来没有问题,请考虑使用类似的东西
myFile = """" & ActiveWorkbook.Path & "\PrintUsers.exe"""
ChDir ActiveWorkbook.Path
Shell myFile, vbNormalFocus
解决方案:我现在使用:GetModuleFileName(NULL,szEXEPath,2048)而不是GetCurrentDir(buff,FILENAME_MAX);