将变量值传递给批处理文件

时间:2014-07-17 22:53:22

标签: excel-vba batch-file access-vba vba excel

无法将变量值传递给批处理文件:

单击Access 2007表单按钮时执行的VBA代码。

Private Sub OpenWB(var1 As String)
    Dim RetVal
    RetVal = Shell("S:\WildlifeHealth\Idaho\Incoming\test.bat var1", vbNormalFocus)
End Sub

来自调用OpenWB的子例程的代码:

idahofile = "S:\WildlifeHealth\Idaho\Incoming\test.xls”
Call OpenWB(idahofile)

test.bat文件:

Call %1

返回“var1”而不是" S:\ WildlifeHealth \ Idaho \ Incoming \ test.xls“

如果是test.bat文件:

Call S:\WildlifeHealth\Idaho\Incoming\test.xls, file opens.

那么如何传递var1的值而不是名称var1。

我正在尝试找到一个解决方法,在用户关闭Excel后,在进程窗口中保持excel进程的运行状态。它没有通过VBA以编程方式关闭。我想如果我可以将Access中的对话框中选择的路径名传递给批处理文件并在那里打开(因此不是来自Access而是命令行),我的问题就解决了。但是,唉,我似乎无法传递变量值。

任何人的想法?

也许有另一种编程语言可以解决这个问题?

1 个答案:

答案 0 :(得分:2)

您是否尝试过替换它:

"S:\WildlifeHealth\Idaho\Incoming\test.bat var1"

用这个:

"S:\WildlifeHealth\Idaho\Incoming\test.bat " & var1

在您Shell sub的<{1}}函数中?

要了解发生了什么,您的原始代码是在字符串文字内构造命令,即固定字符串。所以看起来你真的想传递名为OpenWB的论点。实际上,您想要做的是var1的值替换为您的子名为var1的参数的值var1。这意味着您希望在运行时构造批处理命令,这意味着您需要将提供的值var1附加到批处理文件中。因此,您的原始代码将var1硬编码为参数,而更新后的代码将var1的运行时值作为参数附加到批处理文件中。