使用 excel VBA 在命令提示符下执行命令
Posted
技术标签:
【中文标题】使用 excel VBA 在命令提示符下执行命令【英文标题】:Execute a command in command prompt using excel VBA 【发布时间】:2013-07-31 04:02:08 【问题描述】:我有一个固定的命令,我需要使用 VBA 将其传递给命令提示符,然后该命令应该运行。 例如"perl a.pl c:\temp"
以下是我尝试使用的命令,但它只是打开命令提示符而不运行命令。
Call Shell("cmd.exe -s:" & "perl a.pl c:\temp", vbNormalFocus)
请检查。
【问题讨论】:
你实际上甚至不需要先打开 cmd.exe -> Shell() 可以将你的 perl args 直接传递给 perl.exe 【参考方案1】:S 参数本身不做任何事情。
/S Modifies the treatment of string after /C or /K (see below)
/C Carries out the command specified by string and then terminates
/K Carries out the command specified by string but remains
试试这样的方法
Call Shell("cmd.exe /S /K" & "perl a.pl c:\temp", vbNormalFocus)
您甚至可能不需要将“cmd.exe”添加到此命令,除非您希望在运行此命令时打开一个命令窗口。 Shell 应该自己执行命令。
Shell("perl a.pl c:\temp")
-编辑- 要等待命令完成,您必须执行@Nate Hekman 在他的回答中显示的操作here
Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
Dim waitOnReturn As Boolean: waitOnReturn = True
Dim windowStyle As Integer: windowStyle = 1
wsh.Run "cmd.exe /S /C perl a.pl c:\temp", windowStyle, waitOnReturn
【讨论】:
请记住,shell 将在启动进程后返回。它不会等待你的 Perl 脚本完成,只是说。 非常感谢。这很好用。 “等待我的 Perl 脚本完成”的代码是什么? 我认为必须做类似this 如果不是固定命令,我需要从 excel 单元格传递变量之一,那么我该怎么做?到目前为止,我已经尝试过以下方式(X 是可变的)wsh.Run "cmd.exe /S /C perl a.pl" & X & "100", windowStyle, waitOnReturn跨度> 另一种等待命令完成的方法是使用 CreateProcessA 函数。有关 VBA 代码,请参阅这篇 Microsoft 文章“确定外壳进程何时结束”docs.microsoft.com/en-us/office/vba/access/concepts/windows-api/…以上是关于使用 excel VBA 在命令提示符下执行命令的主要内容,如果未能解决你的问题,请参考以下文章
在 VBA 中使用 SQL 连接两个 Excel 工作簿中的数据(只读错误)