Использование строк для сетевого пути, а не для сопоставленного диска, с Shell в VBA - PullRequest
0 голосов
/ 12 ноября 2018

ВОПРОС ОБНОВЛЕН, ПОЖАЛУЙСТА, СМОТРИ НИЖЕ

Я пытаюсь использовать строковые переменные (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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...