在VBA

时间:2017-12-07 10:25:10

标签: excel vba excel-vba path directory

我有一个用VBA修复的代码,这是我学习的一种语言。该代码从网络驱动器调用外部exe文件。 exe最近从V5.0更新到V5.3,自那次更新以来,目录已经成为一个问题。这是从VBA代码调用可执行文件的方式:

Sub RunExecutable()
Dim wsh As Object
SetCurrentDirectory "\\<path>\" 
Statusnum = wsh.Run(Command:="program.exe ""\\<path>\inputfile.gdp""", WindowStyle:=1, waitonreturn:=True)

这曾经很完美。但是,自program.exe更新以来,从上面的脚本运行时,其中某些工作文件的路径已经重复。我怀疑SetCurrentDirectory行导致了问题。 program.exe的工作目录应该是,例如:

\\Drive\Folder1\Folder2\Folder3\ 

但是program.exe现在想要将其工作文件写入这个重复的路径:

\\Drive\Folder1\Folder2\Folder3\DRIVE\FOLDER1\FOLDER2\FOLDER3\

我们的网络上不存在,然后program.exe崩溃。如果我创建它们的子文件夹,它可以完美地运行。

我想知道的是,是否有另一种方法可以调用.exe文件而无需在VBA中设置当前目录?因为我设置为当前目录的路径是program.exe尝试运行时被复制的路径,并且我无法修改.exe文件。当没有被这个VBA代码调用时,.exe工作正常,目录没有问题。

我尝试在此行中输入.exe文件的确切路径:

wsh.Run(Command:="<path>/program.exe .....

并删除SetCurrentDirectory命令,但作为响应,我收到一条错误消息,指出无法找到.exe文件。

1 个答案:

答案 0 :(得分:0)

如何更改以下内容:

Sub RunExecutable()
Dim wsh As Object
SetCurrentDirectory "\\<path>\" 
Statusnum = wsh.Run(Command:="program.exe ""\\<path>\inputfile.gdp""", WindowStyle:=1, waitonreturn:=True)

对此(你可能还必须在inputfile.gdp之前删除\,取决于路径的结尾以及它是否以\结尾):

Sub RunExecutable()
Dim wsh As Object
SetCurrentDirectory "\\<path>\" 
Statusnum = wsh.Run(Command:="program.exe ""inputfile.gdp""", WindowStyle:=1, waitonreturn:=True)

使用Shell命令稍微不同的方法:

Sub RunExecutable()
Dim SetCurrentDirectory As String, varProc As Variant
On Error Resume Next
SetCurrentDirectory = "C:\Your\Path\program.exe" 'Your path here
varProc = Shell(SetCurrentDirectory , 1)