无法将变量值传递给批处理文件:
单击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而是命令行),我的问题就解决了。但是,唉,我似乎无法传递变量值。
任何人的想法?
也许有另一种编程语言可以解决这个问题?
答案 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
的运行时值作为参数附加到批处理文件中。