Но не эти, если петли, и я не уверен, почему.

я есть файл существует по этому пути:

//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)

Но не эти, если петли, и я не уверен, почему.

Ответы на вопрос(0)

Ваш ответ на вопрос