【问题标题】:Calling Command Prompt and executing a command through Shell Exec in VBA在 VBA 中通过 Shell Exec 调用命令提示符并执行命令
【发布时间】:2014-09-29 13:58:20
【问题描述】:

我正在尝试使用 VBA Excel 中的 Shell 脚本在命令提示符下执行命令。当我在命令提示符下执行此命令时,它通过打印一个数字作为输出来工作。但是当我在脚本中调用相同的命令时,它不会在消息框中显示这个数字。

Sub Button6_Click()
    Dim oShell As Object
    Dim objExecObject As Object
    Set oShell = CreateObject("WScript.Shell")
    Set objExecObject = oShell.Exec("cmd /c convert test2.jpg -fill black +opaque white -fill white -opaque white -print %[fx:w*h*mean]")
    MsgBox (objExecObject.StdOut.ReadAll)
End Sub 

我认为问题在于Exec 函数中的参数,因为有多个单词。所以我通过连接一个字符串来尝试以下操作,如图所示。但这也不起作用。

    Dim command As String
    command = "convert test2.jpg -fill black +opaque white -fill white -opaque white -print %[fx:w*h*mean] null:"
    Set objExecObject = oShell.Exec("cmd /c " & command)

似乎没有运行时错误,消息框总是返回空而不打印数字。澄清一下:convert 命令是 ImageMagick 提供的功能。

请告诉我如何在命令提示符下运行转换命令并在消息框中打印命令提示符的输出。

【问题讨论】:

  • 这行得通。设置 objExecObject = oShell.Exec("cmd /c 转换 test2.jpg -fill black +opaque white -fill white -opaque white -print %[fx:whmean] null:") null在命令的最后是问题。还要确保文件的路径是绝对的,在我的情况下这不是问题。

标签: vba vbscript command-prompt wsh windows-scripting


【解决方案1】:

当命令从控制台“有效”但在 .Exec'ed 时“失败”时,通常的嫌疑人是

  1. 路径 -> 对可执行文件和数据文件使用引用的完整/绝对文件规范
  2. 权限 -> 检查用户/权限
  3. console 运行 shell vs .Exec 启动进程

在您的情况下,“工作/失败”的含义并不完全清楚。症状是“MsgBox 不显示数字”。也许将写入转换为 StdErr。所以试试:

MsgBox objExecObject.StdErr.ReadAll()

或者-更好-

If Not objExecObject.StdErr.AtEndOfStream Then MsgBox objExecObject.StdErr.ReadAll()

如果这没有帮助,请将 .Run() 与“%comspec% /k”一起使用。

更新评论:

从控制台开始转换并将其输出重定向到文件以供进一步检查。

【讨论】:

  • 1,2,3 不是问题。你的两个代码都没有工作。当我使用 Run 时,该命令在 cmd 上工作,但我需要输出(在这种情况下为数字),以便我可以在 excel 单元格上写这个。运行我将无法做到这一点。
猜你喜欢
  • 2013-07-31
  • 1970-01-01
  • 1970-01-01
  • 2011-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-18
  • 2012-09-26
相关资源
最近更新 更多