使用 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 将 Excel 重命名为 CSV

excel用宏命令VBA新建并打开一个新的excel?

在 VBA 中使用 SQL 连接两个 Excel 工作簿中的数据(只读错误)

在工作簿关闭的Excel VBA中禁用剪贴板提示

使用Excel VBA,如何将某一个工作表保存到新建的Excel中?

AppleScriptTask 命令在 Excel 2016 for Mac VBA 中不起作用