调用命令提示符并通过VBA中的Shell Exec执行命令

时间:2014-09-29 13:58:21

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

我尝试在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提供的功能。

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

1 个答案:

答案 0 :(得分:1)

当一个命令从控制台“起作用”但在“.Exec”时“失败”时,通常的嫌疑人

  1. pathes - >使用引用的可执行文件和数据文件的完整/绝对文件规范
  2. 权限 - >检查用户/权利
  3. console运行shell vs .Exec启动进程
  4. 在您的情况下,“工作/失败”的含义并不完全清楚。症状是“MsgBox没有显示数字”。也许将写入转换为StdErr。所以试试:

    MsgBox objExecObject.StdErr.ReadAll()
    

    或 - 更好 -

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

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

    更新评论:

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