【问题标题】:Alternative methods to using SetCurrentDirectory in VBA在 VBA 中使用 SetCurrentDirectory 的替代方法
【发布时间】:2018-05-21 10:17:41
【问题描述】:

我有一个要在 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文件。 .exe 在不被此 VBA 代码调用时工作正常,目录没有问题。

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

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

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

【问题讨论】:

    标签: vba excel path directory


    【解决方案1】:

    如何更改以下内容:

    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)
    

    【讨论】:

    • 这似乎应该可以工作,但返回运行时错误'91' - 对象变量或未设置块变量。当我查看导致问题的行时,它只会告诉我 Statusnum = empty。我怀疑你是对的,这就是重复的来源,因为 .exe 写入重复目录的文件以该代码行中输入文件的名称为前缀。我的路径确实以 \ 结尾,因此在 inputfile.gdp 之前不需要这样做
    • @AdamFeneley 我已经更新了我的答案,通过使用 Shell 命令包含了一种稍微不同的方法,您可以尝试一下,如果对您有帮助,请您将我的回复标记为答案,谢谢。
    • 谢谢 :) 您的回答帮助我朝着解决方案前进。代码现在正在启动程序,看似没有重复的目录,但 exe 文件不再自动执行,尽管输入数据文件显然是使用运行命令导入的。我会继续挖掘。而不是像以前那样自动从我的输入文件执行所需的计算,现在打开的窗口好像我刚刚启动了软件包以创建一个新项目(它过去只是隐藏在后台运行而不需要我的输入)。
    猜你喜欢
    • 2013-05-30
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 2013-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-26
    相关资源
    最近更新 更多