在VBA中使用Shell为网络路径使用字符串,而不是映射驱动器

时间:2018-11-12 15:48:52

标签: excel vba shell

问题已更新,请在下面查看

我正在尝试使用字符串变量(exedir-exe文件的完整网络驱动器目录,以及inputdir-输入文件参数的位置)来启动带有其参数的exe的exe VBA中的Shell。

下面的脚本中注释掉的行不起作用。如果我使用字母手动设置驱动器,则可以使它正常工作,如下所示,但是此处使用的.exe和.lam输入文件都位于网络驱动器上(变量comp是该驱动器的唯一名称。用户PC,它设置.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

补偿示例:compname <<用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

0 个答案:

没有答案