我在此路径下存在一个文件:
//path/folder1/folder2/datafile.gdp
这是以这种方式从vba调用的外部程序的输入:
Sub RunProgram()
Dim wsh As Object
SetCurrentDirectory "\\path\"
ChDir "\\path\folder1\folder2\" 'Set Directory
Set wsh = VBA.CreateObject("WScript.Shell")
check = CurDir
Statusnum = wsh.Run(Command:="program.exe ""\\path\folder1\folder2\datafile.gdp""", WindowStyle:=1, waitonreturn:=True)
但是在最后一行,包括\ path \ folder1 \ folder2 \之前,输入文件名似乎导致外部程序想要将某些文件写入不存在的重复目录,从而导致错误。在外部公司更新.exe之前,它曾经以这种格式工作。它现在想在这里写一些文件,所有文件都以我输入文件的名称为前缀:
\\path\folder1\folder2\PATH\FOLDER1\FOLDER2\
希望解决这个问题,我将代码的最后一行更改为此内容,然后对SO上的上一篇文章发表了一些评论:
Statusnum = wsh.Run(Command:="program.exe ""datafile.gdp""", WindowStyle:=1, waitonreturn:=True)
由于在调用.exe之前正确设置了目录,我认为删除输入文件的路径可以解决问题。
程序现在启动,但似乎没有加载输入文件,也不再在后台自动运行计算。相反,它启动并且主.exe窗口弹出给用户,好像它刚刚启动以设置新项目一样,计算不会自动发生。
要检查VBA代码尝试从哪个目录中提取datafile.gdp,我在调用.exe之前直接创建了这些循环:
If Len(Dir("\\path\folder1\folder2\datafile.gdp")) = 0 Then
FileIsMissing1 = True 'I use Excel-VBA watches to break if true
End If
If Len(Dir("datafile.gdp")) = 0 Then
FileIsMissing2 = True
End If
奇怪的是,这些循环都不会导致中断。该文件仅存在于
中\\path\folder1\folder2\datafile.gdp
不在重复目录中......为什么这两个语句都满足?即使已设置当前目录,进入目录也没有区别吗?当前目录似乎正在影响该行:
Statusnum = wsh.Run(Command:="program.exe ""\\path\folder1\folder2\datafile.gdp""", WindowStyle:=1, waitonreturn:=True)
但不是这些if循环,我不知道为什么。