设置目录和If Len(Dir(…语句在VBA中

我有一个文件存在这个path下:

//path/folder1/folder2/datafile.gdp 

它是以这种方式从vba调用的外部程序的input:

 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 \在input文件名之前似乎会导致外部程序想要将某些文件写入不存在的重复目录,从而导致错误。 在由外部公司更新.exe之前,它曾经以这种格式工作。 它现在想在这里写一些文件,所有文件的前缀都是我的input文件的名称:

 \\path\folder1\folder2\PATH\FOLDER1\FOLDER2\ 

希望能解决这个问题,我把代码的最后一行改成了这个,接着在SO上的一个post上写了一些评论:

 Statusnum = wsh.Run(Command:="program.exe ""datafile.gdp""", WindowStyle:=1, waitonreturn:=True) 

由于在调用.exe之前目录设置正确,我认为删除input文件的path可以解决问题。

该程序现在启动,但似乎没有加载input文件,不再在后台自动运行计算。 相反,它会启动,并且主要的.exe窗口会popup给用户,就好像它刚刚启动来设置一个新项目一样,计算不会自动发生。

要检查哪个目录的VBA代码试图拉我的datafile.gdp,我直接在调用.exe之前创build这些循环:

 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 

奇怪的是,这些循环都没有导致rest。 该文件只存在于

 \\path\folder1\folder2\datafile.gdp 

不在重复的目录中…为什么这两个语句都满足了? 即使在当前目录已经设置的情况下,进入目录是否没有什么区别? 当前目录似乎正在影响该行:

 Statusnum = wsh.Run(Command:="program.exe ""\\path\folder1\folder2\datafile.gdp""", WindowStyle:=1, waitonreturn:=True) 

但不是这些如果循环,我不知道为什么。