打开一个命令窗口并从中执行一系列命令

时间:2013-12-12 17:06:55

标签: excel-vba command vba excel

我想打开一个命令窗口/提示符(例如cmd.exe)并向其传递一行命令,等待它完成,并将另一个命令传递给它,继续直到完成,然后关闭命令窗口

考虑到这一点,我想我可以构建一个多行命令列表并将其传递给命令窗口并让它执行,一旦命令执行完毕就继续执行VBA。但是,我更喜欢我的打开请求,因为它会显示它是如何实际完成的(重用一个打开的窗口)。

我发现了一些运行单个命令的事情,然后窗口被关闭但它没有被重用: http://www.pcreview.co.uk/forums/run-shell-command-via-vba-t3895036.html http://support.microsoft.com/kb/129797

我不知道这些是否适合我。我从来没有必要运行命令窗口并从Excel内部执行多个命令,所以这对我来说是一个新的学习机会。

2 个答案:

答案 0 :(得分:0)

这似乎不是我想要的方式,但我有一个解决方案,基本上给了我相同的最终结果,请参阅Excel forum

答案 1 :(得分:0)

与之前的回复相反,这是可能的。使用字符串变量来构建命令列表。使用 vbNewLine 关注每个命令。然后将整个字符串变量传递给命令shell。唯一的限制是您可能会达到命令字符串变量的字符串长度限制。在这种情况下,将它放在一个循环中,并为循环中的每次迭代构建一个单独的命令字符串。这是一个简短的示例,它创建一个shell命令来调用可执行jar,然后在jar完成后暂停。它还显示命令状态,如果只有一个命令传递给shell,则最好使用该状态。 vbNewLine是关键,也是你要找的东西。

Dim javaCmd As String
Dim javaShell
Set javaShell = CreateObject("Wscript.shell")
javaCmd = "java -jar someSpringjava.jar context.xml inputfile=" & inputfile & vbNewLine & pause
Dim cmdRet As Integer
cmdRet = javaShell.Run(javaCmd, 1, True)
Dim statusMsg = "Return code: & cmdRet
iRet = MsgBox(statusMsg, vbOkOnly)

我们使用此技术从Excel调用我们的作业例程。