Но не эти, если петли, и я не уверен, почему.
я есть файл существует по этому пути:
//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)
Но не эти, если петли, и я не уверен, почему.