ВОПРОС ОБНОВЛЕН, ПОЖАЛУЙСТА, СМОТРИ НИЖЕ
Я пытаюсь использовать строковые переменные (exedir
- полный каталог сетевого диска exe-файла и inputdir
- расположениеаргумента входного файла) для запуска exe-файла с его аргументом с использованием shell в VBA.
Закомментированная строка в приведенном ниже скрипте не работает.Если я вручную установлю диск, используя букву, я смогу заставить его работать, как показано ниже, но используемые здесь входные файлы .exe и .lam находятся на сетевых дисках (переменная comp
является уникальным именем ПК пользователя., который устанавливает имя входного файла .lam, поэтому имя входного файла различно для каждого пользователя).
Я не слишком знаком с синтаксисом и позаимствовал его из других источников.Я пропустил кавычку или, может быть, слишком много в закомментированной строке?
Sub CallExeWithInput()
Set wsh = VBA.CreateObject("WScript.Shell")
'Statusnum = wsh.Run(Command:="""" & exedir & """""""" & inputdir & """""", windowstyle:=1, waitonreturn:=False)
SetCurrentDirectory "M:\path\"
Statusnum = wsh.Run(Command:="foo.exe ""M:\path\" & comp & ".lam""", windowstyle:=1, waitonreturn:=False)
End Sub
Пример exedir: \\network\path\foo.exe
Пример inputdir: \\network\path\compname.lam
Пример comp: compname
<< найдено с использованием <code>Environ$("computername")
Мне известны некоторые предыдущие вопросы, я прочитал многие из них, чтобы понять, как далеко.
Я не хочу указывать букву диска и в идеале хочу запустить .exe свходной файл, использующий строковые переменные для ввода всего.Одна из основных причин, по которой я хочу использовать только строки, заключается в том, что ими можно управлять с помощью одной переменной, и при изменении каталога (например, при обновлении .exe) этот скрипт будет легко обновить.
ОБНОВЛЕНИЕ
Следуя комментариям, любезно предоставленным ниже, я прибыл сюда:
SetCurrentDirectory fldr
Statusnum = wsh.Run(Command:="foo.exe " & quote & inputdir & quote, windowstyle:=1, waitonreturn:=False)
Где quote = chr(34)
и fldr = \\network\path\
Интересно, что если inputdir определен как путь к дисководу с буквами (inputdir = M:\etc
), это работает.Если это путь к сетевому диску (inputdir = \\network\etc
), он запускается, но .exe немедленно вылетает с недопустимой операцией с плавающей запятой.
Как я могу изменить это, чтобы обеспечить входной файлкак сетевой путь?
Если это невозможно, мне, вероятно, понадобится подпрограмма, которая определяет, на какую букву пользователь подключил сетевой диск для построения моей строки, например:
path = ":\foo\bar\"
dim x as integer
for x = 65 to 90
If CBool(Len(Dir(Chr(x) & path))) Then
msgbox "It's in drive " & Chr(x)
exit for
end if
next x